Как лучше спроектировать комментарии в базе данных, где много сущностей?
Особо опыта в проектировании БД нету, пытался подсмотреть в популярные движки, но так и не пришел к какому-то единому выводу.
Задача: есть множество сущностей, нужно к каждой из такой сущности сделать возможность комментирования. Для простоты примера возьмем автомобиль, у которого есть:
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.
Какой из этих вариантов самый оптимальный? Есть ли альтернативы? Если можно, опишите подробнее минусы и плюсы каждого из вариантов, чтобы было понятно почему от него стоит отказаться, и запомнить на будущее.