如何引用具有唯一约束的另一列与另一列?

时间:2018-10-19 17:55:31

标签: sql sql-server tsql foreign-keys constraints

我有这个“类型”表

+-----------+--------+
| RefTypeID | TypeID |
+-----------+--------+
| 1         | 1      |
| 1         | 2      |
| 1         | 3      |
| 2         | 2      |
| 2         | 4      |
| 3         | 5      |
+-----------+--------+

由于不会重复每行中的两个值,因此我创建了一个包含两个列的唯一约束。

我还有另一个看起来像这样的表(Prymes)

+---------+-----------+--------------------+
| PrymeID | RefTypeID | ***More Columns*** |
+---------+-----------+--------------------+
| 1       | 2         |         ***        |
| 2       | 2         |         ***        | 
| 3       | 3         |         ***        |
| 4       | 1         |         ***        |
| 5       | 1         |         ***        |
| 6       | 3         |         ***        |
+---------+-----------+--------------------+

我想在Prymes中创建一个仅引用Types中的RefTypeID列的外键,但是由于约束,该关系必须在Prymes中包括两列,在Keys中包括两列。

有什么方法可以仅使用两个表中的RefTypeID列来创建关系吗?

1 个答案:

答案 0 :(得分:1)

你不能。

您只能在主键或唯一键的所有列中创建外键。您不能使用局部的,因为不能保证多列唯一键的单列唯一地标识一行(并且它不会像示例数据中所示)。

换句话说,您将需要一个具有唯一RefTypeId的表,并将RefTypeId用作该表的主键,并同时引用Types和{{1} }和外键。