在 中table A
,我有 3 个字段的组合作为 aprimary key
并且在table B
我有一个组合(这不是唯一的)。我想参考table A
以缓解delete
(with ON DELETE CASCADE
)。
那么,我是否不得不将其他两个字段放在表 B 中并以此作为参考,composite
还是有其他解决方案?
在 中table A
,我有 3 个字段的组合作为 aprimary key
并且在table B
我有一个组合(这不是唯一的)。我想参考table A
以缓解delete
(with ON DELETE CASCADE
)。
那么,我是否不得不将其他两个字段放在表 B 中并以此作为参考,composite
还是有其他解决方案?
如果要在两个表之间创建外键约束,则子表必须具有构成父表上主键约束的所有列(这是我不鼓励使用复合主键的原因之一键)。如果希望 Oracle 在删除父行时自动删除子行,则需要使用ON DELETE CASCADE
. 所以你的选择是
您可以在表 A 中创建一个新的单列(可能是序列生成的)主键,并使现有的复合键成为唯一键而不是主键。然后从表 B 中引用您的新主键。