Блог CMS - хранение комментариев / схемы - PullRequest
2 голосов
/ 16 августа 2011

Я создаю блог CMS с MVC и хочу, чтобы пользователи оставляли комментарии к сообщениям.

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

Я выкладываю таблицу комментариев, которая выглядит следующим образом:

CREATE  TABLE IF NOT EXISTS `mydb`.`comment` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `post_id` INT NOT NULL ,
  `user_id` INT NULL ,
  `username` VARCHAR(100) NOT NULL ,
  `email` VARCHAR(255) NOT NULL ,
  `content` TEXT NOT NULL ,
  `createtime` DATETIME NOT NULL ,
  `approved` TINYINT NOT NULL DEFAULT 0 ,
  PRIMARY KEY (`id`) ,
  INDEX `FK_comment_user` (`user_id` ASC) ,
  INDEX `FK_comment_post` (`post_id` ASC) ,
  CONSTRAINT `FK_comment_user`
    FOREIGN KEY (`user_id` )
    REFERENCES `mydb`.`user` (`id` )
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `FK_comment_post`
    FOREIGN KEY (`post_id` )
    REFERENCES `mydb`.`post` (`id` )
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;

Вы можете видеть, что user_id FK не требуется, потому что это может быть гость, перед сохранением / проверкой я могу проверить, есть лиМодель имеет идентификатор_пользователя, если так, я могу получить необходимые данные: имя пользователя, адрес электронной почты из таблицы пользователей и вставить в эту модель комментариев для проверки модели.

Мой вопрос таков: имя пользователя и адрес электронной почты будут избыточнымиданные, если пользователь зарегистрирован.Кроме того, если они обновят свою электронную почту, мне придется написать собственный код для каскадного изменения этого поля в комментарии.Следовательно, было бы лучше не требовать (отбрасывать NOT NULL) имя пользователя и адрес электронной почты?

1 Ответ

0 голосов
/ 16 августа 2011

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

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

...