|
|
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Hi, Есть таблички tblContact, tblAccount, tblCompany хранящие разные сущности. Есть пожелание клиентов: чтоб пользователи в программе могли сами создавать/удалять/изменять дополнительные поля в этих сущностях. Например: У контакта есть First Name, Last Name и E-mail. Эти данные храняться в tblContact в соответствующих колонках (FirstName, LastName и Email). Теперь пользователь программы решает, что ему необходимо новое поле Email2. Пользователь должен иметь возможность из программы добавить новое поле Email2, задать его тип и после этого сущность "контакт" должна обладать этим полем. Надеюсь, что понятно объяснил. Как грамотно спроектировать БД в этом случае? Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany. Я не уверен, что это самое лучшее решение. Кто-то сталкивался с таким? Куда копать? :) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 16:20 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Как вариант... КонтактКодСтандартный набор полей СущностьКодНазваниеТип Добавочные поляКод контактаКод сущностиЗначение * * сильно зависит от СУБД. Т.к. есть "сильно" типизированные. Тогда придется создавать столько полей - сколько и типов... Либо под каждый тип делать табличку со ссылкой в табличку "Добавочные поля"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 16:29 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
krvsa, спасибо за идею. БД: MS SQL 2000 В программе часто сущности показываются в табличном виде: First Name Last Name Email Email2 мне кажется присоединить user-fields будет не просто - надо будет переворачивать табличку, если я правильно понял. Ещё варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 16:49 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7мне кажется присоединить user-fields будет не просто - надо будет переворачивать табличку, если я правильно понял. Все может запросто решиться хранимой процедурой. Даёшь ей имя/идентификатор пользовательского поля - далее "дело техники". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 18:33 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7 Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany. krvsa Как вариант... Работал с системами спроектированными как по первому, так и по второму варианту. И почти во всех случаях "простое решение" выглядело предпочтительнее. И работать с такими полями удобнее и производительность страдает в меньшей степени. Правда и реализовать такой вариант с достаточной степенью аккуратности сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 21:36 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7Hi, Есть таблички tblContact, tblAccount, tblCompany хранящие разные сущности. Есть пожелание клиентов: чтоб пользователи в программе могли сами создавать/удалять/изменять дополнительные поля в этих сущностях.Если клиент Вам дорог, то можете сделать XML-столбец. Если клиент Вам ОЧЕНЬ дорог, то переубедите его не делать оплошности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 23:38 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.Это самое правильное решение. Не нужно при проектировании сразу ислючать простые решения по причине их простоты :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 10:36 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Работал с системами спроектированными как по первому, так и по второму варианту. И почти во всех случаях "простое решение" выглядело предпочтительнее. И работать с такими полями удобнее и производительность страдает в меньшей степени. Правда и реализовать такой вариант с достаточной степенью аккуратности сложнее. Первая проблема - все пользователи программы работаю с ограниченными правами на БД. Права создавать колонки у них нет. Но это скорее административная проблема ПМа - договориться об этом с клиентом.... Забыли-забили на это. :) Производительность в запросах будет поболее... Правда иногда в запросах придётся писать * вместо списка колонок.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 13:36 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Senya_LЕсли клиент Вам дорог, то можете сделать XML-столбец. Если клиент Вам ОЧЕНЬ дорог, то переубедите его не делать оплошности. XML столбец не подходит - невозможно будет создавать динамические запросы по этим полям. Клиент очень дорог и принцип "клиент всегда прав" (особенно если он платит) очень распространён особенно за бугром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 13:39 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7Первая проблема - все пользователи программы работаю с ограниченными правами на БД. Права создавать колонки у них нет. Но это скорее административная проблема ПМа - договориться об этом с клиентомА ПМ-то тут причем? Естественно, должна быть построена такая модель системы доступа, чтобы пользователь, который по должен иметь возможность добавлять поля смог это сделать. Как именно (специальными привилегиями, хранимками и т.п.) - вопрос к проектировщику и разработчику, но уж точно не к ПМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 14:52 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Что-то типа такого не подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2010, 21:51 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
alexeyvgLin7Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.Это самое правильное решение. Не нужно при проектировании сразу ислючать простые решения по причине их простоты :-)А как биться с ошибками пользователей "ой, я там шо то жмакнула и столбец пропал"? А протоколирование такой системы вряд будет простым. karambol, Так будет проще: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2010, 22:32 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Lin7Hi, Есть таблички tblContact, tblAccount, tblCompany хранящие разные сущности. Есть пожелание клиентов: чтоб пользователи в программе могли сами создавать/удалять/изменять дополнительные поля в этих сущностях. Например: У контакта есть First Name, Last Name и E-mail. Эти данные храняться в tblContact в соответствующих колонках (FirstName, LastName и Email). Теперь пользователь программы решает, что ему необходимо новое поле Email2. Пользователь должен иметь возможность из программы добавить новое поле Email2, задать его тип и после этого сущность "контакт" должна обладать этим полем. Надеюсь, что понятно объяснил. Как грамотно спроектировать БД в этом случае? Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany. Я не уверен, что это самое лучшее решение. Кто-то сталкивался с таким? Куда копать? :) Спасибо. http://en.wikipedia.org/wiki/Entity-attribute-value_model ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 19:33 |
|
||
|
Как правильно спроектировать БД с пользовательскими полями?
|
|||
|---|---|---|---|
|
#18+
Senya_LТак будет проще: ... [Value] varchar(1024) not null -- все значения атрибутов выражаются строкой ... Хе, а теперь реализуйте для этой фигни ссылочное ограничение (чтобы атрибут XXX брался только из таблицы AAA) и, например, уникальное (чтобы атрибут YYY не повторялся). А потом запихните во всю эту хрень 10 миллинов обънектов (по полсотни атрибутов у каждого) и найдите объект у которого атрибут XXX равен 10, а ZZZ - 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 22:05 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1542580]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 515ms |

| 0 / 0 |
