我看过类似于我的问题,但没有一个完全相同。
假设我有以下(简化)表:
表A
aID int PRIMARY KEY
10
11
表B
bID int PRIMARY KEY, aID int FOREIGN KEY referencing A.aID
100, 10
101, 11
表C
cID int PRIMARY KEY, bID int FOREIGN KEY referencing B.bID
1001, 101
表D
aID int, bID int, cID int
11, 101, 1001
我希望约束表D,以便:
aID
,bID
,cID
都是有效的ID值aID
和bID
是表B中的有效对bID
和cID
是表C中的有效对使用外键约束很容易处理数字1.
但是假设我将表C更新为
1001, 100
如何确保表D自动更新为
10, 100, 1001
请注意,此处必须更改2个字段才能满足上面的2.和3.有没有办法用外键执行此操作,或者是唯一的AFTER UPDATE触发器?
答案 0 :(得分:0)
根据我在这种情况下的观点,不要创建其他表D,选择基于表(AB)-C的内连接的所有数据,在你的情况下,通过sql select语句创建表D但是定义一个额外的触发B,C上的更新,因此它们可以截断表D,因此D再次重建
答案 1 :(得分:0)
我最终将表D更改为VIEW
,即表B和C的JOIN
。
CREATE VIEW D AS
SELECT BB.aID, BB.bID, CC.cID FROM B BB
JOIN C CC
ON CC.bID = BB.bID
一旦我意识到这样做就给了我想要的东西,它变得更加容易管理。