Система комментариев на сайте - PullRequest
0 голосов
/ 06 марта 2011

Учитывая систему комментариев для элементов на моих страницах, я хочу избежать повторения таблиц, таких как:

tblBlogComments
tblNewsComments
tblArticleComments

и т. Д. И т. П.

Какой хороший способ создать это? Одна таблица комментариев? Как мне связать их с отдельными записями в блоге?

Ответы [ 6 ]

3 голосов
/ 06 марта 2011

Конечно, вы могли бы использовать одну таблицу для них, но вы должны очень тщательно обдумать, хотите ли вы когда-нибудь добавить определенные функции / поля для определенной таблицы, которые вы не хотите использовать для других.

т.е. вы могли бы иметь

TABLE Comments (commentid, userid, blogid, newsid, articleid, commenttitle, comment)

Но если затем вы захотите добавить еще одно поле для комментариев к новостям, т. Е. NewsPicture, то есть тонкая грань между упрощением работы и получением структуры таблицы, которая семантически неверна

1 голос
/ 06 марта 2011

Это зависит. Существуют причины для отдельных таблиц, такие как отсутствие необходимости включать категории или фильтрацию, а также логическое разделение записей, которые не следует группировать (комментарии блога против комментариев новостей).

Если вы хотите иметь одну простую таблицу комментариев, вы всегда можете добавить столбец «Категория» для пометки комментария, где / для чего это комментарий (Блог, Новости, Статья и т. Д.). Если вы спланируете свои уникальные идентификаторы, у вас может быть просто столбец типа «Родительский документ», который будет указывать на идентификатор статьи / блога / и т. Д., В который публикуется комментарий.

1 голос
/ 06 марта 2011

Вы можете создать таблицу комментариев со всеми комментариями и идентификатором элемента определенного типа, который ссылается на определенный элемент (сообщение в блоге, новость, статья и т. Д.).

Это также может быть хорошодобавить тип объекта в таблицу комментариев, где значения будут типом элемента, с которым был связан комментарий.Таким образом, вы можете создать представление для фильтрации таблицы по запросам в разных разделах сайта, поэтому вам не нужно каждый раз выполнять полное сканирование таблицы / индекса.

0 голосов
/ 07 марта 2011

Ваш вопрос почти идентичен этой проблеме проектирования базы данных , которая включает пример кода SQL для реализации такой системы комментариев. Вы должны быть в состоянии легко адаптировать SQL.

0 голосов
/ 06 марта 2011

Две проблемы в этом подходе:

a) Ограничение внешнего ключа.Нет простого способа указать

, если значение comment_type_id равно «Article», затем проверить, существует ли этот родительский_id в таблице Article, если comment_type_id - «Blog», то проверить, существует ли этот parent_id в таблице Blog ---on ..

Большинство мест, которые я видел, игнорируют ограничение внешнего ключа и выполняют проверку на прикладном уровне (java, .net ... что угодно) при добавлении комментария.Это создает дополнительные сложности, такие как одновременные пользователи, транзакции и блокировка.

b) Вторая проблема - когда некоторые комментарии содержат конкретные данные (относящиеся только к блогу, статье или новостям).Даже если он есть, убедитесь, что вы включили его в отдельный столбец и не имеете общих столбцов, таких как "Additional_column_1".

0 голосов
/ 06 марта 2011

Предполагая, что все комментарии одинаковы (т. Е. Все имеют одинаковую максимальную длину и другие сохраненные поля, такие как «автор комментариев»), я бы выбрал одну Comment таблицу с CommentTypeIdстолбец, чтобы определить, к какому типу комментариев это относится.

Кроме того, я бы также отбросил tbl с начала имен сущностей, так как в этом нет необходимости, по крайней мере, IMO =)

...