|
|
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
Доброе утро. Есть человек с данными(email, пароль, дата_регистрации и прочее) Человек может заниматься какой либо деятельностью(д-ть 1, д-ть 2, д-ть 3), может совмещать, т.е. многие ко многим. Т.е. максимум 3 д-ти одновременно. У каждой деятельности своя дополнительная информация. У д-ти 1 какая-то своя инфа с типами дата, текст, число(воообщем разные) У д-ти 2 тоже какая-то инфа и т.д. Я понял что будет таблица "Люди(id, email, pass)", будет таблица "Деятельности(id, name)" и будет таблица связка(user_id, дет_id, значение свойства д-ти). Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно. Как дальше спроектировать не понимаю. Как вообще в идеале сделать, чтоб не было избыточности и null'ов ? Не понимаю. Спасибо большое. Надеюсь на вашу помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 10:48 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
petr.snowДоброе утро. Есть человек с данными(email, пароль, дата_регистрации и прочее) Человек может заниматься какой либо деятельностью(д-ть 1, д-ть 2, д-ть 3), может совмещать, т.е. многие ко многим. Т.е. максимум 3 д-ти одновременно. У каждой деятельности своя дополнительная информация. У д-ти 1 какая-то своя инфа с типами дата, текст, число(воообщем разные) У д-ти 2 тоже какая-то инфа и т.д. Я понял что будет таблица "Люди(id, email, pass)", будет таблица "Деятельности(id, name)" и будет таблица связка(user_id, дет_id, значение свойства д-ти). Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно. Как дальше спроектировать не понимаю. Как вообще в идеале сделать, чтоб не было избыточности и null'ов ? Не понимаю. Спасибо большое. Надеюсь на вашу помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 12:46 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
petr.snow Но возникает проблема, поле "значение свойства д-ти" должно быть одного типа. Так же поле, которое есть у одной деятельности, может присвоится к другой где по идее быть не должно. Это непонятно, что Вы имеете ввиду "одного типа"? А второе предложение вообще никак (( petr.snow Как вообще в идеале сделать, чтоб не было избыточности и null'ов ? Чтобы не было nulloв? Так у Вас из и не будет, если все сущности связаны. Или я Вас неправильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 13:33 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
Foxter, одного типа имеется ввиду. поле только строка. но может быть и дата и текст и прочее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 16:57 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
ТС, Можно для каждой деятельности создать отдельную таблицу свойств. Если ограничение 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 деятельности критично, то в таблицу люди добавить поля деятельностт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 19:09 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
Последние 2 строки в предыдущем посте надо зачеркнуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 19:10 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
Вариант EAV: Люди(id человека, email, pass,...) Виды деятельности(id вида, name,...) Свойства_Деятельности(id свойства, id вида, name, datatype,...) - здесь datatype -тип данных св-ва (число, дата, строка...) Деятельности (id человека, id свойства, id вида, значение свойства) Поле "значение свойства" будет типа sql_variant. Код: sql 1. 2. или надо делать несколько таблиц значений, одну для чисел, другую для дат, третью для строк. Почитайте про EAV в вики http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2012, 10:02 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
>> Свойства_Деятельности(id свойства, id вида, name, datatype,...) - здесь datatype -тип данных св-ва (число, дата, строка...) А Вам не кажется, что свойства деятельности должны принадлежать самой деятельности? То есть поля ее характеризующие должны быть выражены в записи деятельности. А наименования полей должны характеризовать сами свойства. То бишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2012, 10:25 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
|id|Наименование деятельности|Свойство1|...|СвойствоN| ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2012, 10:27 |
|
||
|
Не могу спроектировать базу(люди-деятельности-свойства)
|
|||
|---|---|---|---|
|
#18+
Foxter, Код: sql 1. 2. 3. Виды деятельности(...) - это справочник типов сущностей (Entity) Свойства деятельности(...) - это справочник атрибутов (Atribute), здесь еще вид атрибута привязан к виду деятельности, т.е. задает набор атрибутов каждого вида деятельности. Деятельности(...) - это таблица значений (Value) Вообше-то, при реализации EAV возможны варианты. Мне нравится такой вариант. Ваш вариант Код: sql 1. EAV не является. Он требует отдельную таблицу значений на каждый вид деятельности. Или Вы хотите в одной таблице значений хранить записи разной структуры? Все свойства деятельности в одной строке через разделитель? Тоже вариант, хотя null-ы в нем будут присутствовать (хотя бы как строка нулевой длины). Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2012, 10:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38067893&tid=1541441]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
139ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 461ms |

| 0 / 0 |
