CMS博客 - 存储评论/架构

时间:2011-08-15 23:30:05

标签: content-management-system blogs

我正在使用MVC构建CMS博客,并希望用户对帖子发表评论。

有两种类型的用户,帐户用户和未注册的访客用户。

我正在列出看起来像这样的评论表:

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不是必需的,因为它可能是来宾,在保存/验证之前,我可以检查模型是否有user_id,如果有,我可以获取所需的数据:用户名,来自的电子邮件用户表并注入此注释模型以验证模型。

我的问题是:如果用户已注册,用户名和电子邮件将是冗余数据。此外,如果他们更新了他们的电子邮件,我必须编写自定义代码以将此更改级联到评论中的此字段。因此,不要求(删除NOT NULL)用户名和电子邮件会更好吗?

1 个答案:

答案 0 :(得分:0)

你可以只拥有用户名,隐含的理解是它是一个电子邮件地址,反之亦然。现在通常可以互换地使用这两者。

理论上,您还可以为所有评论的人创建一个“存根”用户,其中包含自动增量ID和电子邮件地址......然后您可以保留评论表仅引用用户ID。