|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
Добрый день Товарищи! Подскажите пожалуйста, в таком вопросе: Есть допустим такой набор взаимосвязанных сущностей как местоположение: Планета , Континент , Страна .... И к примеру я хочу каждую из этих сущностей иметь возможность "оценивать", т.е. ставить плюсик. Как мне весь набор оценок в базе лучше хранить? Отдельными таблицами Планета_оценки , Континент_оценки , Страна_оценки ... Или имеет смысл в одной широкой таблице хранить всё: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В этой таблице для полей сущностей подразумевается что возможен NULL и в случае указания оценки для какой-то сущности, подразумевается что значит значения её вышестоящих сущностей тоже будут известны, т.е. не NULL. Варианты что условно город сменит страну и в этой таблице надо будет все связи для оценок уровня этого города и ниже сменить countryID - неважны. Подразумевается что иерархия сущностей задана жостко и без изменений подчинённости. Сущности принципиально различны, т.е. реализовать сущности и их иерархию "односвязным списком" невозможно. Каждая сущность в своей таблице и у неё свои задачи в системе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 21:32 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormotли имеет смысл в одной широкой таблице хранить всё: Имеет смысл хранить всё в одной узкой таблице "оценка" с полями "ид оцениваемой сущности" и "оценка". А всё прочее барахло - в другой одной таблице "сущность, поддающаяся оценке". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:03 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
Дмитрий , я не совсем понял вашего предложения. У меня сущности в БД хранятся в разных таблицах. Как например в таблице "оценки" я различу плюсик для планеты с ID=1 и страны с ID=1? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:06 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
Имеет или не имеет смысл это вам решать (зависит от того как вы использовать будете) В одной таблице вполне можно, но писать check уже для четырех полей геморно Код: sql 1. 2. 3. 4.
Вздумаете расширятся на галактику - повеситесь ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:41 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot Дмитрий , я не совсем понял вашего предложения. У меня сущности в БД хранятся в разных таблицах. Как например в таблице "оценки" я различу плюсик для планеты с ID=1 и страны с ID=1? По дискриминатору ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 23:08 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormotУ меня сущности в БД хранятся в разных таблицах. А зачем Вы разнесли одну сущность на четыре таблицы? ССЗБ-мазохист?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 23:18 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
SERG1257В одной таблице вполне можно, но писать check уже для четырех полей геморно Такой проверки не предполагается, только AND варианты. Т.е. например найти только оценки для такой-то планеты. skyANAПо дискриминатору А дискриминатор, это что такое? Dimitry SibiryakovА зачем Вы разнесли одну сущность на четыре таблицы? ССЗБ-мазохист?.. Дмитрий, разные тут сущности. Если вы о том что эти конкретно (местоположения) это одна сущность не нуждающаяся в оформлении разными таблицами, то это я просто привёл пример на них. Сущности принципиально разные, но между собой связанные. И оценки можно ставить к каждой сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 05:33 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
skyANAПо дискриминатору Почитал что такое дискриминатор, т.е. это у каждой записью с оценкой ещё есть поле "ТипСущности" к которой эта оценка и соотв-но чей id указан. Я об этом варианте думал (просто не знал что это дискриминатор), но подумал что это некорректно. Опять же из антипаттернов указание на то, что "не надо делать в БД связь ключа с таблицей определяемой значением какого-то из полей". Это в данном случае не играет важной роли? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 06:31 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot, Мы делаем что-то подобное. Но...Из таблицы надо убрать id-шники сущностей, оставить один. И добавить признак, отвечающий за сущность. Тогда добавление ещё сущности гораздо проще. Но есть минусы. Целостность, нормализация и что там ещё... Либо сущности хранить в одной таблице. Есть ещё вариант. Сделать маленькую основную таблицу с тремя полями (как фундамент): id, priznak, id2. Её связать со всеми другими. Например, при признаке=1 связь с таблицей описания планеты, 2 - континент..., 8 - с таблицей оценки (для планеты), 9 - с таблицей оценки (для континента). Но тут надо где-то хранить ссылку на описание сущности. Можно с таблице оценок. И проблемы с FK не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 10:29 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
KreatorXXIМы делаем что-то подобное. Но...Из таблицы надо убрать id-шники сущностей, оставить один. И добавить признак, отвечающий за сущность. Тогда добавление ещё сущности гораздо проще. Но есть минусы. Целостность, нормализация и что там ещё... Либо сущности хранить в одной таблице. Есть ещё вариант. Сделать маленькую основную таблицу с тремя полями (как фундамент): id, priznak, id2. Её связать со всеми другими. Например, при признаке=1 связь с таблицей описания планеты, 2 - континент..., 8 - с таблицей оценки (для планеты), 9 - с таблицей оценки (для континента). Но тут надо где-то хранить ссылку на описание сущности. Можно с таблице оценок. И проблемы с FK не будет. Ну вот первый ваш вариант, это как раз я так понимаю от SkyANA предложение с дискриминатором. А второй вариант, это вроде бы тот же самый что и первый, или я не понял? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 11:11 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot, Второй - это третий? Если считать вторым предложение хранить сущности в одной таблице. В первом варианте проблемы с целостностью на уровне сервера. Т.е. FK отсутствуют как класс. А в третьем можно построить правильную схему на уровне сервера. Но тут реализация сложно-непрозрачная. А чем сложнее система, тем хуже. Что мешает сущности загнать в одну таблицу? Поля слишком разные? Память оперативную/неоперативную экономите? Может банально дерево сущностей не можете построить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:02 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot, Второй - это третий? Если считать вторым предложение хранить сущности в одной таблице. В первом варианте проблемы с целостностью на уровне сервера. Т.е. FK отсутствуют как класс. А в третьем можно построить правильную схему на уровне сервера. Но тут реализация сложно-непрозрачная. А чем сложнее система, тем хуже. Что мешает сущности загнать в одну таблицу? Поля слишком разные? Память оперативную/неоперативную экономите? Может банально дерево сущностей не можете построить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:09 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot, Второй - это третий? Если считать вторым предложение хранить сущности в одной таблице. В первом варианте проблемы с целостностью на уровне сервера. Т.е. FK отсутствуют как класс. А в третьем можно построить правильную схему на уровне сервера. Но тут реализация сложно-непрозрачная. А чем сложнее система, тем хуже. Что мешает сущности загнать в одну таблицу? Поля слишком разные? Память оперативную/неоперативную экономите? Может банально дерево сущностей не можете построить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:10 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
kormot, Второй - это третий? Если считать вторым предложение хранить сущности в одной таблице. В первом варианте проблемы с целостностью на уровне сервера. Т.е. FK отсутствуют как класс. А в третьем можно построить правильную схему на уровне сервера. Но тут реализация сложно-непрозрачная. А чем сложнее система, тем хуже. Что мешает сущности загнать в одну таблицу? Поля слишком разные? Память оперативную/неоперативную экономите? Может банально дерево сущностей не можете построить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:12 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
KreatorXXIВторой - это третий? Да, получается про третий имел в виду. KreatorXXIВ первом варианте проблемы с целостностью на уровне сервера. Т.е. FK отсутствуют как класс. Т.е. я правильно понимаю, что имеется в виду хранение сущностей в таком виде: Код: sql 1. 2. 3. 4. 5. 6.
Это вариант как я понял с дискриминатором, которым является тут entityType А третий вариант как выглядит? Как я его понял, это такой же вариант как №1, только в качестве дискриминатора выступает priznak ? Если нет, то покажите пожалуйста таблицами что имеется в виду? Как связь с таблицей реализуется в зав-ти от priznak ? Я вижу только на основе динамического формирования запроса на уровне приложения. Но это тоже как-то коряво. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:25 |
|
Стоит ли данные одного типа для разных сущностей хранить в одной таблице?
|
|||
---|---|---|---|
#18+
[quot kormot] Т.е. я правильно понимаю, что имеется в виду хранение сущностей в таком виде: Код: sql 1. 2. 3. 4. 5. 6.
Это вариант как я понял с дискриминатором, которым является тут entityType Вот так я понимаю таблицу оценки. А таблиц сущностей при этом несколько. Только EntityType можно типа byte. Повторюсь, целостность на уровне клиента. Второй вариант пропустим пока. Для меня самый предпочтительный. Третий вариант может выглядеть так: MainTable. Поля - id, pid, priz. PlanetTable. Поля - id, pid (FK на id MainTable), name, ... ContinentTable. Поля - id, pid (FK на id MainTable), name, ... и т.д. Таблицы других сущностей добавляются аналогично. EvaluationTable (таблица оценок). Поля - id, pid (FK на id MainTable), value, ... Как заполняются? Допустим, на примере планет. Создаётся запись в MainTable. id=1, pid=null, priz=1. К ней по связи один к одному создаётся запись в PlanetTable. id=1, pid=1 (ссылка на MainTable), name='Земля'. Вторая планета. Создаётся запись в MainTable. id=2, pid=null, priz=1. К ней по связи один к одному создаётся запись в PlanetTable. id=2, pid=2 (ссылка на MainTable), name='Марс'. Создаём оценки к планетам. Создаётся запись в MainTable. id=3, pid=1 (ссылка на запись планеты Земля в этой же таблице), priz=5. К ней по связи один к одному создаётся запись в EvaluateTable. id=1, pid=3 (ссылка на MainTable), value='?'. Создаётся запись в MainTable. id=4, pid=2 (ссылка на запись планеты Марс в этой же таблице), priz=5. К ней по связи один к одному создаётся запись в EvaluateTable. id=2, pid=4 (ссылка на MainTable), value='?'. В MainTable значения поля priz могут быть такими: 1 - планеты, 2 - континенты, 3 - страны, 4 - города, 5 -оценки. FK строятся без проблем. Причём нужно построить и FK в таблице MainTable по полю pid. Т.е. некое дерево. Допустим, при удалении планеты Земля по каскаду можно удалить и оценку планеты Земля. Опять же континенты по полю pid можно связать с планетами, страны с континентами, города со странами... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:28 |
|
|
start [/forum/topic.php?fid=32&fpage=6&tid=1539981]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 372ms |
0 / 0 |