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

1 に答える 1

2

通常、最上位の注文情報 (誰が、いつなど) を持つ Order テーブルと、次のような列を含む注文の一部を形成する各製品の行を持つ 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)
)
于 2012-01-14T20:56:23.737 に答える