首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有必要在数据库中显式指定外键和引用?

为什么有必要在数据库中显式指定外键和引用?
EN

Stack Overflow用户
提问于 2015-05-17 13:40:17
回答 3查看 2K关注 0票数 4

请您解释一下为什么在创建表时必须指定那些外键?我的意思是,我创建了两个表,它们具有一对多的关系(在ER-图上),但是我没有指定外键和引用。我可以使用WHER-子句连接表,甚至可以执行联接等等。

也许,我没有一些基本的概念,虽然我读过一些关于它的东西。我想这与数据的一致性或引用的完整性有关。

那么,你能解释一下这些概念吗?如果我有8-10个表,具有一对多的关系,如果我能够确保数据被正确地插入到数据库中,那么这些引用和外键是绝对必需的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-17 13:55:00

没有必要指定外键关系。这只是个好主意。

指定关系时,数据库确保关系的完整性。也就是说,它确保外键列中的值是合法值。

此外,当值被更新或删除时,外键上的cascade选项是一个很大的帮助。

票数 4
EN

Stack Overflow用户

发布于 2015-05-17 13:54:43

之所以有必要,是为了确保数据完整性

假设您有一个名为orders的表和一个名为order details的表,这两个表都有一个名为order id的列。

如果不使用外键,则可能要为orders表中不存在的订单插入订单详细信息。

如果尝试将订单详细信息添加到不存在的订单中,拥有外键将使数据库引发错误。

如果删除已经有详细信息的订单,也会引发错误,除非您首先删除订单详细信息或在外键上指定级联删除

票数 2
EN

Stack Overflow用户

发布于 2015-05-17 13:55:36

外键约束的驱动程序需要“数据完整性”。数据库管理系统(数据库服务器软件)帮助您在指定外键约束时防止意外(无意)修改数据。就好像你在帮助DBMS帮助你一样。因此,如果您指定约束,例如,当该产品有未执行的product时,可能会防止意外删除该orders

您会同意,当您在创建数据库(表)时仔细分析这些约束并在SQL中指定它们时,它将有助于确保完整性。

当您选择将“实体的知识”保存在数据库级别本身时,这是非常有用的。这是一个很好的开始方法,因为您的表(关系)或多或少是自成体系的。另一种方法是将所有这些一致性检查都放在高于数据库的级别上。例如,这是Rails这样的MVC框架所采用的方法,其中模型是应用约束的层,表本身不需要指定外键和其他约束。

通常,哪种方法更适合你的口味,但你应该在它们的精神中使用积木。

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

https://stackoverflow.com/questions/30287442

复制
相关文章

相似问题

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