什么是一个MVC框架,处理有关工作时,定义外键的优势在哪里?
我使用的是关系型数据库提供了一个框架,使模型定义有关系。 由于外键通过模型定义的,它看起来像外键是多余的。 当涉及到管理应用的数据库开发,编辑/删除正在使用外键的表是一件麻烦事。
是否有任何优势,使用的是我被完全丢弃使用它们放弃外键?
什么是一个MVC框架,处理有关工作时,定义外键的优势在哪里?
我使用的是关系型数据库提供了一个框架,使模型定义有关系。 由于外键通过模型定义的,它看起来像外键是多余的。 当涉及到管理应用的数据库开发,编辑/删除正在使用外键的表是一件麻烦事。
是否有任何优势,使用的是我被完全丢弃使用它们放弃外键?
与约束(在某些数据库引擎)外键给你低级别的数据完整性(数据库级)。 这意味着你不能物理创建不履行相关的记录。 这只是一个方式更安全。
它给你多数民众赞成在数据库级执行数据的完整性。 这有助于防止在应用程序逻辑可能错误可能导致无效数据。
如果任何数据操纵曾经在SQL绕过应用程序逻辑直接完成,这也对守卫打破这些限制坏的数据。
另外一个侧面好处是,它可以让工具自动生成从模式本身推断的关系数据库图表。 现在,在理论上创建数据库之前,所有的图表应该做的事,但随着数据库的发展超出了其最初的化身,这些图往往不能及时更新,并从现有的数据库图的能力是很有帮助既为审查,以及用来解释新的开发者加入一个项目的结构。
这可能是一个有益的禁用FKS而数据库结构仍然在不断变化,但他们良好的保障有当架构更加稳定。
外键保证了匹配的记录在异国表中存在。 想象一下,一个表中调用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约束,试图删除由至少一本书提到的作者将导致一个错误,而不是破坏你的数据库。
虽然操纵开发/测试数据时,他们可能是一个痛苦,他们救了我生产了很多麻烦。
他们认为,以此来维护数据的完整性,特别是对孤儿记录的保障。
例如,如果你有很多相关的数据库PhoneNumber
记录到Person
,会发生什么情况PhoneNumber
时记录Person
记录无论出于何种原因删除了? 他们将仍然存在于数据库中,但的ID Person
,他们涉及到将不再在有关存在Person
表,你孤立的记录。
是的,你可以写一个触发删除PhoneNumber
每当一个Person
被去除,但是这可能会导致混乱,如果你不小心删除了一个Person
,需要回滚。
是的,你可能还记得摆脱的PhoneNumber
手工记录,但对于你写9个月上下行其他开发商或方法?
通过创建一个外键,以确保任何PhoneNumber
是关系到一个现有的Person
,你都投保破坏这种关系,并添加“线索”为预期的数据结构。
主要好处是数据完整性和级联删除。 您还可以得到性能的提升时,他们定义和这些字段正确索引。 例如,您将不能创建一个不属于接触,或当你删除的联系人,你可以将它设置为自动删除所有的电话号码的电话号码。 是的,你可以使你的UI或中间层的连接,但你还是会最终获得的孤儿,如果有人使用SQL,而不是你的用户界面直接运行更新对服务器。 在“麻烦”的部分只是强迫你你犯了一个批量修改之前要考虑这些连接。 FKS救了我的熏肉很多次。