2012-02-17 114 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