设计一个基本的购物车数据库

时间:2012-01-14 20:52:09

标签: sql sql-server database-design commerce

create table [User]
(
    UserId int primary key identity(1,1),
    FirstName nvarchar(256) not null,
    LastName nvarchar(256) not null,
)

create table Product
(
    ProductId int primary key identity(1,1),
    UnitPrice decimal(18,2) not null, //For catalog purposes.
    Name nvarchar(1000) not null,
    Description nvarchar(max) not null,
    Stock int not null
)

create table [Order]
(
    OrderId int primary key identity(1,1),
    UserId int foreign key references [User](UserId),
    ProductId int foreign key references Product(ProductId),
    UnitCost decimal(18,2) not null, //How much it actually cost when the person bought it.
    ItemCount int not null,
    Subtotal decimal(18,2) not null
)

create table OrderDetail
(
    OrderDetailId int primary key identity(1,1),
    ?

我坚持订购系统的数据库设计。

用户可以选择n个产品添加到订单请求中。有什么建议吗?


根据这里给出的一些建议,这感觉如何?有任何陷阱吗?

create table [User]
(
    UserId int primary key identity(1,1),
    FirstName nvarchar(256) not null,
    LastName nvarchar(256) not null,
)

create table Product
(
    ProductId int primary key identity(1,1),
    UnitPrice decimal(18,2) not null,
    Name nvarchar(1000) not null,
    Description nvarchar(max) not null,
    Stock int not null
)

create table [Order]
(
    OrderId int primary key identity(1,1),
    UserId int foreign key references [User](UserId),
    DateOfOrder datetime not null
)

create table OrderDetail
(
    OrderDetailId int primary key identity(1,1),
    OrderId int foreign key references [Order](OrderId),    
    ProductId int foreign key references Product(ProductId),
    UnitCost decimal(18,2) not null,
    ItemCount int not null,
    Subtotal decimal(18,2) not null
)

1 个答案:

答案 0 :(得分:2)

通常情况下,您有Order表,其中包含顶级订单信息(who,when等),然后是OrderItem(或OrderDetail)表,其中每个产品都有一行,构成订单的一部分,包括列等:

OrderId
ProductId
Quantity
etc

此OrderItem / OrderDetail表上PK的良好候选者将在OrderId + ProductId上。

所以在Order表中有ProductId,UnitCost,ItemCount等列的地方,那些位于错误的地方,应该在OrderItem / OrderDetail表中。

<强>更新 要设置复合PK,您可以执行以下操作:

create table OrderDetail
(
    OrderId int foreign key references [Order](OrderId),    
    ProductId int foreign key references Product(ProductId),
    ...other columns...,
    CONSTRAINT PK_OrderDetail PRIMARY KEY(OrderId, ProductId)
)