2个外键在同一个表中,其他解决方案?

时间:2014-01-28 15:01:19

标签: sql

我正在尝试创建一个允许我处理生产项目的数据库,但我不确定这是最好的方法

  

表产品

     

PK:productid

其余的产品表不是很重要,所以省略了。

  

表product_components

     PK:productid& ingredientID

     

productID(fk)

     

IngredientID(fk to product)

     

数量

这是正确的解决方案,还是有更高效的方式来处理这个问题?

1 个答案:

答案 0 :(得分:0)

多对多关系通常会按照您在此处的方式解决。之后,您可以通过简单的连接获得产品的一个级别的组件:

select prod.*, comp.*, pc.quantity
from product prod 
  join product_components pc on (prod.productid=pc.productid)
  join product comp on (comp.productid= pc.IngredientID)
where prod.productId=?
;

该模型减少了冗余数据,因此只要组件用于越来越多的产品,该产品有很多组件,并且您有多个级别的产品,这个解决方案在空间方面的性能很好。产品...也没有冗余数据,可以减少数据库中的不一致。

速度方面的性能取决于数据以及您将要执行的查询,但此模型通常可以很好地使用正确的索引。