Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите со структурой БД электронных приборов / 15 сообщений из 15, страница 1 из 1
05.01.2010, 00:46
    #36397363
iamjin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
Здравствуйте,

подскажите пожалуйста, как организовать структуру связей БД. Мне нужно создать БД электронных приборов различного типа, напр. осциллографы, счетчики и т.д. У каждого типа прибора свои характеристики, т.е. таблица "Осциллографы" будет иметь свои колонки, а таблица "Счетчики" свои. Не могу разобраться как связать их с таблицей просто "Компоненты" где будут храниться ID-ки всех приборов и как через нее обращаться к соответствующей типу компонента таблице, которая содержит характеристики этого компонента, напр. осциллографа.

Надеюсь поможете, Спасибо заранее...
...
Рейтинг: 0 / 0
05.01.2010, 01:02
    #36397378
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
Ты объясни, зачем тебе таблица "Компоненты"?
...
Рейтинг: 0 / 0
05.01.2010, 01:50
    #36397416
iamjin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
Таблица "Компоненты", ну не знаю. Просто в этой таблице хранятся id всех приборов, у нее есть атрибут "тип элемента", который является внешним ключом для таблицы "ТипыПриборов". Т.е. надо хранить в таблице "Компоненты" различные типы приборов и иметь возможность для определенного типа компонента связать его с соответствующей таблицей его характеристик. Т.е. например таблица люди содержит записи обо всех людях, в ней есть например и взрослые и дети. Для детей есть таблица о каких-то их специфичных характеристиках, а для взрослых есть похожая таблица, только со своими характеристиками. Как в Таблице люди отобразить связь взрослого человека с таблицей характеристик взрослого, а для ребенка с его таблицей.
...
Рейтинг: 0 / 0
05.01.2010, 06:45
    #36397459
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
iamjin,

если не знаешь зачем тебе таблица, то она скорее всего не нужна и вопрос теряет смысл.

решение по таблице с людьми зависит от того, какая у тебя СУБД. В объектной СУБД эта задача решается созданием подклассов для класса Люди. Для реляционных СУБД есть рецепты эмуляции наследования, но выглядят они корявенько.

Проще говорить о таких сущностях как паспорт или свидетельство о рождении. Там где возможна ссылка как на паспорт, так и на свидтельство о рождении можно завести два поля и заполнять только одно из них (это как один из вариантов, который допускает создание внешних ключей и проверку, что указан только один из возможных документов, он годится и для создания таблицы Люди со ссылками на специфику детей и взрослых). Но когда множество подтипов открытое, добавлять поля в таблицы и поддерживать их в запросах не очень удобно.

Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать в ней же поля. Этот вариант требует меньше соединений в запросах и позволяет делать сквозные выборки по всем типам документов. Такой вариант применяется для хранения объектов в оракле - без Объектного слоя выглядит коряво, но эффективно. На том и предлагаю остановиться.

Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать таблицы со ссылкой на первую. Но с контролем подтипов придётся помудрить (например добавить в PK тип объекта), или забить на него.
...
Рейтинг: 0 / 0
05.01.2010, 09:45
    #36397504
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
iamjinкак организовать структуру связей БД
Вариант 1.

Названия приборовКодНазвание
ПриборыКодКод названияДругие поля
Единицы измеренияКодНазвание
ХарактеристикиКодНазваниеКод единицы измерения
Описание приборовКодКод прибораКод характеристикиЗначение характеристикиДругие поля
...
Рейтинг: 0 / 0
05.01.2010, 09:47
    #36397506
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
В варианте 2 можно сделать под каждый тип прибора свою табличку описания. Приборы типизировать... Ну и данные брать согласно типа.

Т.е. все зависи от того, что будет потом делаться с этими данными. Как они будут обрабатываться...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
05.01.2010, 13:41
    #36397750
iamjin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
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 своих характеристик.
...
Рейтинг: 0 / 0
05.01.2010, 16:18
    #36398001
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
iamjin,

это вам надо объектную СУБД использовать. Там SQL машина сама разбирает подтип объекта и обращается в нужные таблицы. В реляционной СУБД поля выборки и таблицы определяются на этапе коппиляции SQL запроса и в зависимости от значений атрибутов меняться не могут.
...
Рейтинг: 0 / 0
05.01.2010, 16:38
    #36398030
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
iamjinв sql-запросе не указывать явно таблицу
Такое возможно только если sql-запрос создается динамически. Да и то с кучей оговорок... Т.о. это тот самый минус (точнее один из), который есть в этом варианте хранения.

