SQL:复合主键,级联约束

时间:2013-09-30 14:30:36

标签: sql oracle constraints

我有3张桌子:A,B,C。

  • 表A包含以下属性:a(主键)
  • 表B包含属性:a,c(它们都构成复合主键)
  • 表C包含以下属性:c(主键)

当我删除A中的条目时,如何设置约束以删除级联B的元素? (使用Oracle DBMS)。

我试过这个:

ALTER TABLE A ADD CONSTRAINT constraint FOREIGN KEY (a) REFERENCES B (a) ON DELETE CASCADE

但是抛出了下一个错误:

ORA-02270: no matching unique or primary key for this column-list

由于

编辑:

我在表B中添加了两个外键:

ALTER TABLE B ADD CONSTRAINT FOREIGN KEY (a) REFERENCES A (a) ON DELETE CASCADE

ALTER TABLE B ADD CONSTRAINT FOREIGN KEY (c) REFERENCES C (c) ON DELETE CASCADE

然后,我将删除表B中的元素,同时删除A和C中的条目。

2 个答案:

答案 0 :(得分:1)

满足此要求:

  

然后,我将删除表B中的元素,同时删除A和C中的条目。

您需要通过添加外键约束将B表作为表AC的父表,将B表引用到{{1} }和A表。

请注意,引用列的数量必须与引用的列数相匹配:

C

答案 1 :(得分:0)

这是一个猜测,但我假设表BAC的孩子(也许B是桥接(或AC之间的交叉引用表,其中AC共享多对多关系。)

Table A  \*---1  Table B  1---\*  Table C  (* = many, 1 = one)

我还注意到您在标识FK中引入的FK(由于B(a)B主键的一部分)。

这使得表A成为这种关系中的父母,而B则是孩子。根据我的经验,任何FK都需要添加到关系的子方面(在本例中为表B)。

我不是Oracle的专家,但这不是更有意义吗?...

ALTER TABLE B ADD CONSTRAINT constraint FOREIGN KEY (a) REFERENCES A (a) ON DELETE CASCADE

这应删除所有B行,引用您选择删除的任何A行的PK。但是,我不是Oracle的专家,所以只有具备Oracle智能的人可以确认(或炸弹)我的解释才能获得面子。