2012-02-17 61 views
7

我有一个多对多表,它存储了用户可以拥有的每个允许角色的记录。如果用户更新他的角色(添加和删除)角色,我应该如何处理?以多对多关系更新

我应该先删除所有用户角色,然后添加选定的角色吗?或者做一些匹配?

+0

多数民众赞成我们为什么有参数,你传递的用户ID和角色ID作为参数,然后你做:'DELETE FROM MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH 2012-02-17 20:16:41

+1

这实际上是一个比它似乎更好的问题表面。如果您有一个用户界面,可让您编辑表格的多边,并在用户点击保存时以批处理模式进行更新(而不是一次只进行一次),则可能会有其他用户修改您下方的表格,例如,当用户正在UI中编辑时,确定另一个用户是否添加了角色 – JohnFx 2012-02-17 20:21:12

回答

6

有很多方法对皮肤这只猫,一些技巧,我能想到的:

1.删除所有角色和重新插入
这是一个直接的方法。删除用户的所有角色并重新插入。通常用户只属于少数角色(小于10)。另外,很有可能没有其他外键链接到这个多对多表。

2的变化跟踪和仅适用变更
这是更多的工作,但更高效,哪怕只是稍微在这种情况下。像ORMs这样的工具可以轻松跟踪和应用这些类型的更改。

3.用户作出的改变
在这种情况下,我认为这是可以接受的应用DB变化最终用户关联用户角色应用更改。也许这是一个本地数据库,每笔交易都是短暂的。但我想这是一个不太可能的情况。

我不认为这种情况下有任何错误删除和重新插入。

1

如果某个人删除角色,为什么不通过userIDroleID并删除该记录? 为什么要删除特定userID的所有角色ID,然后再次读取它们?

从上面我的意见,传递两个参数: UserIDRoleID

然后你就可以删除/提取单个元组。

+0

ui设置角色的方式是通过复选框设置的,您可以在其中检查或取消选中多个 – chobo 2012-02-17 20:27:49

+0

@chobo - 发送多个参数,你可以使用'IN'等。无论哪种方式,如果不存在太多的角色,你可以简单地删除所有并只读取已选中的角色。 – JonH 2012-02-17 20:29:29

+0

@JonH:笨拙的唠叨,对吗? – micahhoover 2016-10-04 12:07:59