SQL 约束混乱

SQL Constraints Confusion

我现在有点混乱,我有一个名为 Avatars 的 Table,它有一个名为 Family 的外键。现在,在家庭 table 中,我有两个外键,称为母亲和父亲 - 现在这是令人困惑的一点,在母亲和父亲 Table 中,有一个外键称为 Avatar_ID 这当然是头像的主键 table。我不确定 SQL PLUS 是否允许这样做。

每当我尝试输入 tables 'Family, Mother or Father' 时,我总是收到 error:ORA-02291: integrity constraint (SG304.FK_FATHER_ID) violated - parent key not found .

有什么办法解决这个问题吗?还是我必须完全更改我的代码?下面是代码示例。

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');

提前感谢您提供的任何帮助! (:

外键引用父table中的记录。在您的 INSERT 语句中,您将值 ' - ' 插入到列 parent_id 中。在此错误消息中,oracle 通知您 table family 的列 family_id 中没有值为 ' - ' 的记录。据我了解,您正在尝试将 ' - ' 用作 'absence of value'。这有特殊的价值 - 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 生成唯一值。另外,我不知道问题的细节,但是 table 中的 "family relations" 看起来有点复杂。你可以用一个 table:

来描述它
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);