2012-01-14 7 views
1
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 
) 

答えて

2

典型的には、トップレベルの注文情報(場合など)と注文テーブルを有するだろうし、その後のOrderItem(又はOrderDetail)の一部を構成する各製品の行を有するテーブル

OrderId 
ProductId 
Quantity 
etc 

このOrderItemの/ OrderDetailテーブルにPKのための良い候補がOrderIdで+のProductIdに次のようになりますように列を含むため。

ProductId、UnitCost、ItemCountなどの列がOrderテーブルにある場合、それらは間違った場所にあり、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) 
) 
+0

私はあなたが言っているものを参照してください。 :)私は何かを試してみましょう。 –

+0

私の編集を見て、これは良いと思います! –

+0

これはもっと似ています。 OrderDetailIdは不要です - OrderId + ProductIdによって各行が一意に識別されるため、代わりにPKを形成する可能性があります。 – AdaTheDev

関連する問題