【问题标题】:CMS blog - storing comments / schemaCMS 博客 - 存储评论/架构
【发布时间】: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


    【解决方案1】:

    您可以只有用户名,隐含地认为它是一个电子邮件地址,反之亦然。现在将两者互换使用是很常见的事情。

    理论上,您还可以为所有 cmets 用户创建一个“存根”用户,使用自动增量 ID 和电子邮件地址...然后您可以保持 cmets 表仅引用用户 ID。

    【讨论】:

    • 我将省略数据库约束并将逻辑放入代码中。因此,user_id、username、email 都可以为空。但我的业务逻辑应该防止它们全部为空。
    • 我也很喜欢存根的想法,但我可能会在未来回顾。
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2012-02-29
    • 2013-11-21
    • 2013-04-16
    • 2021-06-20
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多