|
|
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, подскажите пожалуйста, как организовать структуру связей БД. Мне нужно создать БД электронных приборов различного типа, напр. осциллографы, счетчики и т.д. У каждого типа прибора свои характеристики, т.е. таблица "Осциллографы" будет иметь свои колонки, а таблица "Счетчики" свои. Не могу разобраться как связать их с таблицей просто "Компоненты" где будут храниться ID-ки всех приборов и как через нее обращаться к соответствующей типу компонента таблице, которая содержит характеристики этого компонента, напр. осциллографа. Надеюсь поможете, Спасибо заранее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 00:46 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
Ты объясни, зачем тебе таблица "Компоненты"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 01:02 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
Таблица "Компоненты", ну не знаю. Просто в этой таблице хранятся id всех приборов, у нее есть атрибут "тип элемента", который является внешним ключом для таблицы "ТипыПриборов". Т.е. надо хранить в таблице "Компоненты" различные типы приборов и иметь возможность для определенного типа компонента связать его с соответствующей таблицей его характеристик. Т.е. например таблица люди содержит записи обо всех людях, в ней есть например и взрослые и дети. Для детей есть таблица о каких-то их специфичных характеристиках, а для взрослых есть похожая таблица, только со своими характеристиками. Как в Таблице люди отобразить связь взрослого человека с таблицей характеристик взрослого, а для ребенка с его таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 01:50 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
iamjin, если не знаешь зачем тебе таблица, то она скорее всего не нужна и вопрос теряет смысл. решение по таблице с людьми зависит от того, какая у тебя СУБД. В объектной СУБД эта задача решается созданием подклассов для класса Люди. Для реляционных СУБД есть рецепты эмуляции наследования, но выглядят они корявенько. Проще говорить о таких сущностях как паспорт или свидетельство о рождении. Там где возможна ссылка как на паспорт, так и на свидтельство о рождении можно завести два поля и заполнять только одно из них (это как один из вариантов, который допускает создание внешних ключей и проверку, что указан только один из возможных документов, он годится и для создания таблицы Люди со ссылками на специфику детей и взрослых). Но когда множество подтипов открытое, добавлять поля в таблицы и поддерживать их в запросах не очень удобно. Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать в ней же поля. Этот вариант требует меньше соединений в запросах и позволяет делать сквозные выборки по всем типам документов. Такой вариант применяется для хранения объектов в оракле - без Объектного слоя выглядит коряво, но эффективно. На том и предлагаю остановиться. Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать таблицы со ссылкой на первую. Но с контролем подтипов придётся помудрить (например добавить в PK тип объекта), или забить на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 06:45 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
iamjinкак организовать структуру связей БД Вариант 1. Названия приборовКодНазвание ПриборыКодКод названияДругие поля Единицы измеренияКодНазвание ХарактеристикиКодНазваниеКод единицы измерения Описание приборовКодКод прибораКод характеристикиЗначение характеристикиДругие поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 09:45 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
В варианте 2 можно сделать под каждый тип прибора свою табличку описания. Приборы типизировать... Ну и данные брать согласно типа. Т.е. все зависи от того, что будет потом делаться с этими данными. Как они будут обрабатываться... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 09:47 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
krvsa, а не могли бы немного поподробнее про 2-ой вариант. Он мне кажется более простым и я как раз в этом роде и пытаюсь что-то сделать. Т.е. есть 4 таблицы: Компоненты(Devices), ТипыКомпонентов(DeviceTypes), Осциллографы(Oscillographs) и напр. Счетчики(Counters). У DeviceTypes 2 атрибута (DeviceTypeID - PK и DeviceType). У Devices 2 атрибута (ModelID - PK, DeviceTypeID - FK). У таблицы Oscillographs 3 атирбута (ModelID - FK, AtributX, AtributY). У таблицы Counters 4 атирбута (ModelID - FK, AtributA, AtributB, AtributC). Как сделать так чтобы зная ModelID обращаться через Devices именно к таблице Oscillographs, если в DeviceTypeID для записи стоит 'Осцилограф'. А если там 'Счетчик', то обращаться к Counters ? То есть в sql-запросе не указывать явно таблицу с характеристиками осциллографа вроде select * from Oscillographs where ModelID = '111', а обращаться к таблице Devices и в зависимости от атрибута DeviceTypeID возвращать записи из нужной таблицы - Oscillographs если DeviceTypeID = 1 и Counters если DeviceTypeID = 2. При этом в таблице DeviceTypes 2 записи: 1, 'Осциллографы' и 2, 'Счетчики'. 1-ый вариант пугает, просто у меня может быть 10 типов компонентов и для каждого около 7-8 своих характеристик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 13:41 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
iamjin, это вам надо объектную СУБД использовать. Там SQL машина сама разбирает подтип объекта и обращается в нужные таблицы. В реляционной СУБД поля выборки и таблицы определяются на этапе коппиляции SQL запроса и в зависимости от значений атрибутов меняться не могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 16:18 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
iamjinв sql-запросе не указывать явно таблицу Такое возможно только если sql-запрос создается динамически. Да и то с кучей оговорок... Т.о. это тот самый минус (точнее один из), который есть в этом варианте хранения. iamjin1-ый вариант пугает, просто у меня может быть 10 типов компонентов и для каждого около 7-8 своих характеристик. Там как раз количество вообще не ограничитель. Т.ч. ничего страшного не вижу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2010, 16:38 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
iamjin, не обязательно денормалировывать таблицы до упора - будут неудобства работы с кучей таблиц. пусть будет таблица приборы, в ней тип прибора и парам1,... парам10 (опционально имяпарам,... имяпарам10) по типу определяете какие параметры для какого прибора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2010, 13:08 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
авторПроще говорить о таких сущностях как паспорт или свидетельство о рождении. Там где возможна ссылка как на паспорт, так и на свидтельство о рождении можно завести два поля и заполнять только одно из них (это как один из вариантов, который допускает создание внешних ключей и проверку, что указан только один из возможных документов, он годится и для создания таблицы Люди со ссылками на специфику детей и взрослых). Но когда множество подтипов открытое, добавлять поля в таблицы и поддерживать их в запросах не очень удобно. Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать в ней же поля. Этот вариант требует меньше соединений в запросах и позволяет делать сквозные выборки по всем типам документов. Такой вариант применяется для хранения объектов в оракле - без Объектного слоя выглядит коряво, но эффективно. На том и предлагаю остановиться. Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать таблицы со ссылкой на первую. Но с контролем подтипов придётся помудрить (например добавить в PK тип объекта), или забить на него поясните плиз этот момент. есть у меня дети и взрослые. одни имеют паспорт, со совими паспортными данными, другие - свидетельство о рождении. какая будет структура БД в АКСЕСС ? ну вот например, таблица номер 1, назовем ее ОбщиеАтрибуты код | фио | адрес | датаРождения - это таблица с общими атрибутами и для детей, и для взрослых. я так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ? и как их связать с главной? если надо добавить связующий атрибут в главную таблицу, то какого типа ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2010, 14:19 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
.Артемя так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ? Не факт... Может можно обойтись табличкой "Документ", в котором будут все атрибуты, которых хватит для паспорта, свидетельства и удостоверения офицера... .Артеми как их связать с главной? если надо добавить связующий атрибут в главную таблицу, то какого типа ? Это все наверняка будет определяться той СУБД, на которой все это реализовывается... Как показывает практика, ФИО нужно делать отдельной таблицей, поскольку граждане норовят поменять либо фамилию... Либо еще чего... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2010, 18:15 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
krvsaКак показывает практика, ФИО нужно делать отдельной таблицей, поскольку граждане норовят поменять либо фамилию... Либо еще чего... Не пытейтесь моделировать граждан. Моделируйте документы - паспорт, договор и т.п.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2010, 15:53 |
|
||
|
Помогите со структурой БД электронных приборов
|
|||
|---|---|---|---|
|
#18+
.Артемпоясните плиз этот момент. есть у меня дети и взрослые. одни имеют паспорт, со совими паспортными данными, другие - свидетельство о рождении. какая будет структура БД в АКСЕСС ? ну вот например, таблица номер 1, назовем ее ОбщиеАтрибуты код | фио | адрес | датаРождения - это таблица с общими атрибутами и для детей, и для взрослых. я так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ? и как их связать с главной? если надо добавить связующий атрибут в главную таблицу, то какого типа ? 1. В свидетельстве о рождении нет адреса. 2. Что такое код? 3. Свидетельство о рождении и паспорт это разные документы. У нех нет общих атрибутов - не пытайтесь моделировать людей! Если говорить отвлечённо То_чего_нет ID | код | фио | адрес | датаРождения Св. о рождении ID | Отец | Мать Паспорт ID | Прописка | Дети Где foreign key Св. о рождении(ID) и Паспорт(ID) references То_чего_нет(ID) Одновременно ID во всех таблицах - Primary key. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2010, 16:09 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36397506&tid=1542904]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
194ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 551ms |

| 0 / 0 |
