什么是定义一个外键的优点(what are the advantages of defining a

2019-06-23 17:10发布

什么是一个MVC框架,处理有关工作时,定义外键的优势在哪里?

我使用的是关系型数据库提供了一个框架,使模型定义有关系。 由于外键通过模型定义的,它看起来像外键是多余的。 当涉及到管理应用的数据库开发,编辑/删除正在使用外键的表是一件麻烦事。

是否有任何优势,使用的是我被完全丢弃使用它们放弃外键?

Answer 1:

与约束(在某些数据库引擎)外键给你低级别的数据完整性(数据库级)。 这意味着你不能物理创建不履行相关的记录。 这只是一个方式更安全。



Answer 2:

它给你多数民众赞成在数据库级执行数据的完整性。 这有助于防止在应用程序逻辑可能错误可能导致无效数据。

如果任何数据操纵曾经在SQL绕过应用程序逻辑直接完成,这也对守卫打破这些限制坏的数据。

另外一个侧面好处是,它可以让工具自动生成从模式本身推断的关系数据库图表。 现在,在理论上创建数据库之前,所有的图表应该做的事,但随着数据库的发展超出了其最初的化身,这些图往往不能及时更新,并从现有的数据库图的能力是很有帮助既为审查,以及用来解释新的开发者加入一个项目的结构。

这可能是一个有益的禁用FKS而数据库结构仍然在不断变化,但他们良好的保障有当架构更加稳定。



Answer 3:

外键保证了匹配的记录在异国表中存在。 想象一下,一个表中调用Books有一个表称为FK约束Authors 。 每本书都保证有一个Author

现在,你可以做一个查询,如:

SELECT B.Title, A.Name FROM Books B
INNER JOIN Authors A ON B.AuthorId = A.AuthorId;

如果没有FK约束,缺少Author行将导致整个Book行被丢弃,从而导致你的数据集丢失的书籍。

此外,在FK约束,试图删除由至少一本书提到的作者将导致一个错误,而不是破坏你的数据库。



Answer 4:

虽然操纵开发/测试数据时,他们可能是一个痛苦,他们救了我生产了很多麻烦。

他们认为,以此来维护数据的完整性,特别是对孤儿记录的保障。

例如,如果你有很多相关的数据库PhoneNumber记录到Person ,会发生什么情况PhoneNumber时记录Person记录无论出于何种原因删除了? 他们将仍然存在于数据库中,但的ID Person ,他们涉及到将不再在有关存在Person表,你孤立的记录。

是的,你可以写一个触发删除PhoneNumber每当一个Person被去除,但是这可能会导致混乱,如果你不小心删除了一个Person ,需要回滚。

是的,你可能还记得摆脱的PhoneNumber手工记录,但对于你写9个月上下行其他开发商或方法?

通过创建一个外键,以确保任何PhoneNumber是关系到一个现有的Person ,你都投保破坏这种关系,并添加“线索”为预期的数据结构。



Answer 5:

主要好处是数据完整性和级联删除。 您还可以得到性能的提升时,他们定义和这些字段正确索引。 例如,您将不能创建一个不属于接触,或当你删除的联系人,你可以将它设置为自动删除所有的电话号码的电话号码。 是的,你可以使你的UI或中间层的连接,但你还是会最终获得的孤儿,如果有人使用SQL,而不是你的用户界面直接运行更新对服务器。 在“麻烦”的部分只是强迫你你犯了一个批量修改之前要考虑这些连接。 FKS救了我的熏肉很多次。



文章来源: what are the advantages of defining a foreign key