Создание внешнего ключа между двумя таблицами в SQL - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь соединить две таблицы вместе, используя внешний ключ.Я получаю сообщение об ошибке

В ссылочной таблице нет первичных ключей, соответствующих списку столбцов ссылок

Я не уверен в том, что мне не хватает.

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

1 Ответ

0 голосов
/ 25 ноября 2018

У вас, кажется, неправильные отношения

У Class будет первичный ключ ClassID;в классе не должно быть строки с повторяющимся первичным ключом.Класс (в виде таблицы), следовательно, декодирует код вашего класса в имя класса (SNR = Senior Sport Series 1, 50CC = Fifty CC 2 Stroke Cup и т. Д.)

Для райдеров требуется внешний ключ в том столбце Riders.ClassIDссылается на Class.ClassID - столбец Classid в Riders будет иметь повторяющиеся значения (несколько гонщиков принадлежат к одному и тому же классу), но отношение, которое вы хотите применить, заключается в том, что «ни один гонщик не должен входить в неизвестный класс», то есть «ни один гонщик»запись должна иметь значение 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
...