外键定义2025年3月17日 | 阅读 7 分钟 外键是一组在某个表中引用另一个表主键的属性。外键用于链接这两个表。换句话说,外键是关系数据库中一组受特定包含依赖约束的属性,确切地说,是约束,即包含在一个关系 R 中外键属性的元组也必须存在于另一个(不一定不同)关系 S 中,并且此外,这些属性也必须是 S 中的候选键。 ![]() 外键是一组引用候选键的属性。例如,TEAM 表中的 MEMBER_NAME 属性可能是引用 PERSON 表中 PERSON_NAME 候选键的外键。TEAM 表中代表会员姓名的任何值也必须代表 PERSON 表中的人名,因为 MEMBER_NAME 是外键,换句话说,每个 TEAM 会员也是一个 PERSON。 关于外键拥有外键的表是子表,而包含候选键的表是首选表或父表。候选键是零个或多个属性的集合,对于关系数据库建模和实现中的每个元组(行),其值都保证是唯一的。在该关系中的任何其他元组都不可能具有与任何给定元组的候选键属性相同的值或值的组合。 ![]() 通常,外键必须与某个主表行中的候选键匹配,因为外键的主要目的是确定被引用表的特定行。否则,它将没有值(NULL 值)。这个规则被称为两个表之间的参照完整性约束。大多数数据库管理系统都包含过程来确保每个非空外键都能匹配到引用表中的一行,因为违反这些约束可能会导致各种数据库问题。考虑一个包含两个表的数据库,即包含所有客户数据的 CUSTOMER 表和包含所有客户订单的 ORDER 表。假设公司要求每个订单都引用一个客户。为了在数据库中反映这一点,ORDER 表中会添加一个外键列(例如 CUSTOMERID),该列引用 CUSTOMER 的主键(例如 ID)。由于表的主键必须是唯一的,并且 CUSTOMERID 只包含来自该主键字段的值,因此我们可以假设 CUSTOMERID 在有值时将识别下订单的特定客户。外键在数据库设计中起着重要作用。通过引用在数据库中反映真实世界项目之间的关系,并利用外键从一个表引用到另一个表,对于数据库设计至关重要。数据库规范化,即将表拆分,而外键允许它们重新组合,是数据库体系结构的另一个基本方面。 ![]() 引用表(或子表)中的多行可能引用父表中的同一行。在这种情况下,两个表之间的关系被称为引用表和被引用表之间的一对多关系。 此外,子表和父表可以是相同的,即外键引用同一个表。在 SQL:2003 中,这种外键类型被称为自引用外键或递归外键。这通常通过在数据库管理系统中链接同一表的第一个和第二个引用来完成。一个表可以有多个指向不同父表的外键。数据库系统独立强制执行每个外键。因此,外键可用于在表之间构建级联关系。外键是关系中的一个或一组属性,其值对应于另一个关系中的主键。 外键中的参照操作由于数据库管理系统强制执行参照约束,因此在删除(或更新)被引用表中的行时,它必须维护数据完整性。如果引用表中的依赖行仍然存在,则必须考虑它们的引用。SQL:2003 规定了在这种情况下必须发生的五个不同的参照操作
CASCADE 当父表(被引用表)中的行被删除(或修改)时,子表(引用表)数据库中具有匹配外键列的行也会被删除(或更新)。这被称为级联删除(或更新)。 RESTRICT 当引用表或子表中存在引用被引用表中值的行时,该值不能被更新或删除。同样,如果数据被引用表或子表引用,则不能删除该数据。为了更好地理解 RESTRICT(和 CASCADE),请考虑以下可能不立即显而易见的区别。在提到 CASCADE 时,参照操作 CASCADE 会更改(子)表本身的“行为”。例如,ON DELETE.CASCADE 有效地说“当被引用的行从另一个表(主表)中删除时,也从我这里删除。”另一方面,参照函数 RESTRICT 会影响主表的“行为”,但不会影响子表,尽管 RESTRICT 这个词出现在子表中而不是主表中!因此,ON DELETE RESTRICT 有效地说:“当有人试图从另一个表(主表)中删除该行时,阻止从该其他表中删除”。Microsoft SQL 2012 及更早版本不支持 无操作 NO ACTION 和 RESTRICT 非常相似。NO ACTION 和 RESTRICT 的主要区别在于,对于 NO ACTION,参照完整性检查是在尝试更改表之后执行的。RESTRICT 在尝试执行 UPDATE 或 DELETE 语句之前执行检查。如果参照完整性检查失败,这两种参照操作都会导致 UPDATE 或 DELETE 语句中的错误。换句话说,当使用 NO ACTION 参照操作在被引用表上执行 UPDATE 或 DELETE 语句时,DBMS 在语句执行结束时确认没有违反任何参照关系。与 RESTRICT 不同,RESTRICT 假定操作从一开始就会违反约束,NO ACTION 可能导致一个最终状态,在该状态下,在约束最终检查时不会违反任何外键关系,从而允许语句成功完成。 SET DEFAULT/ SET NULL 通常,对于 ON DELETE 和 ON UPDATE,DBMS 对 SET NULL 或 SET DEFAULT 的操作是相同的。对于 SET NULL,相关引用属性的值被设置为 NULL;对于 SET DEFAULT,则设置为给定的默认值。 外键的重要性在外汇关系数据库中,外键是一个基本概念。它是一个基于标准列或列组合连接两个表的键。外键的主要目的是通过在连接的表之间应用参照完整性约束来保护数据完整性。 ![]() 以下是使用数据库中的外键的一些好处。外键的重要性。
数据库管理员可以使用外键避免在多个表中存储重复数据。它们使数据可供多个表使用,而不会产生重复的数据集。换句话说,它们充当表之间的交叉引用系统。
主键和外键共同创建关系数据库中的结构,使用户能够更快地对数据进行排序、搜索和查询。
主键和外键之间的关系也有助于关系数据库的数据完整性。它们确保主表中的值存在,并且即使主表发生更改或被移除,主表中的外键引用仍然准确。
外键可用于数据库以强制执行业务规则。例如,可以使用外键来确保客户只能订购当前有库存的产品。
使用外键将使管理和更新数据库更加容易。例如,如果您需要编辑一个表中链接到另一个表的字段,使用外键可以确保两个表中的数据一致。外键是关系数据库的重要组成部分,用于在表之间建立关联、保持数据一致性以及执行级联更新和删除。 外键问题许多数据库用户会遇到外键错误,这通常是由参照完整性问题引起的。连接中数据的准确性和一致性通常被称为参照完整性。 ![]() 外键可能指向不再存在的数据,或者外键的数据类型可能与主键的数据类型不匹配,从而侵蚀参照完整性。如果外键未引用主键的所有数据,参照完整性也会受到侵犯。如果 Sales 的父表具有公司名称、部门名称和地址的主键,那么 Customers 的子表必须引用父记录的所有属性,而不仅仅是一个或两个。当子表中的外键值未能对应父表中的值时,参照完整性会变得不稳定。子表中的不匹配值称为孤立记录。 结论总而言之,外键是保护数据完整性、提高查询效率、简化数据库设计、方便数据维护和促进更好数据分析的有用工具。它们对于开发持久可靠的数据库系统至关重要。外键可用于强制执行规则以确保数据准确性,例如禁止删除被其他记录引用的记录并确保数据一致性。在当前的关系数据库管理系统中使用外键是标准的做法,对于保证数据质量至关重要。外键用于传统的 SQL 数据库以及图数据库等更新技术。外键在其表中不区分记录,但它们确实提供了重要价值。它们允许您在共享字段的表之间建立链接。 下一主题疑问句定义 |
我们请求您订阅我们的新闻通讯以获取最新更新。