Реализация комментариев, есть ли лучшая практика для этого? - PullRequest
1 голос
/ 06 декабря 2009

Что ж, мне нужно реализовать функцию комментариев на специально закодированном сайте социальной сети. Комментарии должны быть реализованы на различных страницах, таких как видео, фотографии, альбомы и т. Д., Похожих на facebook.

Какова была бы лучшая практика для реализации этого?

Создание одной глобальной таблицы комментариев с полями, подобными этим, и получение комментариев на основе их типа комментариев на требуемой странице.

commentid int(10)
userid int(10)
comment_type ENUM('video','picture')
comment varchat(200)
parent int(10)

или создание отдельных таблиц для каждого комментария?

1 Ответ

5 голосов
/ 06 декабря 2009

Я бы так не поступил. Я бы использовал подтип на другой стороне.

  • Создать родительскую таблицу с именем (например) Content;
  • Видео, изображение, альбом и т. Д. Являются дочерними объектами контента;
  • Комментарий имеет внешний ключ Content ID.

Существует три основных схемы реализации подтипов:

  1. Создать отдельную таблицу для каждого подтипа;
  2. Создайте таблицу с именем Content с подчиненными таблицами Video, Album и т. Д. С внешним ключом Conent ID. Таблица содержимого также имеет поле «Тип содержимого», чтобы указать, какая таблица относится к этой записи; или
  3. Поместите все в таблицу с именем Content, в которой есть множество необязательных (обнуляемых) столбцов для покрытия подтипов. Это наиболее уместно, когда в столбцах практически нет различий, необходимых для хранения информации, относящейся к подтипу.

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

Редактировать: например:

  • Пользователь (идентификатор, имя пользователя, имя, фамилия, адрес электронной почты)
  • Контент (id, content_type, submitter_id, submit_date);
  • Изображение (id, URL, высота, ширина);
  • Видео (id, URL, формат, высота, ширина, длина);
  • Альбом (идентификатор, имя);
  • Альбом фотографий (id, album_id, photo_id);
  • Комментарий (id, идентификатор_идента, комментарий_дата, комментарий, идентификатор_содержания);

Некоторые заметки:

  • submitter_id и author_id являются внешними ключами для User.id;
  • Image.id, Video.id и Album.id - все внешние ключи для Content.id;
  • Content.content_type - это одно из следующих изображений: «Изображение», «Видео» или «Альбом»;
  • Альбом состоит из одной или нескольких фотографий, которые хранятся в изображении;
  • Таблица объединения Альбом фотографий связывает альбомы с изображениями (отношение многих ко многим);

Надеюсь, это прояснит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...