Создание таблицы - неправильно сформировано ограничение внешнего ключа - PullRequest
0 голосов
/ 28 марта 2019

Я создаю базу данных для зоопарка для проекта, и когда я пытаюсь создать таблицу "Lives" с первичным ключом из таблицы "Animals", я получаю ошибку

CREATE TABLE Department
    (DeptName       VARCHAR(35),
     DeptBuilding   VARCHAR(35),
     DeptBudget     VARCHAR(9),
     PRIMARY KEY(DeptName)
    );

CREATE TABLE Animals
    (AnimalID       CHAR(5),
     NameLatin      VARCHAR(35),
     DeptName       VARCHAR(35),
     AnimalType     VARCHAR(10),
     AnimalName     VARCHAR(10),
     PRIMARY KEY(AnimalID),
     FOREIGN KEY(DeptName) REFERENCES Department(DeptName) ON DELETE SET NULL
    );

CREATE TABLE Houses
    (HouseID        CHAR(5),
     HouseName      VARCHAR(35),
     TypeHouse      VARCHAR(10),
     DeptName       VARCHAR(35),
     PRIMARY KEY(HouseID), 
     FOREIGN KEY(DeptName) REFERENCES Department(DeptName) ON DELETE SET NULL
    );

CREATE TABLE Lives
    (AnimalID       CHAR(5),
     HouseID        CHAR(5),
     PRIMARY KEY(AnimalID, HouseID),
     FOREIGN KEY(AnimalID) REFERENCES Animals(AnimalID) ON DELETE SET NULL,
     FOREIGN KEY(HouseID) REFERENCES Houses(HouseID) ON DELETE SET NULL
    );

Я ожидал, что это создаст таблицу, но я получаю: «Ограничение внешнего ключа сформировано неправильно»

1 Ответ

1 голос
/ 28 марта 2019

Я думаю, что проблема в ON DELETE SET NULL.

. Учитывая, что AnimalID является столбцом в PRIMARY KEY из Lives, невозможно задать для столбца значение NULL.,(Ограничение PRIMARY KEY обеспечивает ограничение NOT NULL для столбцов первичного ключа.)

Попробуйте ON DELETE RESTRICT.А затем поверните его с помощью ON DELETE CASCADE.

Если мы опускаем предложения ON DELETE и ON UPDATE, действие по умолчанию - NO ACTION, которое, насколько я могу судить, действует точно так же, как если бы мыуказал RESTRICT.

...