道歉,如果這真的很愚蠢,但我沒有任何經驗的PHP和MySQL知道應該如何做。我有一個MySQL數據庫客戶表和組表:從一列中的另一個表中存儲多個ID?
客戶 - ID名電子郵件地址電話組 組 - ID名稱描述
所以我需要在必要時將組分配給客戶,這樣可以更比每個客戶的一個組。所以例如客戶1位於組4,5,6
我應該在客戶表的組列中分配哪些組。我是否應該添加用逗號分隔的組ID,然後在需要獲取個人ID時使用爆炸?
也許這不是正確的方法,請有人啓發我。我很感激知道正確的方式來做到這一點,謝謝。
道歉,如果這真的很愚蠢,但我沒有任何經驗的PHP和MySQL知道應該如何做。我有一個MySQL數據庫客戶表和組表:從一列中的另一個表中存儲多個ID?
客戶 - ID名電子郵件地址電話組 組 - ID名稱描述
所以我需要在必要時將組分配給客戶,這樣可以更比每個客戶的一個組。所以例如客戶1位於組4,5,6
我應該在客戶表的組列中分配哪些組。我是否應該添加用逗號分隔的組ID,然後在需要獲取個人ID時使用爆炸?
也許這不是正確的方法,請有人啓發我。我很感激知道正確的方式來做到這一點,謝謝。
不要在一列中存儲多個ID。這是一種非規範化,會使查詢和更改數據變得更加困難,並且會影響性能。
取而代之,創建一個單獨的CustomerGroup
表(具有CustomerID
和GroupID
列),並且每個客戶/組關係具有一行。
我是否應該只添加用逗號分隔的組ID,然後在需要獲取個人ID時使用爆炸?
不!如果你這樣做,那麼你將不能快速地(例如)查詢特定組中的哪些用戶。
取而代之的是使用帶有兩列的join table,每列都有一個foriegn鍵約束到相應的表。
group_id customer_id
4 1
5 1
6 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。
這種類型的關係被稱爲一對多關係其中,一個消費者可以有多個組。如果一個羣體可能有很多消費者,那麼反向也可能是真實的在這種情況下,關係稱爲很多很多
感謝您的額外信息,我現在明白了 – mao 2012-03-15 20:47:41
感謝,我想我已經知道在某種程度上,這將使得查詢困難,但我一直在尋找最簡單的(懶)的方式我能想到的。 – mao 2012-03-15 20:48:34
最簡單的方法現在寫或維護它?我多次看到這個錯誤(把逗號分隔的值放在一個SQL字段中),並且一次都沒有導致一個巨大的問題。 – Shinhan 2012-03-15 21:58:20