【发布时间】:2011-08-15 23:30:04
【问题描述】:
我正在使用 MVC 构建一个 CMS 博客,并希望用户在帖子上留下 cmets。
有两种类型的用户,有帐户的用户和未注册的访客用户。
我正在布置如下所示的评论表:
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)用户名和电子邮件会更好吗?
【问题讨论】:
标签: content-management-system blogs