我有一个数据库应用程序,其中一个组的建模如下:
TABLE Group ( group_id integer primary key, group_owner_id integer ) TABLE GroupItem ( item_id integer primary key, group_id integer, group_owner_id integer, Foreign Key (group_id, group_owner_id) references Group(group_id, group_owner_id) )
我们设置了一个包含多字段的外键,group_owner_id因为我们要确保aGroupItem不能拥有与其所在所有者不同的所有者Group。由于其他原因(我认为我不需要对此进行详细说明),group_owner_id不能从GroupItem表中删除,因此仅删除它是不可行的。
group_owner_id
GroupItem
Group
我的大问题是,如果我想group_owner_id为整个组更新,我正在编写这样的代码(用伪代码):
... BeginTransaction(); BreakForeignKeys(group_items); SetOwnerId(group, new_owner_id); SaveGroup(group); SetOwnerId(group_items, new_owner_id); SetForeignKeys(group_items, group); SaveGroupItems(group_items); CommitTransaction() ...
有办法解决吗?似乎有点笨拙。希望我已经发布了足够的细节。
谢谢。
SQL Server不支持UPDATE CASCADE吗?:-
Foreign Key (group_id, group_owner_id) references Group(group_id, group_owner_id) ON UPDATE CASCADE
然后,您只需更新组表的group_owner_id。