首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的数据库模式设计与外键

问MySQL中的数据库模式设计与外键
EN

Stack Overflow用户
提问于 2011-07-21 21:09:54
回答 3查看 832关注 0票数 1

我试图为一个允许回复评论的博客创建一个规范化的数据库。给出了一些我发现的答案,我似乎需要看看邻接列表模型和修改的预序树遍历算法。然而,在阅读之后,我还没有找到一个使用外键来执行数据完整性的示例。能办到吗?

在这种情况下,您推荐什么样的数据库设计?理想情况下,我希望能够消除父注释,并且通过使用PK关系(PK =主键,FK =外键)也能够消除所有的子注释,以避免将孤儿保存在表中。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-22 00:34:57

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

票数 1
EN

Stack Overflow用户

发布于 2011-07-21 21:21:17

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

我还没有找到一个使用外键来执行数据完整性的例子。能办到吗?

我不清楚你在问什么。整个模型很大程度上依赖于PK/FK关系(在注释和它的父级之间)。您所链接的文章没有如此明确地说明(我可以看到),但是标题列将是PK,而父列将是FK。

票数 1
EN

Stack Overflow用户

发布于 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不支持外国密钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6782843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档