2012-05-11 97 views
2

您是否可以将SQL中的表中的外键设置为具有2列主键的另一表中的外键仅引用其中一个主键列Oracle?具有包含2列的主键的表的外键引用

+3

你的意思是一个两列主键吗?你不能在一个表上有两个主键...... –

+0

是的,这就是我的意思 – Spektor

+0

外键可以定义为多列。但是,复合外键必须引用具有相同列数和相同数据类型的复合主键或唯一键。因为复合主键和唯一键限制为32列,所以组合外键也限制为32列。 (在9i中,但我认为它不同于更高版本。http://docs.oracle.com/cd/B10500_01/server.920/a96524/c22integ.htm) –

回答

1

外键必须引用整个主键或其他唯一约束。如果父表需要两列来唯一标识一条记录,那么它的依赖者必须在其结构中包含两列。

通过使用替代或合成主键(通常用序列生成)来避免复合外键的扩散是非常常见的。外键引用单列代理键。

复合商业密钥仍应在父表中使用唯一约束强制执行。

有时候复合主键包含一个也是唯一的列。例如,这是一种强制执行弧的方式(超类型和子类型关系)。因此,PERSONS表将具有(PERSON_ID)作为主键和(PERSON_ID,PERSON_TYPE)作为唯一键。在这种情况下,依赖表可能会根据特定关系引用(PERSON_ID)或(PERSON_ID,PERSON_TYPE)。

1

PK-FK关系规则规定,列的数量必须相同,数据类型也应该相同。

+1

关于搜索引擎的事情是他们可以很容易地找到剽窃答案的原始来源:technet.microsoft.com/en-us/library/cc917573.aspx请不要试图通过批发报价来争取代表:这不是SO的精神。 – APC

相关问题