|
|
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Обращаюсь за помощью. Начальные данные из предметной области: Есть три сущности: прибор, блок, аксессуар. Прибор состоит из блоков. Прибор может поставляться с аксессуарами или без них. Приборы бывают разных видов, и, соотвественно, состоят из разных блоков. Аксессуары тоже бывают разные, и поставляются с разными видами приборов. Прибор, блок и аксессуар имеют некоторые общие характеристики, например, серийный номер, дата изготовления, тип и пр. (общие в том смысле, что характеристика "тип" есть и у прибора и у блока и у аксессуара, но ее значения различаются для разных сущностефывй.). Помимо общих характеристик приборы, аксессуары и блоки имеют уникальные характеристики (прибор, например, характеризуется цветом и весом, а блок и аксессуар - нет). Необходимо учитывать: - все созданные приборы, блоки и аксессуары (хранить их характеристики) - из каких блоков состоит прибор. - с какими аксессуарами поставляется прибор. Исходя из вышеперечисленного вижу два варианта реализации базы. 1 вариант: Создать таблицу (назовем ее "А"), в которой хранить записи о приборах, блоках и аксессуарах. В этой таблице атрибутами будут общие для трех сущностей характеристики. Уникальные же характеристики для каждой сущности предполагаю хранить в отдельных таблицах в отношении 1:1 к записям таблицы "А". А также: создать одну общую таблицу-справочник типов, в которой будут занесены и типы приборов, и типы блоков, и типы аксессуаров. создать таблицу-связь, в которой будет учитываться из каких блоков состоит прибор. создать таблицу-связь, в которой будет учитываться с какими аксессуарами поставляются приборы. 2 вариант: Создать три таблицы, в каждой из которых будут храниться записи о приборах, блоках и аксессуарах соответсвенно.(в каждой из указанных таблиц будут общие атрибуты и атрибуты уникальные для отдельной сущности) Для каждой из указанных выше таблиц сделать таблицу-справочник, в которых указать типы, характерные только для отдельной сущности. Также как и в первом варианте, создать 2 таблицы-связи. +/- 1 варианта: Плюсы: - Отсутсвует дублирование атрибутов. - Меньшее количество таблиц по сравнению со вторым вариантом. Минусы: - Записи о разных сущностях хранятся в одной таблице. - Несколько таблиц в отношении 1:1. - Справочная таблица типов содержит типы всех сущностей, что, например, может привести к ошибочному выставлению для записи прибора значения поля "тип", характерного для блока или аксессуара. - Таблицы связи будут связывать записи из одной таблицы ("А"). +/- 2 варианта: Плюсы: - Записи таблиц-связей формируются из ключей разных таблиц (на мой взгляд это снижает вероятность ошибки при формировании таблиц-связей.) - Таблицы-справочники хранят записи, характерные только для одной сущности (на мой взгляд это снижает вероятность ошибки при составлении записи) - Записи, относящиеся к одной сущности хранятся в одтельной таблице. - Нет таблиц в отношении 1:1. Минусы: - Дублирование общих атрибутов в таблицах. - Большее количество таблиц по сравнению с первым вариантом. Подскажите, пожалуйста, какой из вариантов предпочтительней? Я больше склоняюсь ко второму варианту. Возможно, рациональное решение не ограничивается этими двумя вариантами? Проектирую в рамках MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 13:03 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkov- Большее количество таблиц по сравнению с первым вариантом. Первый вариант требует как минимум шесть таблиц. Второй - только пять. У тебя всё хорошо с арифметикой?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 13:15 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkov. Минусы: - Записи о разных сущностях хранятся в одной таблице. Это зависит от того, как делить предметную област на "сущности". Например, можно считать что в таблице А лежит одна сущность "учетная единица", а уже в дочерних - соответсвенно, приборы, блоки и аксессуары. khrenkov. - Несколько таблиц в отношении 1:1 Cтрого говоря, не 1:1, а 1:0..1 - а это уже вполне допустимо. khrenkov. - Справочная таблица типов содержит типы всех сущностей, что, например, может привести к ошибочному выставлению для записи прибора значения поля "тип", характерного для блока или аксессуара. Это решаемая проблема - например, можно добавить в первичный ключ справочника поле "тип учетной сущности" и сделать соответствующий foreign key (Я уже писал недавно) Имхо определяться с вопросом "одна таблица или несколько?" надо по ответу "Много ли единообразных обработок?" Например, если Вы будете приделывать складской учет к своей системе - на склад, скорее всего, будут обинаково приниматься и приборы и блоки и аксессуары, с этих позиций одна таблица - благо. Если единообразных обработок нет и не предвидится - тогда лучше будет вариант 2, потому что он проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 13:46 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Количество таблиц: 1 вариант: общая таблица(общие атрибуты) + по одной таблице для сущностей(а сущностей 3)(уникальные атрибуты) + общий справочник = 5; 2 вариант: для каждой сущности по таблице (общие + уникальные атрибуты) + для каждой сущности по справочнику = 6; Таблицы-связи я не считаю. 6 > 5; В постановке задачи в первом сообщении я немного упростил условие. Например, есть еще характеристика "статус", которая относится ко всем сущностям, но значения для нее должны быть разные для разных сущностей. Первый вариант подразумевает создание одной таблицы-справочника, в котором будут перечислены все статусы для всех сущностей. Второй же вариант предполагает создание трех таблиц-справочников, каждая из которых будет содержать статусы, характерные для той или иной сущности. Т.о. добавление новой общей характеристики, значение которой берется из справочника, в первом варианте предполагает дополнительное создание 1 таблицы, а во втором - 3х. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 13:52 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkov2 вариант: для каждой сущности по таблице (общие + уникальные атрибуты) + для каждой сущности по справочнику = 6; Что за "справочник" и чем он отличается от таблицы, содержащей атрибуты? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:14 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkovВторой же вариант предполагает создание трех таблиц-справочников, каждая из которых будет содержать статусы, характерные для той или иной сущности. Количество этих статусов достаточно велико чтобы третья НФ принесла пользу? На малом количестве она скорее мешает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:17 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovkhrenkovВторой же вариант предполагает создание трех таблиц-справочников, каждая из которых будет содержать статусы, характерные для той или иной сущности. Количество этих статусов достаточно велико чтобы третья НФ принесла пользу? На малом количестве она скорее мешает. Как "польза от третьей НФ" связана с количеством статусов (т.е. записей в справочной таблице)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:23 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovkhrenkovВторой же вариант предполагает создание трех таблиц-справочников, каждая из которых будет содержать статусы, характерные для той или иной сущности. Количество этих статусов достаточно велико чтобы третья НФ принесла пользу? На малом количестве она скорее мешает. Каждый справочник определяет домен атрибута для каждой сущности. Например: И приборы, и блоки, и аксессуары имеют атрибут "тип". Приборы могут быть только типа "А" или "Б", блоки - "Ц", "Д" или "Е", а аксессуары - "Ф" или "Ж". Поэтому справочник "типа" для приборов будет иметь записи "А" и "Б", для аксессуаров - "Ц", "Д" и "Е", для аксессуаров - "Ф" и "Ж". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:32 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
В предыдущем сообщении отвечал на это: Dimitry Sibiryakovkhrenkov2 вариант: для каждой сущности по таблице (общие + уникальные атрибуты) + для каждой сущности по справочнику = 6; Что за "справочник" и чем он отличается от таблицы, содержащей атрибуты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:41 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkovПоэтому справочник "типа" для приборов будет иметь записи "А" и "Б", для аксессуаров - "Ц", "Д" и "Е", для аксессуаров - "Ф" и "Ж". А если на "тип" вообще не создавать справочник?.. Для двух или трёх значений без дополнительных атрибутов вполне хватит check constraint. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 14:41 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА если на "тип" вообще не создавать справочник?.. Для двух или трёх значений без дополнительных атрибутов вполне хватит check constraint. Думаю, что это решение не подойдет: домен атрибута "тип" содержит набор строк. Справочник здесь лучше впишется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 15:34 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkovдомен атрибута "тип" содержит набор строк. Справочник здесь лучше впишется. Справочник из одного поля, содержащий две записи?.. Ну-ну... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 16:53 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, спасибо за совет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 20:06 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkov, я вижу вообще тонко один вариант. почитать тз и создать базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 20:20 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
MasterZivkhrenkov, я вижу вообще тонко один вариант. почитать тз и создать базу. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 22:15 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ТЗ пишу я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 06:40 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
khrenkov, Значит, сначала напиши, потом его прочитай, и сделай, как надо БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:27 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
авторПодскажите, пожалуйста, какой из вариантов предпочтительней? ПЕРВЫЙ. называется это отношение подкатегории, оно же наследование. Как это хорошо делать теперь достаточно хорошо написано, как ни странно, в документации/книгах по Hibernate -- там кстати описаны все виды реализации наследования в РСУБД, с их достоинствами и недостатками, рекомендую прочитать. Этот вариант реализации там под каким-то номером идёт, второй или третий. Он лучше всего, потому что не предполагает никаких РСУБД -аномалий -- естественный для РБД, и наиболее гибкий, как по проектированию БД и дальнейшему её расширению, так и по обработке данных. автор Возможно, рациональное решение не ограничивается этими двумя вариантами? Да, есть ещё EAV и другие schemaless DB (первое универсально для любой РСУБД, второе должно поддерживаться СУБД) авторПроектирую в рамках MySQL. Всё равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 22:35 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
MasterZivавторПодскажите, пожалуйста, какой из вариантов предпочтительней? ПЕРВЫЙ. ... Он лучше всего, потому что не предполагает никаких РСУБД -аномалий. Какие "РСУБД-аномалии" предполагает вариант №2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:18 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, автор2 вариант: Создать три таблицы, в каждой из которых будут храниться записи о приборах, блоках и аксессуарах соответсвенно.(в каждой из указанных таблиц будут общие атрибуты и атрибуты уникальные для отдельной сущности) Для каждой из указанных выше таблиц сделать таблицу-справочник, в которых указать типы, характерные только для отдельной сущности. Также как и в первом варианте, создать 2 таблицы-связи. Вот то, что общие атрибуты храняться в 3-х таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 15:25 |
|
||
|
Нужен совет по "правильному" проектированию.
|
|||
|---|---|---|---|
|
#18+
MasterZivКот Матроскин, автор2 вариант: Создать три таблицы, в каждой из которых будут храниться записи о приборах, блоках и аксессуарах соответсвенно.(в каждой из указанных таблиц будут общие атрибуты и атрибуты уникальные для отдельной сущности) Для каждой из указанных выше таблиц сделать таблицу-справочник, в которых указать типы, характерные только для отдельной сущности. Также как и в первом варианте, создать 2 таблицы-связи. Вот то, что общие атрибуты храняться в 3-х таблицах. Т.е. если у меня в таблице Проводки и таблице Контракты есть "общий" атрибут Сумма - то это "РСУБД аномалия"? Ой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 16:56 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=23&tid=1540640]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 378ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...