Ошибка ограничения целостности Oracle SQL, первичный ключ не найден - PullRequest
0 голосов
/ 15 октября 2019

довольно плохо знаком с SQL, не уверен, почему возникает эта ошибка, меня попросили использовать alter, чтобы добавить столбцы и внешний ключ в таблицу животных, ссылающуюся на название вида таблицы видов. Я не могу найти способ обойти это, любая помощь приветствуется. спасибо:)

вот мой запрос на удаление таблиц и создание таблиц:

DROP TABLE AnimalSale;

DROP TABLE Animal;

DROP TABLE Customer;

DROP TABLE Species;

CREATE TABLE Animal(   
   animalID NUMBER(4),   
   animalName VARCHAR2(50), 
   PRIMARY KEY (animalID) 
);

CREATE TABLE Customer(   
   custID NUMBER(4),   
   custName VARCHAR2(50),   
   custEmail VARCHAR2(50),   
    PRIMARY KEY (custID)   
);

CREATE TABLE AnimalSale(      
    animalID NUMBER(4),      
    custID NUMBER(4),      
    PRIMARY KEY (animalID, custID)   
);

CREATE TABLE Species(   
    speciesCode NUMBER(6),   
    speciesName VARCHAR2(30) UNIQUE,   
    speciesPrice DECIMAL(5,2),   
    PRIMARY KEY (speciesCode)   
);

Мой запрос на изменение, мой лектор сказал мне, что часть ограничения неверна, но я все еще не могу понять, в чем делои она не дает мне ответ :(

ALTER TABLE Animal ADD speciesName VARCHAR2(30);

ALTER TABLE Animal ADD CONSTRAINT fk_species_name FOREIGN KEY (speciesName) REFERENCES Species(speciesName);

Вставить таблицу запроса:

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '1', 'Tiny', 'Dog');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '2', 'Prince', 'Dog');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '3', 'CJ', 'Cat');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '4', 'Sid', 'Cat');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '5', 'Sid', 'Snake');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '6', 'Danger', 'Mouse');

INSERT INTO Animal (animalID, animalName, speciesName) VALUES( '7', 'Bonnie', 'Dog');

INSERT INTO Customer (custID, custName, custEmail) VALUES( '1', 'D.Smith', 'dsmith@yahoo.co.uk');

INSERT INTO Customer (custID, custName, custEmail) VALUES( '2', 'B.Bryne', 'bb@gmail.com');

INSERT INTO Customer (custID, custName, custEmail) VALUES( '3', 'X.Dobbs', 'xb@gmail.com');

INSERT INTO AnimalSale (animalID, custID) VALUES( '1', '1');

INSERT INTO AnimalSale (animalID, custID) VALUES( '2', '2');

INSERT INTO AnimalSale (animalID, custID) VALUES( '3', '2');

INSERT INTO AnimalSale (animalID, custID) VALUES( '4', '3');

INSERT INTO AnimalSale (animalID, custID) VALUES( '5', '2');

INSERT INTO Species (speciesCode, speciesName, speciesPrice) VALUES ('1', 'Dog', '9.99');

INSERT INTO Species (speciesCode, speciesName, speciesPrice) VALUES ('2', 'Cat', '10.20');

INSERT INTO Species (speciesCode, speciesName, speciesPrice) VALUES ('3', 'Snake', '20.00');

INSERT INTO Species (speciesCode, speciesName, speciesPrice) VALUES ('4', 'Mouse', '5.00');

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

меня попросили использовать alter для добавления столбцов и внешнего ключа в таблицу животных, ссылающуюся на название вида таблицы видов

Ошибка, которую я получаю при запуске вашего скрипта:

ORA-02291: ограничение целостности (FIDDLE_LVXOXDENESSERWXORCJT.FK_SPECIES_NAME) нарушено - родительский ключ не найден

db <> fiddle

ДляРешив ее, я просто поменял местами операторы вставки, чтобы значения были вставлены в таблицу species, прежде чем пытаться вставить значения в таблицу animal, чтобы можно было выполнить ссылку на внешний ключ.

db <> fiddle

Примечание: операторы INSERT были обернуты в анонимный блок PL? SQL просто для простоты, и поэтому все они могут быть выполнены в одномзаявление;Вы можете в равной степени запустить каждый в отдельности.

0 голосов
/ 15 октября 2019

В идеале, или, возможно, ваш лектор хочет, чтобы внешний ключ таблицы animal ссылался на первичный ключ таблицы species.

Сделайте это:

ALTER TABLE Animal ADD species_FK NUMBER(6);

ALTER TABLE Animal ADD CONSTRAINT fk_species_id FOREIGN KEY (species_FK) REFERENCES Species(speciesCODE);

В insertиспользуйте таблицу speciescode из species во вновь добавленный столбец таблицы животных.

Приветствия !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...