我正在使用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)用户名和电子邮件会更好吗?
答案 0 :(得分:0)
你可以只拥有用户名,隐含的理解是它是一个电子邮件地址,反之亦然。现在通常可以互换地使用这两者。
理论上,您还可以为所有评论的人创建一个“存根”用户,其中包含自动增量ID和电子邮件地址......然后您可以保留评论表仅引用用户ID。