Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
Mysql sql-一列外键到两列主键_Mysql_Sql_Foreign Keys_Composite Primary Key - Fatal编程技术网

Mysql sql-一列外键到两列主键

Mysql sql-一列外键到两列主键,mysql,sql,foreign-keys,composite-primary-key,Mysql,Sql,Foreign Keys,Composite Primary Key,可能重复: 我刚刚将一个应用程序从MySQL移植到PostgreSQL和MS SQL Server,我发现这个定义很奇怪(至少据我所知) 这是一个简化的例子 这在MySQL中是怎么可能的?它应该如何运行 create table t1 (a int, b int, primary key (a, b)) create table t2 (c int, a int references t1 (a)) t1.a不是唯一的,甚至不是t1.b。它们一起创建了唯一的记录,这就构成了主键。t2.a是

可能重复:

我刚刚将一个应用程序从MySQL移植到PostgreSQL和MS SQL Server,我发现这个定义很奇怪(至少据我所知)

这是一个简化的例子

这在MySQL中是怎么可能的?它应该如何运行

create table t1 (a int, b int, primary key (a, b))

create table t2 (c int, a int references t1 (a))
t1.a不是唯一的,甚至不是t1.b。它们一起创建了唯一的记录,这就构成了主键。t2.a是对t1.a的外键引用,但t1.a只是t1中主键的一部分

你觉得这个怎么样

显然,数据库设计是错误的?如果是这样,为什么MySQL中允许这样做

谢谢

 What do you think about this?
我想这取决于你的数据。我有一个一直在使用的SQL server数据库。对于大多数表,主键是实体ID和程序号的组合。实体有多个程序。然而,我还有一个表,它只包含关于每个实体的信息,并且只通过实体ID链接到其他表


对于某些数据来说,这是一种有效的关系。

另请参见投票结束。无意冒犯,但是@Alex Howansky引用的问题已经很好地回答了这个问题。“t1.a”是另一个表的外键吗?如果是这样(假设它是“t3”),则更改t2的FK约束以指向该表。Keith,t1.a不是另一个表的外键。它只是t1表中的一列。我认为这不是有效的关系。而且,这种情况在MS SQL Server数据库中不可能存在——如果您是有意的话。无法在PostgreSQL/MS SQL Server上工作。我真的不明白这意味着什么,在定义了级联的情况下,它如何找到匹配的行?我有一个MS SQL Server数据库,所以它可以存在。