引用复合主键的一列作为外键

时间:2012-12-06 21:34:12

标签: sql oracle foreign-keys

table A中,我有一个由3个字段组合而成的primary key,在table B我有一个复合(不是唯一的)。我想引用table A来简化deleteON DELETE CASCADE)。

那么,我是否被迫将其他两个字段放在表格B中并使用此composite进行引用,还是有其他解决方案?

2 个答案:

答案 0 :(得分:3)

如果要在两个表之间创建外键约束,子表必须包含构成父表的主键约束的所有列(这是我不鼓励使用的原因之一)复合主键)。如果希望Oracle在删除父行时自动删除子行,则需要使用ON DELETE CASCADE的外键约束。所以你的选择是

  • 将构成父级主键的所有列添加到子级中。
  • 重新设计父表,以便有一个单列主键(可能是一个合成键)并在子表中使用它。
  • 编写自己实现删除的代码。

答案 1 :(得分:1)

您可以在表A中创建新的单列(可能是序列生成的)主键,并使现有的组合键成为唯一键而不是主键。然后从表B中引用新的主键。