我们假设我们有两个表:产品和订单。由于这是一个多对多的关系,我创建了一个额外的表:ordersproducts。
当我从许多线程中读取时,在这种情况下建议使用两个主键 - table ordersproducts:
order_id(PK),product_id(PK,FK),
但是,在这种情况下,表格中不能有重复项。 Order_id可以重复,但product_id必须是唯一的,我需要更多的灵活性 - order_id应该能够复制,所以product_id也应该复制。
在删除主键后正常工作,只在product_id上留下外键,但是 - 没有主键的表似乎不对,是吗?
答案 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几乎可以提供更多的提示:许多表格。这讨论了通用问题的通用解决方案。