Content management system CMS博客-存储评论/模式

Content management system CMS博客-存储评论/模式,content-management-system,blogs,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

我正在用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,如果有,我可以从user表中获取所需的数据:用户名、电子邮件,并将其插入此注释模型以验证模型


我的问题是:如果用户注册,用户名和电子邮件将是多余的数据。此外,如果他们更新电子邮件,我必须编写自定义代码,将此更改级联到注释中的此字段。因此,不要求用户名和电子邮件是否更好?

您可以只需要用户名,并隐含理解它是一个电子邮件地址,反之亦然。现在,两者交替使用是很平常的事


从理论上讲,你也可以为每个发表评论的人创建一个“存根”用户,拥有一个自动增量id和一个电子邮件地址。。。然后,您可以保留仅引用用户id的comments表。

您可以只使用用户名,并隐式理解它是一个电子邮件地址,反之亦然。现在,两者交替使用是很平常的事


从理论上讲,你也可以为每个发表评论的人创建一个“存根”用户,拥有一个自动增量id和一个电子邮件地址。。。然后,您可以将注释表保留为仅引用用户id。

我将省略数据库约束,并将逻辑放入代码中。因此,用户id、用户名、电子邮件都可以为空。但是我的业务逻辑应该防止它们都是空的。我也喜欢存根的想法,但我可能会在将来的某个日期回顾。我将省略数据库约束,并将逻辑放入代码中。因此,用户id、用户名、电子邮件都可以为空。但是我的业务逻辑应该防止它们都是空的。我也很喜欢存根的想法,但我可能会在将来的某个日期回顾。