我确实在寻找这个问题的解决方案,但我仍然得到同样的错误..
我正在尝试将值插入PART和MANUFACTURER表中。最初,我在不知道我需要处理父表即PART的事实的情况下将值插入MANUFACTURER。所以,我做了PART然后是MANUFACTURER,但仍然没有工作:(。
这些是表格:
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表是父表?因为,其他表有PNum作为外键..我真的不明白..
任何人都知道并且可以帮助我,非常感谢。谢谢:))
答案 0 :(得分:1)
为ComponentOf
插入的值必须与PNum
表中的现有PARTS
匹配。你的关键是他们确保你没有任何“孤儿”组件。
如果您尝试插入'Null'
(注释中提到的字符串值),则无法找到“父”。但是,null
是允许的,因为它意味着特定部分不是任何其他部分的组成部分,即它没有“父”。
答案 1 :(得分:1)
插入语句INSERT INTO PART VALUES('S001', 'System-economy', 1100, 'Null')
的错误在于您尝试为{{1}中的列'NULL'
插入字符串NULL
而不是实际ComponentOf
表。
字符串PART
的问题在于'NULL'
上的FOREIGN KEY
约束引用了列ComponentOf
,这意味着列{}中的所有值{1}}也必须位于PNum
。但是,ComponentOf
中没有值PNum
,这就是它抛出错误的原因。实际'NULL'
有效,因为它表示它没有引用任何内容。