Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Не могу спроектировать базу(люди-деятельности-свойства) / 10 сообщений из 10, страница 1 из 1
06.12.2012, 10:48
    #38067453
petr.snow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
Доброе утро.

Есть человек с данными(email, пароль, дата_регистрации и прочее)

Человек может заниматься какой либо деятельностью(д-ть 1, д-ть 2, д-ть 3), может совмещать, т.е. многие ко многим. Т.е. максимум 3 д-ти одновременно.
У каждой деятельности своя дополнительная информация.

У д-ти 1 какая-то своя инфа с типами дата, текст, число(воообщем разные)

У д-ти 2 тоже какая-то инфа и т.д.

Я понял что будет таблица "Люди(id, email, pass)", будет таблица "Деятельности(id, name)" и будет таблица связка(user_id, дет_id, значение свойства д-ти).
Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно.

Как дальше спроектировать не понимаю.
Как вообще в идеале сделать, чтоб не было избыточности и null'ов ? Не понимаю.
Спасибо большое. Надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
06.12.2012, 12:46
    #38067767
Не могу спроектировать базу(люди-деятельности-свойства)
petr.snowДоброе утро.

Есть человек с данными(email, пароль, дата_регистрации и прочее)

Человек может заниматься какой либо деятельностью(д-ть 1, д-ть 2, д-ть 3), может совмещать, т.е. многие ко многим. Т.е. максимум 3 д-ти одновременно.
У каждой деятельности своя дополнительная информация.

У д-ти 1 какая-то своя инфа с типами дата, текст, число(воообщем разные)

У д-ти 2 тоже какая-то инфа и т.д.

Я понял что будет таблица "Люди(id, email, pass)", будет таблица "Деятельности(id, name)" и будет таблица связка(user_id, дет_id, значение свойства д-ти).
Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно.

Как дальше спроектировать не понимаю.
Как вообще в идеале сделать, чтоб не было избыточности и null'ов ? Не понимаю.
Спасибо большое. Надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
06.12.2012, 13:33
    #38067893
Foxter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
petr.snow Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно.

Это непонятно, что Вы имеете ввиду "одного типа"? А второе предложение вообще никак ((

petr.snow Как вообще в идеале сделать, чтоб не было избыточности и null'ов ?

Чтобы не было nulloв? Так у Вас из и не будет, если все сущности связаны. Или я Вас неправильно понял?
...
Рейтинг: 0 / 0
06.12.2012, 16:57
    #38068330
petr.snow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
Foxter,

одного типа имеется ввиду. поле только строка. но может быть и дата и текст и прочее.
...
Рейтинг: 0 / 0
06.12.2012, 19:09
    #38068592
moscowboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
ТС,
Можно для каждой деятельности создать отдельную таблицу свойств.
Если ограничение 3 деятельности на чела критично, то можно так

Схема получится например такая.

Люди(
id,
email,
pass,
свойства_деятельности_1_id references свойства_деятельности(id),
свойства_деятельности_2_id references свойства_деятельности(id),
свойства_деятельности_3_id references свойства_деятельности(id)
)

Деятельности(id, name)

Свойства_Деятельности
(
id varchar2(200),
дет_id,
Значения общих свойств всех деятельностей,
constraint check (id like дет_id || '%')
)


Свойства-Аналитики
(
свойства_деятельности_id references свойства_деятельности(id),
значения свойств аналитики,
constraint check свойства_деятельности_id like 'Аналитика%'
)

Свойства-Разработки
(
свойства_деятельности_id references свойства_деятельности(id),
значения свойств разработки,
constraint check свойства_деятельности_id like 'Разработка%'
)

Свойства-Тестирования
(
свойства_деятельности_id references свойства_деятельности(id),
значения свойств тестирования,
constraint check свойства_деятельности_id like 'Тестирование%'
)


Небольшая избыточность правда есть, зато ссылочная целостность поддерживается без триггеров.




Если ограничение 3 деятельности критично, то в таблицу
люди добавить поля деятельностт
...
Рейтинг: 0 / 0
06.12.2012, 19:10
    #38068595
moscowboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
Последние 2 строки в предыдущем посте надо зачеркнуть
...
Рейтинг: 0 / 0
07.12.2012, 10:02
    #38069044
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
Вариант EAV:


Люди(id человека, email, pass,...)

Виды деятельности(id вида, name,...)

Свойства_Деятельности(id свойства, id вида, name, datatype,...) - здесь datatype -тип данных св-ва (число, дата, строка...)

Деятельности (id человека, id свойства, id вида, значение свойства)

Поле "значение свойства" будет типа sql_variant.
Код: sql
1.
2.
sql_variant
A data type that stores values of various SQL Server-supported data types, except text, ntext, image, timestamp, and sql_variant. 


или надо делать несколько таблиц значений, одну для чисел, другую для дат, третью для строк.
Почитайте про EAV в вики
http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
...
Рейтинг: 0 / 0
07.12.2012, 10:25
    #38069069
Foxter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
>> Свойства_Деятельности(id свойства, id вида, name, datatype,...) - здесь datatype -тип данных св-ва (число, дата, строка...)

А Вам не кажется, что свойства деятельности должны принадлежать самой деятельности? То есть поля ее характеризующие должны быть выражены в записи деятельности. А наименования полей должны характеризовать сами свойства. То бишь
...
Рейтинг: 0 / 0
07.12.2012, 10:27
    #38069073
Foxter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
|id|Наименование деятельности|Свойство1|...|СвойствоN|
...
Рейтинг: 0 / 0
10.12.2012, 10:58
    #38072018
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу спроектировать базу(люди-деятельности-свойства)
Foxter,

Код: sql
1.
2.
3.
А Вам не кажется, что свойства деятельности должны принадлежать самой деятельности? 
То есть поля ее характеризующие должны быть выражены в записи деятельности. 
А наименования полей должны характеризовать сами свойства. 



Виды деятельности(...) - это справочник типов сущностей (Entity)
Свойства деятельности(...) - это справочник атрибутов (Atribute), здесь еще вид атрибута привязан к виду деятельности,
т.е. задает набор атрибутов каждого вида деятельности.
Деятельности(...) - это таблица значений (Value)
Вообше-то, при реализации EAV возможны варианты. Мне нравится такой вариант.

Ваш вариант
Код: sql
1.
|id|Наименование деятельности|Свойство1|...|СвойствоN| 


EAV не является.
Он требует отдельную таблицу значений на каждый вид деятельности.
Или Вы хотите в одной таблице значений хранить записи разной структуры? Все свойства деятельности в одной строке через разделитель?
Тоже вариант, хотя null-ы в нем будут присутствовать (хотя бы как строка нулевой длины).
Код: sql
1.
|id|Наименование деятельности|Свойство1|Свойство2|||Свойство5|...|СвойствоN| 
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Не могу спроектировать базу(люди-деятельности-свойства) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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