如果您在生产者和产品之间存在一对多关系(换句话说,一个产品只能属于一个生产者),那么直接在Products
表中放置一个外键引用是有意义的:
一对多
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
但是,如果有可能会发生多对多关系,那么最好的选择就是使用Join表。
多对多
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
如果决定使用Join表,则不需要额外的键,因为的组合ProductId/ProducerId
最终将是唯一的。 您可以将它们用作组合键,因此不需要中的其他Id
字段ProductProducer
。
id
他的关系表中是否有任何值?