【问题标题】:sql - one column foreign key to two column primary key [duplicate]sql - 一列外键到两列主键[重复]
【发布时间】:2011-06-28 17:39:34
【问题描述】:

可能重复:
Can a foreign key reference a non-unique index?

我只是将一个应用程序从 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


【解决方案1】:
 What do you think about this?

我认为这取决于您的数据。我有一个一直在使用的 SQL Server 数据库。对于大多数表,主键是实体 ID 和程序编号的组合。实体有多个程序。然而,我也有一个表,其中仅包含有关每个实体的信息,并且仅通过实体 ID 链接到其他表。

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

【讨论】:

  • 我认为这不是有效的关系。此外,MS SQL Server 数据库中不存在这种情况 - 如果您是这样想的。不适用于 PostgreSQL/MS SQL Server。而且我真的不明白这意味着什么,在定义 CASCADE 的情况下如何找到匹配的行?
  • 我有一个 MS SQL Server 数据库,所以它可以存在。
猜你喜欢
  • 2012-06-29
  • 2015-06-30
  • 1970-01-01
  • 2011-01-29
  • 2020-06-04
  • 1970-01-01
  • 2018-06-05
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多