2016-01-11 65 views
1

在我的應用程序中,我需要爲用戶分配多個組。有1000多個用戶和10-15個組。數據庫設計。一對多還是多對多?

哪個數據庫設計更好?

一到多:

USER_ID | GROUP_1 | GROUP_2 | ... | GROUP_15 
-------------------------------------------- 
1  | true | false | ... | true 
2  | false | true | ... | true 
3  | true | true | ... | true 
.  | .  | .  | ... | . 
.  | .  | .  | ... | . 
.  | .  | .  | ... | . 

或許多一對多:

USER_ID | GROUP_ID 
------------------ 
1  | 1 
1  | 15 
2  | 2 
2  | 15 
3  | 1 
3  | 2 
3  | 15 
.  | .  
.  | .  
.  | .  

+2

第一個不是從任何傳統意義上說是「一對多」,第二個是您應該使用的設計。 – Uueerdo

+0

[這篇文章](http://stackoverflow.com/questions/23194292/normalization-what-does-repeating-groups-mean)可能對你有用。 –

+0

嘗試編輯此問題並以鼓勵具體答案而不是一般性意見的方式對其進行改寫。一般來說,數據庫的設計應該是業務特定的。通常會有多個同樣可以接受的解決方案。 – SunSparc

回答

2

毫無疑問,多對多是更好的設計。

第一個設計使寫查詢變得困難。考慮下面的例程查詢。

  1. 是指定組中的指定用戶嗎?爲此,您必須爲每個組使用不同的查詢。這是不可取的。另外,如果您正在使用組名列名,那麼組列表就是數據庫模式的一部分,而不是數據的一部分,用戶是數據的一部分。
  2. 指定用戶在哪些組中?您可以簡單地返回單行,儘管許多應用程序可能會喜歡(並熟悉)遍歷結果集。遍歷列的子集是可行的,但不自然。
  3. 指定組包含哪些用戶?現在你回到了每個組的不同查詢。 我將這些事情的演示作爲練習給讀者。 SQL數據庫近似的關係模型旨在處理關係和鍵(表和主鍵/外鍵)。信息應該存在於一個(而且只有一個)AS DATA(不是元數據)的地方。多列方法缺乏標準化,將成爲未來的維護頭痛。

注意:我編輯了這個回覆,以糾正我原代碼部分的誤讀。然而評論的主旨是相同的。第二個(多對多)是要走的路。

0

No 2是標準的,您可以隨時增加組數,也可以輕鬆處理簡單的sql連接查詢。

0

如果你想跟隨實體關係模型的規則:

Many-to-many: users can belong to different groups & groups can have multiple users. 

One-to-many: a user belongs to one group & groups can have multiple users. 

你的第二個例子是多到多,你的第一個是不是一到多。一對多會是:

USER_ID | GROUP_ID 
------------------ 
1  | 1 
2  | 15 
3  | 2 
4  | 15 
5  | 1 
6  | 2 
7  | 15 

其中,user_id必須是唯一的。

+0

哦對不起。我的第一個例子有一個特定的名稱嗎? –

+0

不是,你的第一個例子只是一張表,還沒有被標準化。 –

相關問題