小编典典

更新外键值

sql

我有一个数据库应用程序,其中一个组的建模如下:

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为整个组更新,我正在编写这样的代码(用伪代码):

...
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()
...

有办法解决吗?似乎有点笨拙。希望我已经发布了足够的细节。

谢谢。


阅读 215

收藏
2021-04-14

共1个答案

小编典典

SQL Server不支持UPDATE CASCADE吗?:-

Foreign Key (group_id, group_owner_id)
 references Group(group_id, group_owner_id)
 ON UPDATE CASCADE

然后,您只需更新组表的group_owner_id。

2021-04-14