数据库设计复合键难题

时间:2012-08-01 17:37:36

标签: database er-diagrams

当设计一个多对多关系的表时,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 个答案:

答案 0 :(得分:1)

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

  • 用户可以放置0个,1个或更多SalesOrders
  • SalesOrder可能包含一个或多个SalesLines
  • SalesLine恰好对应于1个项目
  • 可以在许多SalesOrders上订购商品

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