设计背景:
一个订单可有多个物品。
如何把这个关系设计成表呢?
如果设计成 订单ID 物品ID 那么这个表中不存在主键。是否是数据库设计出了问题?真的一定要主键吗?

解决方案 »

  1.   

    订单ID 物品ID 联合做主键
      

  2.   

    物品表: 物品ID
    订单表: 订单ID
    订单物品关系表:物品ID,订单ID,购买数量
      

  3.   

    marco08(天道酬勤) 这样设计 订单表 我觉得就一项 那不是冗余了吗?
      

  4.   

    你可以这么设计:
    订单表:
    create table OrderItem
    (
      OrderId int primary key identity(1,1) not null,  -- 订单ID
      OrderDate datetime default (GetDate()) not null, -- 下订单时间
      OrderUserId int foreign key references UserInfo (UserId) not null
    )订单和商品关系表:
    create table OrderProcuctRelation
    (
       ID int primary key identity(1,1) not null, --关系ID
       OrderId int foreign key references OrderItem (OrderId ), --订单ID
       ProductId int foreign key references  Product (ProductId ) , --商品ID
    )例如:
    OrderItem
    OrderId       OrderDate      OrderUserId 
    1             2007-03-27        100
    OrderProcuctRelation
    ID          OrderId       ProductId 
    1               1             1
    2               1             2
      

  5.   

    OrderProcuctRelation 表中可以 OrderId ,ProductId 做联合组件不需要ID
    我一般用 Gentel 做 ORM   自动生成代码的模板不支持双主键,所以加了个 ID 做主键
      

  6.   

    嗯,谢谢大家。不过刚才老师连看都没看我数据库。汗一个~~她就老说我ADO连接数据库太落后晕死