2017-02-11 56 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)。 –