Sql ORA-02270:此列列表没有匹配的唯一键或主键
我使用iSQLPlus创建表,当我引用多个外键时,它们会给我错误信息Sql ORA-02270:此列列表没有匹配的唯一键或主键,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,我使用iSQLPlus创建表,当我引用多个外键时,它们会给我错误信息ORA-02270: ORA-02270: no matching unique or primary key for this column-list 这是我的密码: create table People (name varchar(50), ssn varchar(50) not null, G# varchar(50), primary key (ssn), unique(ssn, G#)) create tabl
ORA-02270
:
ORA-02270: no matching unique or primary key for this column-list
这是我的密码:
create table People
(name varchar(50),
ssn varchar(50) not null,
G# varchar(50),
primary key (ssn),
unique(ssn, G#))
create table Professor
(
name varchar(50),
ssn varchar(50) not null,
G# varchar(50),
teach_record varchar(50),
primary key (ssn),
unique (ssn, G#),
foreign key (name, ssn, G#) references People(name, ssn, G#) ON DELETE CASCADE
)
它在professor脚本中“)”前面的行上显示错误,该行引用了人(姓名、ssn、G#)
我想不出是什么问题。试试这个:
create table People
(name varchar(50),
ssn varchar(50) not null,
G# varchar(50),
primary key (ssn),
unique(name, ssn, G#))
create table Professor
(
name varchar(50),
ssn varchar(50) not null,
G# varchar(50),
teach_record varchar(50),
primary key (ssn),
unique (ssn, G#),
foreign key (name, ssn, G#) references People(name, ssn, G#) ON DELETE CASCADE
)
你需要一个关于人的主键(姓名、ssn、G#)才能在上面创建外键;但是,首先为什么要复制
professor
表中的name
和G
列?由于ssn
是people
表中的主键,因此是唯一的,因此您可以将表连接在一起以获得这些值。否则,如果说某人的名字改变了(通过婚姻或其他方式),那么你必须同时更新两个表中的值,这也意味着更新主键——这通常是不可取的。这是一种ISA关系。我想说prof表继承人的属性。要创建一个FK,父键可能有一个唯一的约束,不一定是PK约束。在对象意义上是“继承”,还是关系意义上是“继承”?people(ssn)
上的一个FK仍然说教授是个人,并且会从相关的people
记录中“继承”姓名等。你并不是说教授是一个亚类型——你不能只在教授中插入记录,如果你是这个意思的话。我很可能不理解你的意思,或者你想要什么*8-)