【发布时间】:2011-06-28 17:39:34
【问题描述】:
我只是将一个应用程序从 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 中允许这样做?
谢谢!
【问题讨论】:
-
也投票结束。无意冒犯,但这已经在@Alex Howansky 引用的问题中得到了很好的回答。
-
“t1.a”是另一个表的外键吗?如果是这样(假设它是“t3”)然后更改 t2 的 FK 约束以指向该表。
-
Keith,t1.a 不是另一个表的外键。它只是 t1 表中的一列。
标签: mysql sql foreign-keys composite-primary-key