2012-03-15 47 views
2

道歉,如果這真的很愚蠢,但我沒有任何經驗的PHP和MySQL知道應該如何做。我有一個MySQL數據庫客戶表和組表:從一列中的另一個表中存儲多個ID?

客戶 - ID名電子郵件地址電話組 組 - ID名稱描述

所以我需要在必要時將組分配給客戶,這樣可以更比每個客戶的一個組。所以例如客戶1位於組4,5,6

我應該在客戶表的組列中分配哪些組。我是否應該添加用逗號分隔的組ID,然後在需要獲取個人ID時使用爆炸?

也許這不是正確的方法,請有人啓發我。我很感激知道正確的方式來做到這一點,謝謝。

回答

4

不要在一列中存儲多個ID。這是一種非規範化,會使查詢和更改數據變得更加困難,並且會影響性​​能。

取而代之,創建一個單獨的CustomerGroup表(具有CustomerIDGroupID列),並且每個客戶/組關係具有一行。

+0

感謝,我想我已經知道在某種程度上,這將使得查詢困難,但我一直在尋找最簡單的(懶)的方式我能想到的。 – mao 2012-03-15 20:48:34

+0

最簡單的方法現在寫或維護它?我多次看到這個錯誤(把逗號分隔的值放在一個SQL字段中),並且一次都沒有導致一個巨大的問題。 – Shinhan 2012-03-15 21:58:20

1

我是否應該只添加用逗號分隔的組ID,然後在需要獲取個人ID時使用爆炸?

不!如果你這樣做,那麼你將不能快速地(例如)查詢特定組中的哪些用戶。

取而代之的是使用帶有兩列的join table,每列都有一個foriegn鍵約束到相應的表。

group_id customer_id 
4   1 
5   1 
6   1 
+0

感謝您的鏈接,解釋得很好。儘管我有點困惑,例如當創建這樣的表時,我會使用REFERENCES客戶(ID),如果我嘗試將客戶ID輸入到不存在的連接表中,會發生什麼情況,會出現錯誤嗎? – mao 2012-03-15 20:46:16

+0

@mao:是的,如果您嘗試添加參考表中不存在的值,您將會遇到錯誤。該行不會被插入。 – 2012-03-15 20:47:54

+0

好極了,有道理,謝謝 – mao 2012-03-15 20:51:27

1

下面是表的一個例子來說明你應該如何實現這一點:

表1消費者:

id name email 
1 john [email protected] 
2 ray [email protected] 

表2組:

id group_name description 
1 music  good music group 
2 programming programmers 

表3 CONSUMERS_GROUPS

consumer_id group_id 
1    1 
1    2 
2    1 

現在表3列出了屬於哪個組ID的消費者ID。

這種類型的關係被稱爲一對多關係其中,一個消費者可以有多個組。如果一個羣體可能有很多消費者,那麼反向也可能是真實的在這種情況下,關係稱爲很多很多

+0

感謝您的額外信息,我現在明白了 – mao 2012-03-15 20:47:41

相關問題