(SQL) 违反了完整性约束 - 找不到父键
(SQL) integrity constraint violated - parent key not found
我确实查找了这个问题的解决方案,但我仍然遇到同样的错误..
我正在尝试将值插入 PART 和 MANUFACTURER tables。最初,我在不知道我需要处理父 table 即 PART 这一事实的情况下将值插入 MANUFACTURER。所以,我做了 PART 然后是 MANUFACTURER 但仍然没有工作:(.
这些是 table:
PART(PNum, PName, PUnitPrice, ComponentOf)
primary key (PNum)
foreign key (ComponentOf) references PART(PNum)
MANUFACTURER(MName, MAddress, MPhone)
primary key (MName)
candidate key (MPhone)
candidate key (MAddress)
PART-MANUFACTURED(MDate, PNum, MName, Quantity)
primary key (MName, PNum, MDate)
foreign key (PNum) references PART(PNum)
foreign key (MName) references MANUFACTURER(MName)
CUSTOMER(CNum, CName, CType)
primary key (CNum)
domain constraint ctype in ('INDIVIDUAL', 'INSTITUTION')
ORDERS(CNum, PNum, OrderDate, OrderQuantity)
primary key (CNum, PNum, OrderDate)
foreign key (CNum) references CUSTOMER(CNum)
foreign key (PNum) references PART(PNum)
创建语句:
CREATE TABLE PART(PNum VARCHAR(25) NOT NULL, PName VARCHAR(75) NOT NULL, PUnitPrice NUMBER(7,2) NOT NULL, ComponentOf VARCHAR(25), PRIMARY KEY(PNum), FOREIGN KEY(ComponentOf) REFERENCES PART(PNum));
Table created.
SQL> CREATE TABLE MANUFACTURER(MName VARCHAR(50) NOT NULL, MAddress VARCHAR(100) NOT NULL, MPhone VARCHAR(25) NOT NULL, PRIMARY KEY(MName), CONSTRAINT UK_MADDRESS Unique(MAddress), CONSTRAINT UK_MPHONE UNIQUE(MPhone));
Table created.
SQL> CREATE TABLE PARTMANUFACTURED(MDate DATE NOT NULL, PNum VARCHAR(25) NOT NULL, MName VARCHAR(50) NOT NULL, QUANTITY NUMBER(10) NOT NULL, PRIMARY KEY(MName, PNum, MDate), FOREIGN KEY(PNum) REFERENCES PART(PNum), FOREIGN KEY(MName) REFERENCES MANUFACTURER(MName));
Table created.
SQL> CREATE TABLE CUSTOMER(CNum VARCHAR(25) NOT NULL, CName VARCHAR(75) NOT NULL, CType VARCHAR(20) NOT NULL, PRIMARY KEY(CNum), CHECK(Ctype in('INDIVIDUAL','INSTITUTION')));
Table created.
SQL> CREATE TABLE ORDERS(CNum VARCHAR(25) NOT NULL, PNum VARCHAR(25) NOT NULL, OrderDate DATE NOT NULL, OrderQuantity NUMBER(7,2) NOT NULL, PRIMARY KEY(CNum, PNum, OrderDate), FOREIGN KEY(CNum) REFERENCES CUSTOMER(CNum), FOREIGN KEY(PNum) REFERENCES PART(PNum));
PNum 不是已经是主键或父键了吗? PART table 是父项 table?因为,其他 tables 有 PNum 作为外键..我真的不明白..
任何人都知道并且可以帮助我,非常感谢。谢谢:)
为 ComponentOf
插入的值必须与 PARTS
table 中的现有 PNum
匹配。你的钥匙是他们确保你没有任何 "orphaned" 组件。
如果您尝试插入 'Null'
(注释中提到的字符串值),则无法找到 "parent"。但是,null
是允许的,因为它意味着特定部分不是任何其他部分的组件,即它没有 "parent".
您的插入语句 INSERT INTO PART VALUES('S001', 'System-economy', 1100, 'Null')
的错误是您试图为 ComponentOf
中的列 ComponentOf
插入字符串 'NULL'
而不是实际的 NULL
=14=] table。
字符串 'NULL'
的问题是您在 ComponentOf
上有一个 FOREIGN KEY
约束,它引用了列 PNum
,这意味着ComponentOf
列也必须在 PNum
中。但是,PNum
中没有值 'NULL'
,所以这就是它抛出错误的原因。实际的 NULL
有效,因为这意味着它没有引用任何东西。
我确实查找了这个问题的解决方案,但我仍然遇到同样的错误..
我正在尝试将值插入 PART 和 MANUFACTURER tables。最初,我在不知道我需要处理父 table 即 PART 这一事实的情况下将值插入 MANUFACTURER。所以,我做了 PART 然后是 MANUFACTURER 但仍然没有工作:(.
这些是 table:
PART(PNum, PName, PUnitPrice, ComponentOf)
primary key (PNum)
foreign key (ComponentOf) references PART(PNum)
MANUFACTURER(MName, MAddress, MPhone)
primary key (MName)
candidate key (MPhone)
candidate key (MAddress)
PART-MANUFACTURED(MDate, PNum, MName, Quantity)
primary key (MName, PNum, MDate)
foreign key (PNum) references PART(PNum)
foreign key (MName) references MANUFACTURER(MName)
CUSTOMER(CNum, CName, CType)
primary key (CNum)
domain constraint ctype in ('INDIVIDUAL', 'INSTITUTION')
ORDERS(CNum, PNum, OrderDate, OrderQuantity)
primary key (CNum, PNum, OrderDate)
foreign key (CNum) references CUSTOMER(CNum)
foreign key (PNum) references PART(PNum)
创建语句:
CREATE TABLE PART(PNum VARCHAR(25) NOT NULL, PName VARCHAR(75) NOT NULL, PUnitPrice NUMBER(7,2) NOT NULL, ComponentOf VARCHAR(25), PRIMARY KEY(PNum), FOREIGN KEY(ComponentOf) REFERENCES PART(PNum));
Table created.
SQL> CREATE TABLE MANUFACTURER(MName VARCHAR(50) NOT NULL, MAddress VARCHAR(100) NOT NULL, MPhone VARCHAR(25) NOT NULL, PRIMARY KEY(MName), CONSTRAINT UK_MADDRESS Unique(MAddress), CONSTRAINT UK_MPHONE UNIQUE(MPhone));
Table created.
SQL> CREATE TABLE PARTMANUFACTURED(MDate DATE NOT NULL, PNum VARCHAR(25) NOT NULL, MName VARCHAR(50) NOT NULL, QUANTITY NUMBER(10) NOT NULL, PRIMARY KEY(MName, PNum, MDate), FOREIGN KEY(PNum) REFERENCES PART(PNum), FOREIGN KEY(MName) REFERENCES MANUFACTURER(MName));
Table created.
SQL> CREATE TABLE CUSTOMER(CNum VARCHAR(25) NOT NULL, CName VARCHAR(75) NOT NULL, CType VARCHAR(20) NOT NULL, PRIMARY KEY(CNum), CHECK(Ctype in('INDIVIDUAL','INSTITUTION')));
Table created.
SQL> CREATE TABLE ORDERS(CNum VARCHAR(25) NOT NULL, PNum VARCHAR(25) NOT NULL, OrderDate DATE NOT NULL, OrderQuantity NUMBER(7,2) NOT NULL, PRIMARY KEY(CNum, PNum, OrderDate), FOREIGN KEY(CNum) REFERENCES CUSTOMER(CNum), FOREIGN KEY(PNum) REFERENCES PART(PNum));
PNum 不是已经是主键或父键了吗? PART table 是父项 table?因为,其他 tables 有 PNum 作为外键..我真的不明白..
任何人都知道并且可以帮助我,非常感谢。谢谢:)
为 ComponentOf
插入的值必须与 PARTS
table 中的现有 PNum
匹配。你的钥匙是他们确保你没有任何 "orphaned" 组件。
如果您尝试插入 'Null'
(注释中提到的字符串值),则无法找到 "parent"。但是,null
是允许的,因为它意味着特定部分不是任何其他部分的组件,即它没有 "parent".
您的插入语句 INSERT INTO PART VALUES('S001', 'System-economy', 1100, 'Null')
的错误是您试图为 ComponentOf
中的列 ComponentOf
插入字符串 'NULL'
而不是实际的 NULL
=14=] table。
字符串 'NULL'
的问题是您在 ComponentOf
上有一个 FOREIGN KEY
约束,它引用了列 PNum
,这意味着ComponentOf
列也必须在 PNum
中。但是,PNum
中没有值 'NULL'
,所以这就是它抛出错误的原因。实际的 NULL
有效,因为这意味着它没有引用任何东西。