SQL是对多个关系执行删除操作的最佳解决方案
我想澄清一下删除多重关系的问题 我有一个模式,它有一个表'a'和其他模式表,这些表在删除操作中引用了角色(级联)为'a' 还有一些表引用了“A”,也有其他对“A”的其他表的引用,但在这种情况下,消去值必须为空值SQL是对多个关系执行删除操作的最佳解决方案,sql,jpa,Sql,Jpa,我想澄清一下删除多重关系的问题 我有一个模式,它有一个表'a'和其他模式表,这些表在删除操作中引用了角色(级联)为'a' 还有一些表引用了“A”,也有其他对“A”的其他表的引用,但在这种情况下,消去值必须为空值 CREATE TABLE A (A_ID INTEGER PK ... ) CREATE TABLE B (B_ID INTEGER PK A_ID INTEGER NOT NULL ... FOREIGN KEY A_ID REFERENCES A(A_ID) ON DELETE
CREATE TABLE A
(A_ID INTEGER PK
...
)
CREATE TABLE B
(B_ID INTEGER PK
A_ID INTEGER NOT NULL
...
FOREIGN KEY A_ID REFERENCES A(A_ID) ON DELETE CASCADE
)
CREATE TABLE C
(C_ID INTEGER PK
A_ID INTEGER NOT NULL
B_ID INTEGER
...
FOREIGN KEY A_ID REFERENCES A(A_ID) ON DELETE CASCADE
FOREIGN KEY B_ID REFERENCES B(B_ID) ON DELETE SET NULL
)
这些多个关系导致角色删除操作出现问题
我有两个选择:
首先,承担与“A”的cascade all关系的角色,但这意味着我必须创建一个函数,当我必须删除表“A”的值时,该表的另一个值引用将从下至上删除。将来我可能会忘记添加新表
第二个解决方案和创建与其报告义务的连接表具有空值:
CREATE TABLE C
(C_ID INTEGER PK
A_ID INTEGER NOT NULL
...
FOREIGN KEY A_ID REFERENCES A(A_ID) ON DELETE CASCADE
)
CREATE TABLE C_B
(C_ID INTEGER PK
B_ID INTEGER PK
...
FOREIGN KEY C_ID REFERENCES C(C_ID) ON DELETE CASCADE
FOREIGN KEY B_ID REFERENCES B(B_ID) ON DELETE CASCADE
)
它涉及到创建几个新的桥接表
这个案子有不同的解决方案吗
我目前使用ApacheDerby和JPA进行持久化