什么是MySQL中的复合外键?(What is a composite foreign key in

2019-06-27 17:05发布

见此文档中的这个词(复合外键),因为我使用了一个框架(警予)。 什么是复合外键(在MySQL数据库)?

我的猜测是,给出了两个表之间的关系,一个表有完全相同的名字作为ID的其他表中的列。)

*免责声明:我做我的尽职调查和Google搜索这个像两分钟之却发现,任期没有确凿的定义..

Answer 1:

composite key一个以上的属性唯一标识的实体发生。 这不同于在一个或多个属性,从而弥补了关键的复合键,都没有在自己的权利的简单按键。

例如,你有一个数据库牵着你的CD收藏。 其中一个实体被称为轨道,其持有CD上的曲目的详细信息。 这有CD名称,曲目数量的复合键。

在轨道实体CD的名字是一个简单的按键,连接到CD的实体,但轨道数不为它本身就是一个简单的键。



Answer 2:

假设我们有一个用户表:

+---------+----------+------------+------------+----------------+
| Surname | Forename | ZIP        | DOB        | Email          |
+---------+----------+------------+------------+----------------+
| Jones   | John     | 60612-0344 | 1970-02-14 | john@jones.com |
| Jones   | Jane     | 60612-0344 | 1971-05-26 | jane@jones.com |
| Smith   | Sara     | 19002-0052 | 1982-06-21 | sara@smith.com |
+---------+----------+------------+------------+----------------+

因为我们的应用程序需要每个用户都有自己独特的电子邮件地址,我们可以通过唯一的值标识表中的记录Email列:它形成了一个钥匙插入表中。 这样的密钥(在单个列中定义的)被认为是简单的

在某些情况下,人们可能会知道,没有两个用户可以有相同的名字,生日和邮政编码日期:那么另一个可能的关键是组合(Surname, Forename, ZIP, DOB) 这样的键(在多个列上定义的)被认为是复合物

由于每个记录的键必须(根据定义)是唯一的它,可以告诉MySQL通过定义来执行这样的唯一性约束UNIQUE在相关列指数(表的PRIMARY KEY是一种特殊类型的UNIQUE指数):试图创建(或更新)使用相同的密钥作为现有记录将失败的记录。

现在让我们假设一个有订单的表:

+--------------+-----------+---------+----------+
| Order_number | Status    | Total   | Customer |
+--------------+-----------+---------+----------+
|        12345 | Completed | 1234.99 |     ?    |
|        12346 | Pending   |  345.00 |     ?    |
|        12347 | Cancelled | 9876.50 |     ?    |
+--------------+-----------+---------+----------+

我们希望订单从用户表中的相关记录相关联。 但如何做到这一点? 我们放什么Customer列?

显然,我们希望在用户确定表中的唯一记录,所以我们需要使用它的键(如一个Email在上面的第一个例子)。 使用一个表的关键,以这种方式从另一个表中引用它的记录是在关系数据库中非常普遍:在这种情况下,我们指的是引用列作为一个外键 (因为它拥有按键为外商表)。

如果我们使用的参考组合键,我们将有一个复合外键 。 根据第二个例子,我们的订单表可能有列Customer_SurnameCustomer_ForenameCustomer_ZIPCustomer_DOB这将一起形成一个外键的用户表(在这种情况下,我不建议这样的架构)。

MySQL的不仅是可以强制执行外键约束 (确保引用记录在国外表中存在),而且还可以自动更新或删除引用(订单)表,如果引用的记录本身更新或删除。 例如,如果约翰从用户表中删除,他所有的订单可以自动从订单表清除(再次,这可能不是你在这种情况下,希望); 或者,如果他的电子邮件地址变了, Customer栏可以自动更新。



文章来源: What is a composite foreign key in mysql?