Разработка элементарной базы данных корзины покупок - PullRequest
1 голос
/ 15 января 2012
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 Ответ

2 голосов
/ 15 января 2012

Как правило, у вас есть таблица Order с информацией о заказе верхнего уровня (кто, когда и т. Д.), А затем таблица OrderItem (или OrderDetail), в которой есть строка для каждого продукта, который составляет часть заказа, включая такие столбцы, как :

OrderId
ProductId
Quantity
etc

Хороший кандидат на PK в этой таблице OrderItem / OrderDetail будет для OrderId + ProductId.

Таким образом, если у вас есть столбцы, такие как ProductId, UnitCost, ItemCount и т. Д. В таблице Order, они находятся в неправильном месте и должны быть в таблице OrderItem / OrderDetail.

Обновление: Чтобы настроить составной ПК, вы можете сделать:

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)
)
...