|
|
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Доброго всем дня! К сожалению, свой вопрос первоначально задал в не подходящем форуме: http://sql.ru/forum/actualthread.aspx?tid=397676 Хотел бы услышать рекомендации. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 17:31 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Справочники? в одну, деревянную: (id, parentid, name, orderOf) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 18:29 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
TykeДоброго всем дня! Хотел бы услышать рекомендации. Спасибо Голосую за вариант с одной таблицей (ну и вторая -- типа справочник справочников). В противном случае получаете разбухающую структуру БД, постепенно забываете что в каком справочнике хранится и т.п. Причем все эти десятки справочников наверняка надо вести каким-то прикладом, придумывать механизм унификации этого процесса и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 18:39 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
вопрос на засыпку: целосность блюсти бум? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 19:03 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
4321вопрос на засыпку: целосность блюсти бум? Справочник справочников SprId SprName Справочник элементов SprId ItemId ItemName Дочки … SprId ItemId ….. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 20:41 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Хотя вариант "много справочников" может иметь преимущество с точки зрения блокировок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 20:44 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
4321вопрос на засыпку: целосность блюсти бум? В общем конечно хотелось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 23:52 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Tyo Голосую за вариант с одной таблицей (ну и вторая -- типа справочник справочников). Вот и я остановился на таком варианте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 23:54 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Не ограничивайте себя каким-то одним подходом. В одной большой системе вполне найдется место и объединенным справочникам, когда это уместно, и разложенным по отдельным таблицам. Думать, объединять ли новый справочник с конгломератом, надо каждый раз заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 01:00 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Tyke 4321вопрос на засыпку: целосность блюсти бум? В общем конечно хотелось бы. Если хочется блюсти целостность, то надо каждый справочник в отдельную таблицу. Иначе в поле со ссылкой на этот справочник можно будет запихать значение ключа из любого другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 09:53 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Если хочется блюсти целостность, то надо каждый справочник в отдельную таблицу. Иначе в поле со ссылкой на этот справочник можно будет запихать значение ключа из любого другого. Вот! Поэтому я и подумал, что следующий вариант удовлетворяет всем требованиям (могу ошибаться): Таблица справочник Recource, со следующими полями: id, idResourceDescriptor, name; Таблица справочник ResourceDescriptor, co следующими полями: id, name; Дальше идут view, например: viewTimeTable [select * from Resource where idResourceDescriptor = 1], где 1 - соответсвует TimeTable из ResourceDecriptor Тогда другие таблицы ссылаются на viewTimeTable.id, т.е. и целосность соблюдена и справочник один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 14:37 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Tyke Bogdanov Andrey Если хочется блюсти целостность, то надо каждый справочник в отдельную таблицу. Иначе в поле со ссылкой на этот справочник можно будет запихать значение ключа из любого другого. Вот! Поэтому я и подумал, что следующий вариант удовлетворяет всем требованиям (могу ошибаться): Таблица справочник Recource, со следующими полями: id, idResourceDescriptor, name; Таблица справочник ResourceDescriptor, co следующими полями: id, name; Дальше идут view, например: viewTimeTable [select * from Resource where idResourceDescriptor = 1], где 1 - соответсвует TimeTable из ResourceDecriptor Тогда другие таблицы ссылаются на viewTimeTable .id, т.е. и целосность соблюдена и справочник один.Oracle позволяет создавать FOREIGN KEY только на таблицы, не на VIEW. Как с этим обстоит дело в других СУБД я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 17:50 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
SQL*PlusOracle позволяет создавать FOREIGN KEY только на таблицы, не на VIEW. Как с этим обстоит дело в других СУБД я не знаю. Именно поэтому и спрашивал сначала в разделе Postgres, отуда сюда отправили :) . Хотя скорее всего postgres тоже не даст создать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2007, 13:45 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
TykeХотя скорее всего postgres тоже не даст создать. Сомневаюсь, что хоть одна БД даст создать. Внешний ключ на вьюху - вещь довольно странная логически и непросто реализуемая физически. Что с моей личной точки зрения не помешало бы РСУБД, так это фича примерно следующего вида: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 10:53 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
TykeИменно поэтому и спрашивал сначала в разделе Postgres, отуда сюда отправили :) . Хотя скорее всего postgres тоже не даст создать.Именно для Postgres вы можете воспользоваться наследованием, когда все записи наследуемых таблиц просматриваются как записи предка, при этом ключи определяются непосредственно к наследникам. Но насколько это удобно - судить Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 11:33 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
В общем то по этому поводу много копий сломано,отчасти из за этой статьи,но мы например,используем все равно много таблицы на каждый справочник (целостность,скорость поиска в запросах и все такое).интерфейс одинаков для всех.в форму справочника подается имя таблицы и названия столбцов на русском и английском (потом может сделаем автополучение из словаря системы).далее все делается само. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 12:41 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
softwarerЧто с моей личной точки зрения не помешало бы РСУБД, так это фича примерно следующего вида: Код: plaintext 1. 2. +1 даже Код: plaintext А пока целостность можно обеспечить храня в данных (data.dict_record_type ) то, чему место в словаре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 12:55 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Мы выбрали вариант для каждого справочника отдельную таблицу. На на мой взгляд это проще и гибче. Так же как и при слиянии в одну таблицу, в разных таблицах можно описать, что содержиться в конкретном справочнике, соответственно не забудется. Кол-во таблиц вырастает, но на понятность схемы БД, на мой же взгляд, это не влияет. Таблицы справочники всегда со схемы можно убрать. При применении одной таблицы для этих нужно, схема становится запутанней. Опять же это мое мнение. Кроме того, если сливать справочники в одну таблицу, тогда, могут появиться несколько разных видов справочников. Соответственно, одинаковые справочники хранятся в одной таблице, если структура справочника отличатеся от структуры этой таблицы, в других таблицах. Т.е. в системе начинают применяться разнородные правила, что, на мой взгляд, усложняет дальнейшу поддержку-развитие. Если в дальнейшем к справочнику понадобиться добавить поле (изменить тип поля), придется выносить справочник за пределы одной таблицы, с перемастыриванием связей, структуры БД и приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 14:03 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЕсли хочется блюсти целостность, то надо каждый справочник в отдельную таблицу. Иначе в поле со ссылкой на этот справочник можно будет запихать значение ключа из любого другого.Совсем необязательно. Пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:10 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
[quot ChA] DictTypeID tinyint CHECK (DictTypeID IN (1, 3, 10)) [quot] Получается, что тут в чек логика закладывается, которую потом бывает весьма трудно понять, особенно если это не документировано и разработчик ушел на другую работу. Впрочем если документированно, то тоже. Система получается с весьма жестскими параметрами. Если понадобиться DictTypeID = 4 или 8 например, нужно будет лазить в свойства поля таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:32 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Michael Vasilev ChA DictTypeID tinyint CHECK (DictTypeID IN (1, 3, 10)) Получается, что тут в чек логика закладывается, которую потом бывает весьма трудно понять, особенно если это не документировано и разработчик ушел на другую работу. Впрочем если документированно, то тоже. Система получается с весьма жестскими параметрами.Речь шла только о принципиальной возможности обеспечить целостность стандартными механизмами СУБД, без использования процедурного кода. Такая схема несколько сложнее, чем традиционный подход, но вполне имеет право на жизнь. Michael VasilevЕсли понадобиться DictTypeID = 4 или 8 например, нужно будет лазить в свойства поля таблицы.А при стандартном подходе придется мудрить, как сделать возможными ссылки из одного поля на разные таблицы. Не уверен, что это будет проще сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:20 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
ChAСовсем необязательно. Ну назвать предложенное - решением у меня язык не поворачивается. Вместо одной колонки на каждую ссылку заводить две? И это в таблицах с данными? Бананами можно гвозди забивать, но никто этого не делает. :) ChAА при стандартном подходе придется мудрить, как сделать возможными ссылки из одного поля на разные таблицы. Не уверен, что это будет проще сделать. Честно скажу, не понимаю что значит ссылки из одного поля на разные таблицы. Для чего это такой зверь понадобился? Есть у нас справочники валют, стран и марок автомобилей и нам одно поле нужно которое ссылается на один из справочников? Это верх извращенности в дизайне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:30 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyНу назвать предложенное - решением у меня язык не поворачивается. Вместо одной колонки на каждую ссылку заводить две? И это в таблицах с данными?1. Вам "шашечки" или ехать ? Упомянутую Вами проблему эта схема решает ? 2. Да хоть десять, в чем проблема ? 3. А почему нет ? Вы про составные ключи не слышали ? А про миграцию ключей ? Bogdanov AndreyЧестно скажу, не понимаю что значит ссылки из одного поля на разные таблицы. Для чего это такой зверь понадобился? Есть у нас справочники валют, стран и марок автомобилей и нам одно поле нужно которое ссылается на один из справочников?Рад за Вас, что не приходилось с подобным встречаться. А теперь представьте, что документ может иметь взаимоисключительное отношение либо к сотруднику, либо к отделу, либо к партнеру. Или коды аналитического учета. А с учетом того, что со временем появляются новые сущности ? Если подумать, можно, наверное, еще ситуации вспомнить, но лень. Ваши действия в подобных ситуациях ? Желательно, не очень извращенные... ;) P.S. Предлагается обсуждать без излишних эмоциональных оценок, типа: "язык не поворачивается", "верх извращенности " и т.п. Желательно, внятные аргументы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:05 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
ChAЕсли подумать, можно, наверное, еще ситуации вспомнить, но лень.Можно я? Дать настройщику возможность создавать собственные справочники чего-то там, собственные виды документов про то да се, а также связвывать одно с другим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:15 |
|
||
|
Дизайн: много справочников vs один + много view
|
|||
|---|---|---|---|
|
#18+
ChA1. Вам "шашечки" или ехать ? Упомянутую Вами проблему эта схема решает ? 2. Да хоть десять, в чем проблема ? 3. А почему нет ? Вы про составные ключи не слышали ? А про миграцию ключей ? Сначала искуственно создаем проблему, запихивая справочники в одну таблицу. А потом пытаемся ее решать. Я так понял, что ваша реплика была в защиту дизайна при котором все справочники запихиваются в одну таблицу. Честно скажу, что предлагаемое решение мне категорически не нравится. Мне в общем-то достаточно и эстетических соображений. Но могу привести и другие: например, объем таблицы с данными разбухает вдвое. Не особенно удобно предлагаемое решеие и для разработки приложений, так как заставляет где-то иметь списки констант, представляющих тот или иной справочник. ChA А теперь представьте, что документ может иметь взаимоисключительное отношение либо к сотруднику, либо к отделу, либо к партнеру. Это означает, что документ имеет отношение к некоторой сущности, которая называется скажем "субъект". А уж сотрудник, отдел или партнер - подтипы данной сущности. Итого мы имеем один справочник под названием "Субъекты" и три дочерних справочника. Но при этом никаких DictType в таблице данных у нас не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34338534&tid=1544724]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
167ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 485ms |

| 0 / 0 |
