Content management system CMS博客-存储评论/模式
我正在用MVC建立一个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
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、用户名、电子邮件都可以为空。但是我的业务逻辑应该防止它们都是空的。我也很喜欢存根的想法,但我可能会在将来的某个日期回顾。