这是我要创建的表。但是,我收到了错误
SQL错误:ORA-02270:此列列表没有匹配的唯一键或主键
SQL:
create table Meets_In
(
cid char(20),
rno integer,
time char(20),
CONSTRAINT PRIM_KEY PRIMARY KEY(time),
constraint meets_fk1 foreign key(cid) references COURSES(CID),
constraint meets_fk2 foreign key(rno) references ROOMS(RNO)
);
这些是父表:
create table Courses
(
cid char(20),
cname char(20),
credits integer,
constraint CoursesKey Primary Key (cid, cname)
);
CREATE TABLE ROOMS
(
rno INTEGER,
address CHAR(20),
capacity INTEGER,
CONSTRAINT room_key PRIMARY KEY(rno)
);
我不明白为什么会收到此错误。
答案 0 :(得分:2)
原因
正如no matching unique or primary key for this column-list
所示,ORA-2270会出现错误消息。这可能是因为
现在,在COURSES
表中,CID
不是primary key
。它是cid,cname
的组合。因此,对于每个cid
,可以有多行。
现在当您将cid
作为meets_in
的外键引用时,它将无效,因为它违反了我上面提到的第二点。
解决方法
在cname
表格中添加列meets_in
。然后像下面一样使用它。
create table Meets_In
(
cid char(20) not null,
cname char(20),
rno integer not null,
time1 char(20) not null,
CONSTRAINT PRIM_KEY PRIMARY KEY(time1),
constraint meets_fk1 foreign key(cid,cname) references COURSES (cid,cname), /*Added cid,cname */
constraint meets_fk2 foreign key(rno) references ROOMS (RNO)
);
答案 1 :(得分:1)
Meets_In
充当关联表。因此,它的主键应该将外键包含在它所关联的表中。
尝试使用以下主键:cid
,cname
,rno
和time
。
正如其他人所说,courses
的主键是(cid, cname)
,因此您还需要在外键约束meets_fk1
中包含这两个键。或者,如果可能,请确保cid
仅是courses
上的主键。
(我认为time
可能是一个保留字,所以也许可以考虑重命名它。)