2013-03-03 103 views
3

我正在使用PHP/MySQL中的web應用程序,並且我已經到了需要創建用戶/組關聯的位置。如何在MySQL中創建用戶/組關聯

這裏是我拍攝的:

  • 我將有一個數量不斷增長的組和用戶。

  • 用戶將能夠隨時修改他們的組關聯

  • 該組協會將決定網站上顯示的內容
    的優先級。

  • 發送給用戶的電子郵件更新將由其當前組 關聯確定。

我的問題是,處理此用戶/組關聯的最佳方式是什麼?

我現在的表結構看起來像這樣(簡化爲便於溝通):

Users: 
User_ID, User_name, Fname, Lname, is_dealer 

Deals: 
Deal_ID, Dealer_ID, Deal_name, Deal_content 

Dealers: 
Dealer_ID, User_ID, Dealer_name, Dealer address.. etc. 

我最初的想法是創建一個組表GROUP_ID和Group_name的列。然後我可以做兩件事之一:

我可以在Groups表中創建一個名爲「User_ID」的列,並且對於每個組關聯我都有一行表示Group_ID,Group_name和User_ID。這個選項感覺就像它會創建一個巨大的超級冗餘數據庫表。

我能想到的另一個選擇是在用戶表中創建一個Group_ID列,並在用戶需要解析的某種文本數組中填充用戶所關聯的所有組。這裏的問題是,我希望在那裏有無限數量的組,並且將用戶的組關聯堵塞成用戶表中每行的一個「值」似乎是非常潦草的。

真的這是一個SQL數據庫邏輯/設計問題。 任何援助將是一個很大的幫助。

謝謝!

+0

如果您希望我們可以將此問題遷移到我們的DBA姐妹網站:http://dba.stackexchange.com/。如果這是有利的,則標記用於移植的mod。 – Kev 2013-03-03 16:47:06

回答

9

只需製作一張表格,將用戶關聯到羣組。兩列:一列存儲唯一的user_id,另一列存儲唯一的group_id。

如果您將user_id-group_id組合設爲唯一,則此表中不需要唯一鍵。兩個柱子就夠了。

+---------+  +------------+ 
| user |  | user2group |  +----------+ 
+---------+  +------------+  | group | 
| user_id |----->| user_id |  +----------+ 
| name |  | group_id |<----| group_id | 
| pass |  +------------+  | name  | 
| ...  |       | ...  | 
+---------+       +----------+ 

如果我remeber正確的,這是三個步驟正常化之一。也許你應該看看這個。

+0

完美。非常感謝!看起來很明顯,現在你說了,但由於某種原因,我無法弄清楚。非常感激。 – 2013-03-05 03:42:56

+0

@AbuDun那麼'group'表真的存在嗎? 'user2group'表中的'group_id'還可以引用'user'表中的'user_id'? – 2013-09-23 22:07:05

1

您必須創建一個交叉表。

保持你的用戶,因爲它是和創建以下兩個表:

Groups: 
Group_ID, Group_name 

Groups_Users: 
Group_ID, User_ID 

這是一個典型的多對多關係,沒有冗餘數據。

+0

我同意你的看法,但他也應該使用外鍵的參照完整性。 – Tearsdontfalls 2013-03-03 14:14:33

0

給用戶鏈接到組表在我看來

你將不得不創建一個名爲u_g_realationship

表結構

id user_id group_id 
-- ------- -------- 
1  2   7 
2  2   5 

第三個表這將使更新或刪除關係非常容易相比干擾它在一列

我希望這可以解決您的問題亞歷克斯。