日期:2014-05-18  浏览次数:20460 次

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

------解决方案--------------------
物品表: 物品ID
订单表: 订单ID
订单物品关系表:物品ID,订单ID,购买数量



------解决方案--------------------
你可以这么设计:
订单表:
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
------解决方案--------------------
OrderProcuctRelation 表中可以 OrderId ,ProductId 做联合组件不需要ID
我一般用 Gentel 做 ORM  自动生成代码的模板不支持双主键,所以加了个 ID 做主键