Enum или несколько таблиц?

Добрый день!



Задался таким вопросом, вот к примеру, возьмем тот же Вконтакте. У нас в бд есть несколько сущностей, к примеру стена, фотография, группа.



Нужно сделать комментарии к ним. Какой бы вы способ выбрали:



1. Сделать единую таблицу комментариев, в которой будет поле enum с перечислениями 'user', 'photo', 'group'.



2. Сделать три разные таблицы user_comments, photo_comments, group_comments
  • Вопрос задан
  • 9713 просмотров
Пригласить эксперта
Ответы на вопрос 5
EugeneOZ
@EugeneOZ
Три разные таблицы, конечно. Разные сущности нужно хранить в разных таблицах.
Ответ написан
@gleb_kudr
Чем неудобны три таблицы — потом запаришься осуществлять кейс поиска по комментарию. В какой из трех таблиц лежит нужный комментарий с текстом «Я и моя подруга Маша»? Все три нужно будет обходить. А это ненужное усложнение кода.
Чего внешнего ключа-то бояться? Целостность проверяется средствами БД.

Насчет отношений. Их можно вынести в отдельные таблицы, чтобы не городить лишних столбцов. А енум бы их адресовал.
Ответ написан
@basht
В постгресе же есть наследование таблиц!
Можно сделать одну пустую без поля привязки к entity id, а от неё отнаследовать три непустых более специфичных.
Ответ написан
@AlexeyVD
Не скажу за другие СУБД, но в MySQL использование ENUM вообще считается плохой практикой, т.к. данный тип допускает вставку элементов, которые не входят в перечисление (им будет присвоен индекс 0).
Если не хотите нарушать целостность данных, то однозначно делайте 3 разные таблицы с внешними ключами.
Ответ написан
Комментировать
StrangeAttractor
@StrangeAttractor
Я бы вынес все комментарии ко всему в отдельную таблицу вообще, а потом так или иначе связывал её с комментируемым.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы