我试图为一个允许回复评论的博客创建一个规范化的数据库。给出了一些我发现的答案,我似乎需要看看邻接列表模型和修改的预序树遍历算法。然而,在阅读之后,我还没有找到一个使用外键来执行数据完整性的示例。能办到吗?
在这种情况下,您推荐什么样的数据库设计?理想情况下,我希望能够消除父注释,并且通过使用PK关系(PK =主键,FK =外键)也能够消除所有的子注释,以避免将孤儿保存在表中。
UPDATE:作为澄清,我还想知道在允许回复评论的博客中使用哪种数据库设计(即回复回复原始线程的评论的评论)。
发布于 2011-07-22 00:34:57
Reddits的源代码是开源的,看看他们是怎么做的.
发布于 2011-07-21 21:21:17
除非您正在使用级联删除(不推荐),您将需要从上到下遍历树,然后开始从底部删除节点。您可以在应用程序层或数据库层(即在存储的proc中)执行此遍历,但无论哪种方式,所有删除都应该滚到数据库事务中。
我还没有找到一个使用外键来执行数据完整性的例子。能办到吗?
我不清楚你在问什么。整个模型很大程度上依赖于PK/FK关系(在注释和它的父级之间)。您所链接的文章没有如此明确地说明(我可以看到),但是标题列将是PK,而父列将是FK。
发布于 2011-07-22 01:17:30
是的,MySQL支持将外部密钥和级联删除作为其数据库存储引擎的一部分。您将需要使用InnoDB,这不是默认的。更改存储引擎非常简单,即使在创建表之后也可以完成。
MySQL正式文档:
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
改建:
修改表table1 ENGINE=InnoDB;
使用InnoDB引擎与MyISAM引擎(MySQL存储引擎默认)有其他优点和缺点。因此,在将其放在生产环境中之前,您应该仔细研究这两者。MyISAM不支持外国密钥。
https://stackoverflow.com/questions/6782843
复制相似问题