见此文档中的这个词(复合外键),因为我使用了一个框架(警予)。 什么是复合外键(在MySQL数据库)?
( 我的猜测是,给出了两个表之间的关系,一个表有完全相同的名字作为ID的其他表中的列。)
*免责声明:我做我的尽职调查和Google搜索这个像两分钟之却发现,任期没有确凿的定义..
见此文档中的这个词(复合外键),因为我使用了一个框架(警予)。 什么是复合外键(在MySQL数据库)?
( 我的猜测是,给出了两个表之间的关系,一个表有完全相同的名字作为ID的其他表中的列。)
*免责声明:我做我的尽职调查和Google搜索这个像两分钟之却发现,任期没有确凿的定义..
甲composite key
由一个以上的属性的唯一标识的实体发生。 这不同于在一个或多个属性,从而弥补了关键的复合键,都没有在自己的权利的简单按键。
例如,你有一个数据库牵着你的CD收藏。 其中一个实体被称为轨道,其持有CD上的曲目的详细信息。 这有CD名称,曲目数量的复合键。
在轨道实体CD的名字是一个简单的按键,连接到CD的实体,但轨道数不为它本身就是一个简单的键。
假设我们有一个用户表:
+---------+----------+------------+------------+----------------+ | 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_Surname
, Customer_Forename
, Customer_ZIP
和Customer_DOB
这将一起形成一个外键的用户表(在这种情况下,我不建议这样的架构)。
MySQL的不仅是可以强制执行外键约束 (确保引用记录在国外表中存在),而且还可以自动更新或删除引用(订单)表,如果引用的记录本身更新或删除。 例如,如果约翰从用户表中删除,他所有的订单可以自动从订单表清除(再次,这可能不是你在这种情况下,希望); 或者,如果他的电子邮件地址变了, Customer
栏可以自动更新。