2015-03-29 2 views
0

Я сейчас немного смешался, у меня есть таблица под названием Avatars, у которой есть внешний ключ под названием Family. Теперь, в семейной таблице, у меня есть два внешних ключа, называемых Мать и Отец. Теперь это путающий бит, как в таблицах Матери и Отца, есть внешний ключ под названием Avatar_ID, который, конечно же, является Первичным ключом к таблице Аватаров , Я не уверен, что это возможно даже в SQL PLUS.SQL Constraints Confusion

Всякий раз, когда я пытаюсь войти в таблицы «Семья, мать или отец», я продолжаю получать ошибку: ORA-02291: ограничение целостности (SG304.FK_FATHER_ID) нарушено - родительский ключ не найден.

Есть ли способ обойти это? Или мне придется полностью изменить свой код? Ниже приведен пример кода.

CREATE TABLE Avatars (
Avatar_ID VARCHAR(10) NOT NULL, 
Avatar_Name VARCHAR(30), 
AvA_DOB DATE, 
Age VARCHAR(30), 
Gender VARCHAR(30), 
Strength_Indicated INT, 
Hoard INT, 
Avatar_Level VARCHAR(30), 
Skill VARCHAR(30), 
Original_Owner VARCHAR(30), 
Family_ID VARCHAR(10) NOT NULL, 
Species_ID VARCHAR(10) NOT NULL, 
Inventory_ID VARCHAR(30) NOT NULL, 
Weapon_ID VARCHAR(10), 
Player_ID VARCHAR(10) NOT NULL, 
PRIMARY KEY (Avatar_ID)); 

CREATE TABLE Family (
Family_ID VARCHAR(10) NOT NULL, 
Mother_ID VARCHAR(10) NOT NULL, 
Father_ID VARCHAR(10) NOT NULL, 
primary key(Family_ID) 
); 

CREATE TABLE Mother (
Mother_ID VARCHAR(10) NOT NULL, 
Avatar_ID VARCHAR(10) NOT NULL, 
primary key(Mother_ID) 
); 

CREATE TABLE Father (
Father_ID VARCHAR(10) NOT NULL, 
Avatar_ID VARCHAR(10) NOT NULL, 
primary key(Father_ID) 
); 

ALTER TABLE Avatars 
ADD CONSTRAINT fk_Family_ID 
FOREIGN KEY (Family_ID) 
REFERENCES Family(Family_ID); 

ALTER TABLE Family 
ADD CONSTRAINT fk_Mother_ID 
FOREIGN KEY (Mother_ID) 
REFERENCES Mother(Mother_ID); 

ALTER TABLE Family 
ADD CONSTRAINT fk_Father_ID 
FOREIGN KEY (Father_ID) 
REFERENCES Father(Father_ID); 

ALTER TABLE Father 
ADD CONSTRAINT fk_Avatar_ID 
FOREIGN KEY (Avatar_ID) 
REFERENCES Avatars(Avatar_ID); 

ALTER TABLE Mother 
ADD CONSTRAINT fk_Avatars_ID 
FOREIGN KEY (Avatar_ID) 
REFERENCES Avatars(Avatar_ID); 

INSERT INTO Avatars (Avatar_ID,Avatar_Name,AvA_DOB,Age,Gender,Strength_Indicated,Hoard,Avatar_Level, Skill, Original_Owner, Family_ID,Species_ID,Inventory_ID,Player_ID) VALUES 
('Ava01','Verda','20-JAN-2014','1 year 2 months','Female','100','20','Master','Leader',' - ',' - ','DRA1','MasterInventory','Player07'); 

Заранее благодарим за любую помощь! (:

ответ

1

Внешний ключ ссылается на запись в родительской таблице В вашем INSERT заявления вы вставляете значение ' - ' в столбец parent_id В этом сообщении об ошибке оракул сообщает вам, что нет никаких записей со значением ' - ' в колонке family_id из.. . таблица family Как я понимаю, вы пытаетесь использовать ' - ' как «отсутствие значения» Существует особое значение для этого - NULL так что вам нужно написать заявление, как:..

INSERT INTO Avatars (Avatar_ID, Avatar_Name, AvA_DOB, 
    Age, Gender, Strength_Indicated, Hoard, Avatar_Level, Skill, 
    Original_Owner, Family_ID, Species_ID, Inventory_ID, Player_ID) 
VALUES ('Ava01', 'Verda', '20-JAN-2014', '1 year 2 months' ,'Female', 
    '100', '20', 'Master', 'Leader', NULL, NULL, 'DRA1', 
    'MasterInventory', 'Player07'); 

также я могу Рекомендуем внести некоторые изменения в вашу схему. Прежде всего, используйте number тип данных для первичных ключей - он позволяет использовать sequences для генерации уникальных значений. Кроме того, я не знаю подробностей проблемы, но «семейные отношения» в ваших таблицах выглядят немного сложнее. Вы можете описать его в одном столе:

create table family_tree (
    person_id number primary key, 
    father_id number, 
    mother_id number, 
    sex char(1), 
    name varchar2(50), 
    family_name varchar2(50)); 

add constraint fk_mother_id foreign key (mother_id) 
references family_tree (person_id); 

add constraint fk_father_id foreign key (father_id) 
references family_tree (person_id); 
+0

Спасибо! Я переделал свою кодировку, это было просто очень запутанно. Спасибо за рекомендацию, я использовал это! (: – user3191460