【问题标题】:Relationships and Multi Column / Composite Unique Keys关系和多列/复合唯一键
【发布时间】:2014-07-03 13:21:18
【问题描述】:

我有一个问题,我需要在两个表之间创建关系,但唯一性仅存在于两个表中的两个字段之间。这两种价值观都不是独一无二的。正在使用的数据库当前在 SQL Server 2008 R2 中。这是实际情况:

表 B 包含一个 JobNum 列,它已经是 Table A 的外键。 Table B 还包含一个名为 Shipment 的列。这个Shipment 列本身并不是唯一的,但是当与JobNum 配对时,组合是唯一的。 (JobNum AND SHIPMENT = UNIQUE) 我知道我可以创建复合的唯一索引。但是,由于我继承了这个项目,所以已经有一个主键,它只是一个自动递增的标识。 Table C 包含 JobNumShipment 列,但两个表之间没有实际关系。

如何使用此复合唯一值将表 B 链接到表 C?这需要通过连接表来完成吗?

【问题讨论】:

  • “两个表之间没有实际关系”是什么意思,即具体而言,就表中的值而言?即当一个元组是C时,它告诉你什么关于应用程序的情况?和乙?和A?只有这样才能告诉您 B 和 C 或 A 和 B(或 B 和 A 或 A、B 和 C)是如何“关联”的。
  • @philipxy 我只是说在数据库中没有设置外键约束的关系。但是,数据中的实际值存在关系。
  • 好的:没有声明的约束。但是,您是否理解,为了确定约束,需要知道元组对应用程序情况的描述?您是否希望我们假设您正在尝试在这两个字段上声明从 B 到 C 的 fk?

标签: sql sql-server database foreign-key-relationship


【解决方案1】:

一个外键可以由多个列组成,只要两个表具有相同类型的两个字段即可;因此,您可以为表 B 中的 JobNum 和 Shipment 创建一个唯一键,并使其成为表 C 的外键:

CONSTRAINT fk_mrt_ot FOREIGN KEY (refcol1, refcol2)
                    REFERENCES OtherTable(col1, col2)

顺便说一句,如here所见

【讨论】:

  • 请记住,这是在 MS SQL Server 中,而不是在 MySQL 中
  • 没问题!对于这种情况,我看到了很多关于 MySQL 的信息,但对于 SQL Server 却很少。我知道它们很相似,但我想确保我对继承的数据库理解正确。
  • 事实证明这没有问题(实际的 SQL 不同,但概念已经死了)。我只需要首先在列的组合上创建一个唯一键索引。然后它接受了这种关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
相关资源
最近更新 更多