Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql中的复合外键是什么?_Php_Mysql_Html_Sql_Yii - Fatal编程技术网

Php mysql中的复合外键是什么?

Php mysql中的复合外键是什么?,php,mysql,html,sql,yii,Php,Mysql,Html,Sql,Yii,在我正在使用的框架(yii)的文档中看到这个术语(复合外键)。什么是复合外键(在mySql数据库中) (我的猜测是,给定两个表之间的关系,一个表的列的名称与另一个表的id完全相同。) *免责声明:我做了尽职调查,在谷歌上搜索了整整两分钟,但没有找到这个词的确切定义 Acomposite key由一个以上的属性组成,以唯一地标识一个实体的出现。这与复合键的不同之处在于,组成键的一个或多个属性本身不是简单键 例如,您有一个保存CD收藏的数据库。其中一个实体称为曲目,它将曲目的详细信息保存在CD上。这

在我正在使用的框架(yii)的文档中看到这个术语(复合外键)。什么是复合外键(在mySql数据库中)

(我的猜测是,给定两个表之间的关系,一个表的列的名称与另一个表的id完全相同。)


*免责声明:我做了尽职调查,在谷歌上搜索了整整两分钟,但没有找到这个词的确切定义

A
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 | +---------+----------+------------+------------+----------------+ 我们希望将订单与用户表中的相关记录相关联。但如何做到这一点呢?在
Customer
列中我们应该放什么

显然,我们希望在users表中标识一个唯一的记录,因此我们需要使用它的一个键(如上面第一个示例中的
Email
)。使用一个表的键以这种方式从另一个表引用其记录在关系数据库中是非常常见的:在这种情况下,我们将引用列称为外键(因为它将键保存到一个外键表中)

如果我们使用一个复合键作为参考,我们将有一个复合外键。在上面的第二个示例中,我们的orders表可能有
Customer\u姓氏
Customer\u姓氏
Customer\u ZIP
Customer\u DOB
列,这些列将一起构成用户表中的外键(在这种情况下,我不建议使用这种模式)


MySQL不仅可以强制执行(确保引用的记录存在于外部表中),还可以在引用的记录本身被更新或删除时自动更新或删除引用(订单)表。例如,如果John被从users表中删除,那么他的所有订单都可以自动从orders表中清除(同样,在这种情况下,可能不是您想要的);或者,如果他的电子邮件地址发生了变化,客户的
栏可以自动更新。

使用CD/曲目的绝妙示例。我想我现在明白了。感谢您真正回答我的问题,因为似乎有些人对此不太满意。虽然这解释了一个复合键,但它并没有真正解释复合外键(这就是问题所在)。感谢您在这方面的非常透彻的投入。不确定为什么这一点被否决,更多的Google Fu可能会让您得到答案,但这仍然是一个有效的问题。 +--------------+-----------+---------+----------+ | Order_number | Status | Total | Customer | +--------------+-----------+---------+----------+ | 12345 | Completed | 1234.99 | ? | | 12346 | Pending | 345.00 | ? | | 12347 | Cancelled | 9876.50 | ? | +--------------+-----------+---------+----------+