2012-08-01 82 views
0

当设计一个表,一个多对多的关系,船舶1双方主键将来到[M]侧中间表,我目前的中间表是数据库设计复合键困境

Salesline : Itemid(PK), SOId(PK), userid(PK) 

Salesline : Itemid(PK), SOId(PK), 
userid_salesorder(PK) , // links to the salesorder.userid attribute 
userid_item(PK) // links to the item.userid attribute 

这是正确的方法吗?

ERD

+1

为什么要在SalesLine和用户之间建立单独的关系? – Olaf 2012-08-01 17:49:44

+0

用户销售订单 - > 1用户可以创建很多销售订单,用户 - 项目 - > 1用户可以创建许多项目 但中间表并不关于谁创建了它关于主键的组合,通过我不知道的方式为什么我想分开销售线和用户! – Fara 2012-08-01 18:01:37

回答

1

看起来像你的实体之间的自然realtionships是:

  • 用户可以将0,1个或多个SalesOrders的
  • 一个SalesOrder可包括1个或多个SalesLines
  • 一SalesLine恰好对应于一个商品
  • 可以在许多销售订单上订购商品

我建议打破用户和项目表之间的关系,并将订购的特定项目的数量移到SalesLine表中。用户,SalesOrder和Item应该有简单的,可能是代理的主键。 SalesLine的主键可能是复合的,由SalesOreder表的外键和订单中的行号组成。