プロデューサーと製品の間に1対多の関係がある場合(つまり、製品は1つのプロデューサーにのみ属することができます)、Products
テーブルに直接外部キー参照を置くだけでは意味がありません。
1対多
create table Producer
(
id int identity(1, 1) not null primary key clustered,
Name varchar(100) not null
)
go
create table Product
(
id int identity(1, 1) not null,
Name varchar(100) not null,
ProducerId int not null foreign key references Producer(id)
)
go
ただし、これが多対多の関係になる可能性がある場合は、結合テーブルを使用することをお勧めします。
多対多
create table Producer
(
id int identity(1, 1) not null primary key clustered,
Name varchar(100) not null
)
go
create table Product
(
id int identity(1, 1) not null primary key clustered,
Name varchar(100) not null
)
go
create table ProductProducer
(
ProductId int not null foreign key references Product(id),
ProducerId int not null foreign key references Producer(id)
)
go
-- adding the primary key also ensures uniqueness
alter table ProductProducer
add constraint PK_ProductProducer
primary key (ProductId, ProducerId)
go
結合テーブルを使用する場合は、組み合わせProductId/ProducerId
が最終的に一意になるため、追加のキーを用意する必要はありません。 それらを複合キーとして使用できるため、にその追加のId
フィールドは必要ありませんProductProducer
。
id
関係テーブルにフィールドがあることに何か価値があるのかと尋ねています。