我正在尝试使用外键将两个表连接在一起。我收到错误
在引用表中没有与引用列列表匹配的主键
我不确定我缺少什么。
if exists(select * from sysobjects where name = 'Riders')
drop table Riders
go
create table Riders
(
RiderID int not null identity (10,1)
constraint pk_Riders_RiderID primary key(RiderID,ClassID),
[Name] nvarchar(50) not null,
constraint chk_Riders_Name check (len(Name) > 4),
ClassID nchar(6) not null
)
go
if exists( select * from sysobjects where name = 'Class')
drop table Class
go
create table Class
(
ClassDescription nvarchar(50) not null,
ClassID nchar(6) not null
constraint fk_Riders_Class foreign key
references Riders(ClassID) on delete no action
)
go
答案 0 :(得分:1)
您似乎以错误的方式建立了恋爱关系
Class将具有ClassID的主键;类中必须没有行具有重复的主键。因此,班级(作为表格)会将您的班级代码解码为班级名称(SNR =高级运动系列1,50CC = 50 CC 2冲程杯等)
车手需要一个外键,因为Riders.ClassID列引用了Class.ClassID-Riders中的Classid列将具有重复的值(多个车手都在同一类中),但是您希望强制执行的关系是“任何骑手都不得进入未知类别”,即“任何骑手记录均不得具有在类表的classid列中不存在的classid值”
因此,您正在寻找更类似的东西:
if exists( select * from sysobjects where name = 'Class')
drop table Class
go
create table Class
(
ClassDescription nvarchar(50) not null,
ClassID nchar(6) not null constraint pk_Class_ClassID primary key(ClassID)
)
go
create table Riders
(
RiderID int not null identity (10,1)
constraint pk_Riders_RiderID primary key(RiderID),
[Name] nvarchar(50) not null,
constraint chk_Riders_Name check (len(Name) > 4),
ClassID nchar(6) not null
constraint fk_Riders_Class foreign key
references Class(ClassID) on delete no action
)
go