【发布时间】:2013-12-03 10:06:08
【问题描述】:
粗体显示错误。我究竟做错了什么?我不想将其他主键添加到表中......那么我该如何让这个东西工作呢?我需要表仅引用 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);
【问题讨论】:
-
我会使用
DONOR_TYPE单独的表,并让DONOR和其余表引用它。