2017-07-25 70 views
0

假设我们有两个表:产品和订单。由于这是一个多对多的关系,我创建了一个额外的表格:ordersproducts。MySQL - 多对多表 - 主键和副本

当我从多个线程读取,两个主键在这种情况下建议 - 表ordersproducts:

ORDER_ID(PK),PRODUCT_ID(PK,FK),

然而,在这种情况下可以有在表格中不会重复。 Order_id可以被复制,但是product_id必须是唯一的,我需要更多的灵活性 - order_id应该能够复制,所以应该product_id。

在删除主键后正常工作,只留下了在product_id处的外键,但是 - 没有主键的表看起来不正确,是吗?

+0

你可以使(order_id和product_id)的组合独一无二在这种情况下,order_id可以是重复的同样的去为product_id,但两者不能同时复制 – Ashish451

+0

事情是 - 我需要它们都能够在相同时间。一次可以是4种产品:键盘,鼠标,鼠标,sdd驱动器。 (这只是一个例子。)鼠标不能作为数量来解决,在这种情况下,产品鼠标更像是一种产品,而不是精确的产品。 – ficus

+1

在这种情况下有3列订单产品1.主键2,3 order_id和product_id – Ashish451

回答

0

始终有一个PRIMARY KEY。这听起来像你需要或者这些(不能同时):

PRIMARY KEY(order_id, product_id) 
PRIMARY KEY(product_id, order_id) 

这些说(因为MySQL的PK必须是唯一的),有可能是其中任何一列的副本,但是从不重复。

因为你很可能想要去的两个方向(给定的顺序,发现所有的产品给出一个产品,发现所有的订单),你需要索引两种方式:

PRIMARY KEY(order_id, product_id), 
INDEX(product_id, order_id) 

记住, PK是唯一的,是一个INDEX。

Here是几乎所有许多桌面上的更多提示。这将讨论通用问题的通用解决方案。