|
|
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Всем привет! Дело в следующем: разрабатываем модель БД для одного объекта. В принципе достаточно стандартная: заказы, задания, операции и т.п. Непонимание в коллективе возникло после того дошли до хранения справочников-констант для всяких статусов: статусы заказа, приоритеты и т.п. Я сторонник все впихнуть в две сущности: [заголовки справочников]---<[Значения справочников] . Коллеги же, за то, чтобы для каждого справочника делать свою таблицу (в ней максимум будет 3-4 строки). Я крайне против этого, т.к. в этом случае усложняется разработка единого функционала, да и интерфейс для ввода придется усложнять. Еще раз делаю акцент на то, что это статичные справочники - константы. Посоветуйте пожалуйста, как лучше, а главное правильнее сделать. Буду очень признателен, если кто вспомнит статьи на подобные темы. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 11:29 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Прально коллеги говорят - разными таблицами, а вот интерфейс ввода/редактирования вполне можно одной унверсальной формой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 11:39 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
П-ЛПрально коллеги говорят - разными таблицами Почему? Зачем "плодить" сущности? П-Линтерфейс ввода/редактирования вполне можно одной унверсальной формой. Можно, но придется извращаться - вопрос зачем усложнять себе жизнь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 11:45 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
П-Л, по хранению предложу третий вариант - таки общие таблицы - но с поддержкой иерархии, чтобы проще было ориентироваться в пользовательском интерфейсе в куче констант... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 11:54 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков МаксимП-ЛПрально коллеги говорят - разными таблицами Почему? Зачем "плодить" сущности? +1 Гришков МаксимП-Линтерфейс ввода/редактирования вполне можно одной унверсальной формой. Можно, но придется извращаться - вопрос зачем усложнять себе жизнь? Ну если не одной - то по крайней мере по количеству типов данных для значений справочников - но не более того... всю остальную информацию можно держать в метаданных самих справочников... "-" - функционал из исходников всё больше переезжает в БД - и это нужно сопровождать и поддерживать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 11:56 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
П-ЛПрально коллеги говорят - разными таблицами, а вот интерфейс ввода/редактирования вполне можно одной унверсальной формой. +1 целостность как поддерживать будете? если всё в одной таблице, то придётся это всё на уровне приложения отслеживать. И это может оказаться ещё большим гемором, чем авторусложняется разработка единого функционала, да и интерфейс для ввода придется усложнять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 12:28 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Шайтан, Целостность - внешние ключи на "Значения справочников", а вот, чтобы туда не попала какая-нибудь ерунда - это уже на клиенте (в dropdownlist'е показывать все, что есть в "Значениях справочников" по ID из "Заголовков". По-моему это не сильно усложнит интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 12:50 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков МаксимШайтан, Целостность - внешние ключи на "Значения справочников", а вот, чтобы туда не попала какая-нибудь ерунда - это уже на клиенте (в dropdownlist'е показывать все, что есть в "Значениях справочников" по ID из "Заголовков". По-моему это не сильно усложнит интерфейс. +1 коллегам. Целостность должна отрабатываться в БД! ибо клиентов бывает много, клиенты бывают разные - критические вещи надо максимально изолировать от творческих потуг внешнего разума! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 13:13 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков МаксимЦелостность - внешние ключи на "Значения справочников", а вот, чтобы туда не попала какая-нибудь ерунда Если операции изменения данных будут реализованы на хранимых процедурах, то в них как раз можно осуществлять контроль "ерунды". Опять же, можно в БД описать, какой справочник к какой сущности может относиться (заказы, задания, операции и т.п.). На основе этой информации контроль можно осуществлять на уровне хранимок или тригеров. Так что варианты есть, не нужно на клиента контроль отдавать. А можно и разные таблицы на каждый вид справочников, как коллеги предлагают. Думаю, что при рассмотрении вопроса стоит учесть принципы, примененные к остальным сущностям в БД. В первом приближении, я бы разнес справочники по таблицам. Основываясь на информации из первого поста, сделал бы справочники: "возможный статус документа" и "возможный приоритет документа". А дальше у каждой сущности завел бы по внешнему ключу на каждый справочник, возможный для этой сущности. Кстати, в Вашем варианте как это будет выглядеть? Список статусов на сущность? Гришков Максимэтом случае усложняется разработка единого функционала, да и интерфейс для ввода придется усложнять Тут немного не понял. Если у заказа нужно выставить например два статуса (из двух разных справочников), то все равно одним выпадающим списком это сделать не получится, либо будет неудобно для пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 14:30 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
trayaТут немного не понял. Если у заказа нужно выставить например два статуса (из двух разных справочников), то все равно одним выпадающим списком это сделать не получится, либо будет неудобно для пользователя. Я имел ввиду про пользовательский интерфейс ведения всех этих константных справочников. К тому же, если делать по-моему, то достаточно сделать одну функцию для получения текста значения справочника по ID, е если для таблицы делать по отдельности, то придется джоиниться к разным таблицам, или писать кучу функций, или делать единую функцию с кучей кейсов. И, если добавится новый справочник, вносить в нее изменения. trayaА дальше у каждой сущности завел бы по внешнему ключу на каждый справочник, возможный для этой сущности. Кстати, в Вашем варианте как это будет выглядеть? Список статусов на сущность? Не понял вопроса. Отвечаю как понял :). Есть 2 сущности: Заголовок справочника Поле ТипHEADER_ID intHEADER_NAME nvarchar(100) Значения справочника Поле ТипITEM_ID intHEADER_ID intITEM_NAME nvarchar(500) Имеем: Заголовок справочника HEADER_ID HEADER_NAME1 Статусы заказов2 Приоритет заказов Значения справочника ITEM_ID HEADER_ID ITEM_NAME1 1 В работе2 1 Завершен... ... ...6 2 Высокий7 2 Низкий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 15:46 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков МаксимШайтан, Целостность - внешние ключи на "Значения справочников", а вот, чтобы туда не попала какая-нибудь ерунда - это уже на клиенте (в dropdownlist'е показывать все, что есть в "Значениях справочников" по ID из "Заголовков". По-моему это не сильно усложнит интерфейс.Если "это уже на клиенте", то нужно не писать "Целостность - внешние ключи", а честно сказать - целостность средствами БД обеспечиваться не будет. Непонятно, зачем тогда вообще нужен в таком случае внешний ключ??? Для красоты, чтоб было? Он же не будет обеспечивть целостности. Если уж такая схема применяется, нужно хотя бы обеспечить целостность в БД чек-констрейнами. Ну и в целом непонятно, зачем это всё. Ваш тезис "усложняется разработка единого функционала" совершенно не прослеживается. Это просто ваше убеждение. Вы просто подсчитайте, насколько количественно (в часах) усложняется разработка новой формы, или добавления новой сущности, или ещё чего то подобного. Особенно с учётом возможности создания нормальных универсальных классов/контролов для работы со спрравочником. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 16:04 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Констрейны в таком случае по крайней мене не позволят удалить значение из справочника, если на него есть где-то ссылка. Насчет времени, я просто сторонник универсальности - в мое случае мы получаем: 1. в какой-то мере универсальную структуру для хранения константных справочных значений. 2. Единый интерфейс для их ведения. 3. Частичное поддержание целостности БД средствами БД, а учитывая возможность ее дополнительного контроля при помощи чеков, триггеров и правильной работы клиента, можно добиться приемлемого уровня. 4. Единый механизм получения константного значения. 5. Возможность быстрой реализации единого механизма хранения истории изменения справочного значения (даже константы иногда меняются). Но само-собой за это приходится чем-то платить. Чем именно Вы хорошо описали в посте. Единственное, что можно получить из варианта хранения данных в разных таблицах - полный контроль целостности средствами БД. Больше я пока ничего не вижу - вот и прошу, чтобы в форуме знающие люди "открыли мне глаза" на явные преимущества одного метода над другим. P.S. Естественно можно сделать контроллы или классы, но это тема уже другого раздела форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 16:37 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков Максимв мое случае мы получаем: ... 2. Единый интерфейс для их ведения. ...для кучи справочных таблиц сделать единый интерфейс для их ведения и изменения нисколько не сложнее, чем для одной таблицы-помойки, а в чём-то, возможно, и проще, и если ещё принять во внимание, насколько упростится поддержание ссылочной целостности ( ни чеки, ни триггеры просто не понадобятся ), то - проще значительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 16:44 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков Максимalexeyvg, Констрейны в таком случае по крайней мене не позволят удалить значение из справочника, если на него есть где-то ссылка. Насчет времени, я просто сторонник универсальности - в мое случае мы получаем: 1. в какой-то мере универсальную структуру для хранения константных справочных значений.Я вот про это и говорил - вы просто сторонник такого подхода, он вам просто нравится. Универсальная структура сама по себе не может быть целью трудозатрат. Нужно уметь отвечать на вопросы - что это даст бизнесу, что отнимет. Даст - ускорение разработки, уменьшение требуемой квалификации и количества разработчиков (по вашим словам, я в это не верю) Отнимет - уже говорили: проблемы с целостностью данных, дополнительные трудозатраты на разбор модели (когда уволитесь не только вы, но и все люди, которые о вас слышали, разбираться с такой моделью будет сложнее) Вот и доказывайте, что плюсов будет больше. Здесь, на форуме, и коллеги у вас на работе с этим не согласны :-) Гришков МаксимЕдинственное, что можно получить из варианта хранения данных в разных таблицах - полный контроль целостности средствами БД. Больше я пока ничего не вижу - вот и прошу, чтобы в форуме знающие люди "открыли мне глаза" на явные преимущества одного метода над другим.Да, только это. Других преимуществ не будет, это единственное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 17:04 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
alexeyvgГришков МаксимЕдинственное, что можно получить из варианта хранения данных в разных таблицах - полный контроль целостности средствами БД. Больше я пока ничего не вижу Да, только это. Других преимуществ не будет, это единственное. Это единственное преимущество валится следующими вариантами реализации: Держим все значения в одной табличке. При использовании значения справочника, например, в поле "статус документа" таблицы "документы" делается внешний ключ по полю "статус" на общую таблицу справочник. Проблема только одна: в поле "статус" могут попасть ид. из других справочников. варианты решения: а) идентификаторы разных "справочникам" выдёются из разных диапазонов. На поле "статус" вешается check-constraint с условием попадания ид. в диапазон. б) в таблице справочнике заводится доп.поле: "вид справочника". "вид справочника" и "идентификатор значения" - альтернативный ключ или первичный ключ таблицы. Вместо поля "статус" "документы" заводим два поля "вид справочника для статуса" и "ид статуса". Вешаем внешний ключ по двум полям на общий справочник. Вешаем чек-констрейнт на поле "вид справочника для статуса" = <константа>. Итог: "полный контроль целостности средствами БД". Вопрос: "А этого ли мы хотели?" Что я всем этим хотел сказать. Обсуждение - это хорошо. Запишите себе варианты решения. Зафиксируйте все плюсы и минусы. Оцените важность каждого из - и тогда принимайте решения... Спорить, не видя картины в целом, и по отдельности по каждому из вариантов - можно до опупения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 17:29 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
ТС, самый яркий пример для сравнения: а) единая таблица для справочников - реестр Windows. б) использование разных таблиц для справочников: использование ini-файлов, разбросаных по папкам приложений. У каждого есть свои плюсы и минусы, но с использованием реляционных возможностей БД использование шаблона "реестр Виндовс" (с) :) имеет значительно меньшие минусы, чем сам реальная реализация реестра в Винде... Особенности: 1. единый интерфейс пользователя 2. единое место хранения 3. единый интерфейс обмена/изменения данных: Select,update,delete Само слово "единая" (особенно в России :)) не явдяется плюсом, но вы легко сформулируете, оцените и сравните с вариантом "разные таблицы": "затраты на проектирование справочника", "затраты на модификацию БД для схемы справочника", "затраты на разработку польз.интерфейса для просмотра списка записей справочника, детальной информации по записи справочника и модификации значений справочника", "затраты на перенос изменений в продуктив". "-": 1) в сопровождении: ошибочный update без where - портит всю справочную систему. Но это же не повод все однотипные документы делить в таблицы по месяцам, чтобы случайно не проапдейтить все... 2) в хранении данных: целостность, сравнимая с вариантом "разные таблицы" требует чуть больших затрат на проектирование, чем просто "не даст удалить значение", но не более того... Вплоть до автоматической генерации и выполнения нужных DDL команд на БД при формировании нового справочника пользователем непосредственно в интерфейсе Ввшей программы :). Это можно сделать и для варианты "разные таблицы", но для разных таблиц эта реализация сложнее в разработке, а в зависимости от БД - ещё и в применении на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 17:53 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Гришков Максим.... я просто сторонник универсальности...ну дак делайте в EAV :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 18:18 |
|
||
|
Какой вариант модели БД лучше
|
|||
|---|---|---|---|
|
#18+
Шайтан, Частично и EAV можно использовать, но зачем углубляться в крайности. Вопрос-то немного в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2011, 18:25 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1542160]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
9ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 472ms |

| 0 / 0 |
