2017-02-11 58 views
0

需要知道DB結構是否準確? 比方說有客戶/產品/ product_events試圖理解不同表格之間的DB關係方法

如果每個客戶可以有多個產品,但產品不能有一個以上的客戶,還每個產品可以有多個事件

所以這裏就是我有例如

customers   products       product_events 
-----------  ------------------------------  ------------------------ 
id | name   id | customer_id | name    id | product_id | event_title 

,我想這是一個=>一對多關係

但在這裏可以大量的產品,其中一些還是讓說很多(產品)的可能不是阿西(換句話說不賣給顧客)

因此,要保持產品和客戶產品清單隔離的清單是一個很好的 方法有任何中​​介表來定義產品與客戶的關係?

那麼這個怎麼樣stucture

customers   products  customer_products     
-----------  ---------------  ------------------------------  
id | name   id | name  id | customer_id | product_id 

product_events 
--------------------- 
id | product_id | event_title 

對於大多數這些結構的使用將通過特定客戶

回答

1

有在productscustomer_id列來獲取產品的事件列表將意味着只有一個客戶可能擁有特定的產品 - 例如,您和我都無法購買同樣型號的筆記本電腦,但這聽起來不對。

有一箇中間customer_products表聽起來像正確的路要走。

+0

但是兄弟,主要是同一款產品只能賣給一位顧客,產品在這個例子中與他們的型號是唯一的 –

+0

@MuhammadNawazMemon在這種情況下,你能否澄清你對原始方法的關注?如果每個產品只能屬於一個客戶,那麼這似乎是正確的選擇。只要對未售出的產品使用'null'即可。 – Mureinik

+0

對,這是我目前.. 但我無法設置foreign_key customer_id在產品表中,因爲它可以爲空..因爲產品未售出。 在這種情況下該怎麼辦? –

0

通過考慮「客戶」和「產品」表,兩個表之間存在多對多關係。因此您需要創建第三個表來維護關係。那第三個表格應該包含兩個關係表的主關鍵字和其他因爲關係而骨骼化的屬性。 第三個表主鍵應該是來自關係表的兩個鍵的組合。

+0

在許多表中,不需要「id」。查看我的[_tips_](http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table)。 –