Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 标识符无效,但我没有';我不想向表中添加其他外键,但它';他不让我_Sql_Database_Oracle_Key - Fatal编程技术网

Sql 标识符无效,但我没有';我不想向表中添加其他外键,但它';他不让我

Sql 标识符无效,但我没有';我不想向表中添加其他外键,但它';他不让我,sql,database,oracle,key,Sql,Database,Oracle,Key,以粗体显示错误。我做错了什么?我不想将其他主键添加到表中…那么我如何让它工作呢?我需要表只引用DonType,而不是表中的其他外键 CREATE TABLE PROGRAMS (PROGNAME NVARCHAR2 (30) NOT NULL, PRIMARY KEY (PROGNAME)); CREATE TABLE CAMPUS (CAMPNAME NVARCHAR2 (6) NOT NULL, Q1 NUMBER (10, 2), Q2 NUMBER (10,

以粗体显示错误。我做错了什么?我不想将其他主键添加到表中…那么我如何让它工作呢?我需要表只引用DonType,而不是表中的其他外键

 CREATE TABLE PROGRAMS
    (PROGNAME NVARCHAR2 (30) NOT NULL,
    PRIMARY KEY (PROGNAME));

CREATE TABLE CAMPUS 
(CAMPNAME NVARCHAR2 (6) NOT NULL, 
 Q1 NUMBER (10, 2),
 Q2 NUMBER (10, 2),
 Q3 NUMBER (10, 2),
 Q4 NUMBER (10, 2),
 PRIMARY KEY (CAMPNAME));

CREATE TABLE LOCATED_AT
(PROGNAME NVARCHAR2 (30) NOT NULL,
CAMPNAME NVARCHAR2 (15) NOT NULL,
PRIMARY KEY (PROGNAME, CAMPNAME),
FOREIGN KEY (PROGNAME)
REFERENCES PROGRAMS
ON DELETE CASCADE,
FOREIGN KEY (CAMPNAME)
REFERENCES CAMPUS 
ON DELETE CASCADE);

CREATE TABLE DONOR
(DONNAME NVARCHAR2 (22) NOT NULL,
DONTYPE NVARCHAR2 (1) NOT NULL,
PROJECT NVARCHAR2 (15),
PRIMARY KEY (DONNAME, DONTYPE));

CREATE TABLE COMMITTEE_MEMBER
(CMNAME NVARCHAR2 (20) NOT NULL,
DONTYPE NVARCHAR2 (1) NOT NULL,
Q1 NUMBER (10, 2),
Q2 NUMBER (10, 2),
Q3 NUMBER (10, 2),
Q4 NUMBER (10, 2),
PRIMARY KEY (CMNAME, DONTYPE),
FOREIGN KEY (DONTYPE)
**REFERENCES DONOR**
ON DELETE CASCADE);

CREATE TABLE DONATION_TYPE
(DONTYPE NVARCHAR2 (1) NOT NULL,
Q1 NUMBER (10, 2),
Q2 NUMBER (10, 2),
Q3 NUMBER (10, 2),
Q4 NUMBER (10, 2),
PRIMARY KEY (DONTYPE),
FOREIGN KEY (DONTYPE)
REFERENCES DONOR
ON DELETE CASCADE);

CREATE TABLE CONTRIBUTION 
(CMNAME NVARCHAR2 (22) NOT NULL,
PROGNAME NVARCHAR2 (30) NOT NULL,
DONNAME NVARCHAR2 (22) NOT NULL,
AMOUNT NUMERIC (10, 2) NOT NULL,
DATE_ NVARCHAR2 (6) NOT NULL,
PRIMARY KEY (CMNAME, PROGNAME, DONNAME, AMOUNT, DATE_),
FOREIGN KEY (CMNAME, PROGNAME) 
REFERENCES COMMITTEE_MEMBER 
ON DELETE CASCADE, 
FOREIGN KEY (PROGNAME)
REFERENCES PROGRAMS
ON DELETE CASCADE,
FOREIGN KEY (DONTYPE)
REFERENCES DONOR
ON DELETE CASCADE);

一个表只能有一个主键。但您可以添加多个唯一的关键点约束。如果将它们指定为NOTNULL,则它们的行为与主键相同。为了创建外键约束,必须在reference表上创建唯一键(或主键)约束。也可以将此约束创建为禁用,然后还可以在其中包含dublicate值。

如果只想引用一列,可以按以下方式执行:

FOREIGN KEY (DONTYPE)
REFERENCES DONOR(DONTYPE)
但您只能引用包含唯一值的列。因此,您必须将主键更改为仅一列,或使用以下命令向引用的表(列)添加
unique
约束:

CREATE TABLE DONOR
(DONNAME NVARCHAR2 (22) NOT NULL,
DONTYPE NVARCHAR2 (1) NOT NULL,
PROJECT NVARCHAR2 (15),
PRIMARY KEY (DONNAME, DONTYPE),
CONSTRAINT dontype_unique UNIQUE (DONTYPE));

我将使用一个
DONOR\u TYPE
单独的表,并使
DONOR
和其他表引用它。但是您只能引用包含唯一值的列。-通常是,但可以禁用唯一关键点约束。那么可能有多个值啊,我在你的回答中读到了。这对我来说是新鲜事,真的很有趣。是否可以引用已禁用的唯一约束?是的,但有一个主要限制,外键约束也必须禁用。也许这并不能解决你的问题。