Это зависит от того, как ваше приложение будет использовать комментарии.
Я предполагаю, что вы часто захотите просмотреть все комментарии, созданные пользователем, независимо от сущности, которую они комментируют. То есть, я предполагаю, что вам часто потребуется запрос, который возвращает строки, указывающие, что пользователь JohnDoe прокомментировал статью 1, затем фотографию 12, а затем рецепт 171. Если это так, то было бы гораздо разумнее иметь один * 1003. * таблица со структурой, аналогичной той, которую Стив Мейн предложил с таблицей CommentableEntity
.
С другой стороны, если вы хотите получить доступ только к комментариям для определенного элемента (т. Е. Ко всем комментариям к статье 1), отдельные таблицы ArticleComments
и PhotoComments
могут быть более подходящими. Это облегчает размещение внешних ключей между таблицей сущностей и таблицей комментариев и потенциально немного более эффективно, так как это разделение бедняков. Конечно, как только вы начнете комбинировать данные из нескольких таблиц комментариев, эта эффективность исчезнет, поэтому вам нужно быть достаточно уверенным в сценариях использования.