iamjin1-ый вариант пугает, просто у меня может быть 10 типов компонентов и для каждого около 7-8 своих характеристик.
Там как раз количество вообще не ограничитель. Т.ч. ничего страшного не вижу...
...
Рейтинг: 0 / 0
06.01.2010, 13:08
    #36398843
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
iamjin,
не обязательно денормалировывать таблицы до упора - будут неудобства работы с кучей таблиц.

пусть будет таблица приборы, в ней тип прибора и парам1,... парам10 (опционально имяпарам,... имяпарам10)

по типу определяете какие параметры для какого прибора.
...
Рейтинг: 0 / 0
07.01.2010, 14:19
    #36399865
.Артем
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
авторПроще говорить о таких сущностях как паспорт или свидетельство о рождении. Там где возможна ссылка как на паспорт, так и на свидтельство о рождении можно завести два поля и заполнять только одно из них (это как один из вариантов, который допускает создание внешних ключей и проверку, что указан только один из возможных документов, он годится и для создания таблицы Люди со ссылками на специфику детей и взрослых). Но когда множество подтипов открытое, добавлять поля в таблицы и поддерживать их в запросах не очень удобно.

Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать в ней же поля. Этот вариант требует меньше соединений в запросах и позволяет делать сквозные выборки по всем типам документов. Такой вариант применяется для хранения объектов в оракле - без Объектного слоя выглядит коряво, но эффективно. На том и предлагаю остановиться.

Возможно для общего класса-предка создать таблицу, а для атрубутов подклассов создать таблицы со ссылкой на первую. Но с контролем подтипов придётся помудрить (например добавить в PK тип объекта), или забить на него
поясните плиз этот момент.
есть у меня дети и взрослые. одни имеют паспорт, со совими паспортными данными, другие - свидетельство о рождении.

какая будет структура БД в АКСЕСС ?

ну вот например, таблица номер 1, назовем ее ОбщиеАтрибуты

код | фио | адрес | датаРождения

- это таблица с общими атрибутами и для детей, и для взрослых.

я так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ? и как их связать с главной? если надо добавить связующий атрибут в главную таблицу, то какого типа ?
...
Рейтинг: 0 / 0
07.01.2010, 18:15
    #36400081
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
.Артемя так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ?
Не факт...
Может можно обойтись табличкой "Документ", в котором будут все атрибуты, которых хватит для паспорта, свидетельства и удостоверения офицера...

.Артеми как их связать с главной?
если надо добавить связующий атрибут в главную таблицу, то какого типа ?
Это все наверняка будет определяться той СУБД, на которой все это реализовывается...


Как показывает практика, ФИО нужно делать отдельной таблицей, поскольку граждане норовят поменять либо фамилию... Либо еще чего...
...
Рейтинг: 0 / 0
08.01.2010, 15:53
    #36400643
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
krvsaКак показывает практика, ФИО нужно делать отдельной таблицей, поскольку граждане норовят поменять либо фамилию... Либо еще чего...

Не пытейтесь моделировать граждан. Моделируйте документы - паспорт, договор и т.п..
...
Рейтинг: 0 / 0
08.01.2010, 16:09
    #36400661
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
.Артемпоясните плиз этот момент.
есть у меня дети и взрослые. одни имеют паспорт, со совими паспортными данными, другие - свидетельство о рождении.

какая будет структура БД в АКСЕСС ?

ну вот например, таблица номер 1, назовем ее ОбщиеАтрибуты

код | фио | адрес | датаРождения

- это таблица с общими атрибутами и для детей, и для взрослых.

я так, понимаю , что нужно еще две таблицы ( ТаблицаСвидОРождении и ТаблицаПаспорт ? и как их связать с главной? если надо добавить связующий атрибут в главную таблицу, то какого типа ?

1. В свидетельстве о рождении нет адреса.
2. Что такое код?
3. Свидетельство о рождении и паспорт это разные документы. У нех нет общих атрибутов - не пытайтесь моделировать людей!

Если говорить отвлечённо

То_чего_нет

ID | код | фио | адрес | датаРождения

Св. о рождении

ID | Отец | Мать

Паспорт

ID | Прописка | Дети

Где foreign key Св. о рождении(ID) и Паспорт(ID) references То_чего_нет(ID)
Одновременно ID во всех таблицах - Primary key.
...
Рейтинг: 0 / 0
08.01.2010, 16:15
    #36400674
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите со структурой БД электронных приборов
mcureenabНе пытейтесь моделировать граждан.
А я их и не моделирую...
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите со структурой БД электронных приборов / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]