@danforth

Как лучше спроектировать комментарии в базе данных, где много сущностей?

Особо опыта в проектировании БД нету, пытался подсмотреть в популярные движки, но так и не пришел к какому-то единому выводу.

Задача: есть множество сущностей, нужно к каждой из такой сущности сделать возможность комментирования. Для простоты примера возьмем автомобиль, у которого есть:
brand - id, name // например Porsche
model - id, brand_id, name // например 911
spec - id, model_id, name // например Turbo S
engine - id, spec_id, hp, torque // двигатель для конкретной спецификации

Вариант 1:
Для каждой сущности создать отдельную таблицу с суффиксом _comments, тем самым получив brand_comments, model_comments и т.д., и привязать к первичному ключу каждой таблицы.

Вариант 2:
Создаем единую таблицу comments с атрибутом entity_code (varchar), где будет хранится brand, model, spec, и т.д., и уже в самом приложении подключаем нужную модель, и делаем запрос.

Вариант 3:
Не самый лучший вариант, но тем не менее: сделать отдельную таблицу comments, где в качестве комментируемой сущности является URL страницы, т.е. если адрес страницы /cars/porsche/ то все комменты будут привязаны к такой сущности. Вариант не очень, т.к. в случае изменения роутинга приложения можно потерять связь страницы с комментами, эту ситуацию нужно мониторить четко, не получится возложить целостность на СУБД. Однако, по такой схеме на сколько я знаю работает Disqus.

Какой из этих вариантов самый оптимальный? Есть ли альтернативы? Если можно, опишите подробнее минусы и плюсы каждого из вариантов, чтобы было понятно почему от него стоит отказаться, и запомнить на будущее.

Спасибо!
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 1
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Тут "два пути" (с):
1 Воспользоватся штатными средствами комментирвоания в БД
2 Глянуть как это дело реализовано в других БД, например в MS SQL
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы