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

Есть таблички tblContact, tblAccount, tblCompany хранящие разные сущности.
Есть пожелание клиентов: чтоб пользователи в программе могли сами создавать/удалять/изменять дополнительные поля в этих сущностях.

Например:
У контакта есть First Name, Last Name и E-mail.
Эти данные храняться в tblContact в соответствующих колонках (FirstName, LastName и Email).
Теперь пользователь программы решает, что ему необходимо новое поле Email2.
Пользователь должен иметь возможность из программы добавить новое поле Email2, задать его тип и после этого сущность "контакт" должна обладать этим полем.

Надеюсь, что понятно объяснил.

Как грамотно спроектировать БД в этом случае?

Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.
Я не уверен, что это самое лучшее решение.

Кто-то сталкивался с таким?
Куда копать? :)

Спасибо.
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36766667
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант...

КонтактКодСтандартный набор полей
СущностьКодНазваниеТип
Добавочные поляКод контактаКод сущностиЗначение *
* сильно зависит от СУБД. Т.к. есть "сильно" типизированные. Тогда придется создавать столько полей - сколько и типов... Либо под каждый тип делать табличку со ссылкой в табличку "Добавочные поля"...
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36766743
Lin7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

спасибо за идею.

БД: MS SQL 2000


В программе часто сущности показываются в табличном виде:

First Name Last Name Email Email2


мне кажется присоединить user-fields будет не просто - надо будет переворачивать табличку, если я правильно понял.


Ещё варианты?
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36767050
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lin7мне кажется присоединить user-fields будет не просто - надо будет переворачивать табличку, если я правильно понял.
Все может запросто решиться хранимой процедурой. Даёшь ей имя/идентификатор пользовательского поля - далее "дело техники".
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36767306
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lin7
Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.

krvsa
Как вариант...


Работал с системами спроектированными как по первому, так и по второму варианту. И почти во всех случаях "простое решение" выглядело предпочтительнее.
И работать с такими полями удобнее и производительность страдает в меньшей степени. Правда и реализовать такой вариант с достаточной степенью аккуратности сложнее.
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36767428
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lin7Hi,

Есть таблички tblContact, tblAccount, tblCompany хранящие разные сущности.
Есть пожелание клиентов: чтоб пользователи в программе могли сами создавать/удалять/изменять дополнительные поля в этих сущностях.Если клиент Вам дорог, то можете сделать XML-столбец. Если клиент Вам ОЧЕНЬ дорог, то переубедите его не делать оплошности.
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36767833
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lin7Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.Это самое правильное решение.

Не нужно при проектировании сразу ислючать простые решения по причине их простоты :-)
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36768425
Lin7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov Andrey
Работал с системами спроектированными как по первому, так и по второму варианту. И почти во всех случаях "простое решение" выглядело предпочтительнее.
И работать с такими полями удобнее и производительность страдает в меньшей степени. Правда и реализовать такой вариант с достаточной степенью аккуратности сложнее.

Первая проблема - все пользователи программы работаю с ограниченными правами на БД. Права создавать колонки у них нет. Но это скорее административная проблема ПМа - договориться об этом с клиентом.... Забыли-забили на это. :)

Производительность в запросах будет поболее...
Правда иногда в запросах придётся писать * вместо списка колонок..
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36768444
Lin7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LЕсли клиент Вам дорог, то можете сделать XML-столбец. Если клиент Вам ОЧЕНЬ дорог, то переубедите его не делать оплошности.

XML столбец не подходит - невозможно будет создавать динамические запросы по этим полям.

Клиент очень дорог и принцип "клиент всегда прав" (особенно если он платит) очень распространён особенно за бугром.
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36768666
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lin7Первая проблема - все пользователи программы работаю с ограниченными правами на БД. Права создавать колонки у них нет. Но это скорее административная проблема ПМа - договориться об этом с клиентомА ПМ-то тут причем? Естественно, должна быть построена такая модель системы доступа, чтобы пользователь, который по должен иметь возможность добавлять поля смог это сделать. Как именно (специальными привилегиями, хранимками и т.п.) - вопрос к проектировщику и разработчику, но уж точно не к ПМ.
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36798907
karambol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то типа такого не подойдет?
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36798946
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgLin7Самое простое решение - добавлять колонки в таблицы tblContact, tblAccount, tblCompany.Это самое правильное решение.

Не нужно при проектировании сразу ислючать простые решения по причине их простоты :-)А как биться с ошибками пользователей "ой, я там шо то жмакнула и столбец пропал"? А протоколирование такой системы вряд будет простым.

karambol,

Так будет проще:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table Attribute(
	AttrID int identity,
	AttrType int not null, -- код типа
	[Name] varchar( 127 ) not null,
	[Description] varchar( 8000 ) null
);

create table Data(
	DataID int identity,
	-----------------------------
	-- фиксированные атрибуты  --
);

create table AuxData(
	ID int identity,
	DataID int not null,
	AttrID int not null,
	[Value] varchar( 1024 ) not null -- все значения атрибутов выражаются строкой
);
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36801248
anjey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как правильно спроектировать БД с пользовательскими полями?
    #36801384
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LТак будет проще:
...
[Value] varchar(1024) not null -- все значения атрибутов выражаются строкой
...

Хе, а теперь реализуйте для этой фигни ссылочное ограничение (чтобы атрибут XXX брался только из таблицы AAA) и, например, уникальное (чтобы атрибут YYY не повторялся).
А потом запихните во всю эту хрень 10 миллинов обънектов (по полсотни атрибутов у каждого) и найдите объект у которого атрибут XXX равен 10, а ZZZ - 5.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно спроектировать БД с пользовательскими полями?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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