我在向此表添加值时遇到问题。底部的两个FK约束是引用共享相同PK的子类实体。我在适当的子类中添加了值。
Oracle正在踢这个错误:ORA-02291
我很确定导致它的原因是表无法分辨哪个表引用FK。是否有一个检查我可以运行以通过两个表来检查FK属于哪个表?
CREATE TABLE Lease(
leaseNo CHAR(9),
duration NUMBER(1) NOT NULL,
inDate DATE NOT NULL,
outDate DATE,
matNo CHAR(9),
plNo CHAR(9),
CONSTRAINT lease_pk PRIMARY KEY (leaseNo),
CONSTRAINT student_fk FOREIGN KEY (matNo) REFERENCES Student(matNo),
CONSTRAINT bedroom_fk FOREIGN KEY (plNo) REFERENCES BedRoom(plNo),
CONSTRAINT hallroom_fk FOREIGN KEY (plNo) REFERENCES HallRoom(plNo)
);
完整型号:
答案 0 :(得分:1)
您是否有能力更改架构?如果是这样,您可能需要考虑将表BedRoom
和HallRoom
折叠到单个Room
表中。然后引入RoomType
表来保存类型(' Hall'和#39; Bed')。然后,Room
的FK为RoomType
,Lease
的FK为Room
。像这样:
CREATE TABLE RoomType(
id NUMBER
,type VARCHAR2(32)
);
CREATE TABLE Room(
plno VARCHAR2(9)
,room_type VARCHAR2(32)
,rmno VARCHAR2(4)
,rent NUMBER(6,2)
,roomno VARCHAR2(9)
,CONSTRAINT room_pk PRIMARY KEY (plno)
,CONSTRAINT room_room_type_fk FOREIGN KEY(room_type) REFERENCES RoomType(id)
);
CREATE TABLE Lease(
leaseNo VARCHAR2(9),
,duration NUMBER(1) NOT NULL
,inDate DATE NOT NULL
,outDate DATE
,matNo CHAR(9)
,plNo CHAR(9)
,CONSTRAINT lease_pk PRIMARY KEY (leaseNo)
,CONSTRAINT student_fk FOREIGN KEY(matNo) REFERENCES Student(matNo)
,CONSTRAINT room_fk FOREIGN KEY(plNo) REFERENCES Room(plNo)
);
答案 1 :(得分:1)
你已经告诉 DBMS,从plno到桌子卧室和厅厅都有FK限制。所以没有“无法分辨哪个表引用FK”。 FK约束表示引用表中列出的列的值必须出现在引用表中的相应列中。当列列表是一个或更多 FK约束中的引用列表时,我们将列列表称为FK。
这是运行时错误。在将它放入Lease plno之前,您未能将一个值放入卧室或Hallroom plno之一。
请显示所有相关信息:DDL,输入表数据,运行的代码,输出表数据和错误消息。