Sql ORA-02270:此列列表没有匹配的唯一键或主键

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

我使用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 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-)