MySQL - 多对多表 - 主键和重复

时间:2017-07-25 07:29:58

标签: mysql database-design many-to-many

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

当我从许多线程中读取时,在这种情况下建议使用两个主键 - table ordersproducts:

order_id(PK),product_id(PK,FK),

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

在删除主键后正常工作,只在product_id上留下外键,但是 - 没有主键的表似乎不对,是吗?

1 个答案:

答案 0 :(得分:1)

始终拥有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几乎可以提供更多的提示:许多表格。这讨论了通用问题的通用解决方案。