3

在 中table A,我有 3 个字段的组合作为 aprimary key并且在table B我有一个组合(这不是唯一的)。我想参考table A以缓解delete(with ON DELETE CASCADE)。

那么,我是否不得不将其他两个字段放在表 B 中并以此作为参考,composite还是有其他解决方案?

4

2 回答 2

3

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

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

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

于 2012-12-06T21:44:17.223 回答