如果您在生产者和产品之间存在一对多关系(换句话说,一个产品只能属于一个生产者),那么直接在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
多对多
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他的关系表中是否有任何值?