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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

То_чего_нет

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

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

ID | Отец | Мать

Паспорт

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

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


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