MySQL中的数据库模式设计和外键

时间:2011-07-21 21:09:55

标签: mysql database schema foreign-keys primary-key

我正在尝试为博客创建一个规范化数据库,以便回复评论。鉴于我找到的一些答案,似乎我需要查看邻接列表模型和修改的预订树遍历算法。但是,在reading之后,我还没有找到使用外键来强制数据完整性的示例。可以吗?

在这种情况下,您建议使用哪种数据库设计?理想情况下,我希望能够消除父评论,并且通过使用PK-FK关系(PK =主键,FK =外键)也能够消除所有子评论,以避免将孤儿保留在表

更新:作为澄清,我还想知道在允许回复评论的博客中使用了哪种数据库设计(即回复回复原文的评论的评论)线程)。

3 个答案:

答案 0 :(得分:1)

除非您使用级联删除(不推荐),否则您需要从上到下遍历树,然后从底部开始删除节点。您可以在应用层或数据库层(即存储过程中)中进行此遍历,但无论哪种方式,所有删除都应该转换为数据库事务。

  

我没有找到使用外键来强制数据完整性的示例。可以吗?

我不清楚你在这里问的是什么。整个模型几乎依赖于PK / FK关系(评论与其父母之间)。您链接的文章没有明确说明(我可以看到),但 title 列将是PK,列将是FK。< / p>

答案 1 :(得分:1)

Reddits源代码在Github上是开源的,看看他们是怎么做的......

答案 2 :(得分:0)

是的,MySQL支持外键和级联删除作为其数据库存储引擎的一部分。您将需要使用InnoDB,这不是默认设置。更改存储引擎非常简单,即使在创建表之后也可以完成。

MySQL官方文档:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

维修:

ALTER TABLE table1 ENGINE = InnoDB;

使用InnoDB引擎和MyISAM引擎(MySQL存储引擎默认值)还有其他优缺点。所以在将它们放入生产环境之前,你应该仔细研究它们。 MyISAM不支持外键。