简体   繁体   中英

I have a problem with the referencing of this Script

There is an error with the referencing of table booking to person and driver. ERROR at line 17: ORA-02270: no matching unique or primary key for this column-list

I've tried almost everything please help me.

alter session set NLS_DATE_FORMAT='DD/MM/YYYY';

DROP TABLE CARSERVICE;
DROP TABLE DRIVERBEN;
DROP TABLE BENEFITS;
DROP TABLE FOLLOWUP;
DROP TABLE INCIDENT;
DROP TABLE DSESSION;
DROP TABLE TRAINING;
DROP TABLE DRIVERINS;
DROP TABLE BOOKING;
DROP TABLE DRIVER;
DROP TABLE PERSON;

CREATE TABLE PERSON
(
PID               CHAR(6) PRIMARY KEY,
PName             VARCHAR(20),
PDOB              DATE,
Sex               CHAR(1),
PMOBILE       CHAR(12)
);


CREATE TABLE DRIVER
(
DID               CHAR(6),
DGrade            CHAR(1),
DCarId            CHAR(6),
DLicense          CHAR(8),
DStart            DATE,
DIPlan            CHAR(1),
DSession         CHAR(6),
DNRIC             CHAR(12),
PID            CHAR(6),
PRIMARY KEY (DID, DCarId),
FOREIGN KEY (DID) references PERSON(PID)
);

CREATE TABLE BOOKING
(
BookingID        CHAR(6),
PickLoc        VARCHAR(250),
DropLoc           VARCHAR(250),
TripRating        NUMBER(1),
RideFare          NUMBER(*,1),
TollOther         NUMBER(*,1),
TDate             DATE,
TTime             VARCHAR(5),
BStatus           CHAR(1),
Payment           VARCHAR(12),
IncRep            CHAR(1),
PID               CHAR(6),
DID               CHAR(6),
PRIMARY KEY(BookingID,PID,DID),
FOREIGN KEY (DID) references Driver(DID),
FOREIGN KEY (PID) references PERSON(PID)
);


CREATE TABLE DRIVERINS
(
DIID               CHAR(6) PRIMARY KEY,
PAmount            NUMBER(*,1),
PDt                DATE,
FOREIGN KEY (DIID) references DRIVER (DID)
);

CREATE TABLE TRAINING
(
TID     CHAR(6) PRIMARY KEY,
TrainingPrg        VARCHAR(50),
PrgSession         VARCHAR2(10)
);

CREATE TABLE DSESSION
(
SID               CHAR(6) PRIMARY KEY,
SDate        DATE,
TID        CHAR(6),
FOREIGN KEY (SID) references DRIVER(DID),
FOREIGN KEY (TID) references TRAINING(TID)
);





CREATE TABLE INCIDENT
(
INCID              CHAR(6) PRIMARY KEY,
RIncident          VARCHAR(30),
IncDate            DATE,
FOREIGN KEY (INCID) references BOOKING(BookingID)
);

CREATE TABLE FOLLOWUP
(
FollowID              CHAR(6) PRIMARY KEY,
IncPIC                VARCHAR(30),
FollowUpDt            VARCHAR2(50),
IncStatus             CHAR(1),
FollowUpDate    DATE,
FOREIGN KEY (FollowID) references INCIDENT(INCID)
);

CREATE TABLE BENEFITS
(
BID                CHAR(6) PRIMARY KEY,
CMedBenefit        NUMBER(*,1),
OBetterCars        NUMBER(*,1),
PrepRet            NUMBER(*,1)
);

CREATE TABLE DRIVERBEN
(
DBID               CHAR(6),
CMedBenefit        CHAR(1),
OBetterCars        CHAR(1),
PrepRet            CHAR(1),
FOREIGN KEY (DBID) references DRIVER(DID)
);


CREATE TABLE CARSERVICE
(
CarID                 CHAR(6) PRIMARY KEY,
CarType               VARCHAR(20),
ServRem               VARCHAR(250),
CarServDate           DATE,
NextServD             DATE,
FOREIGN KEY (CarID) references DRIVER(DCarId)
);

You have these definitions:

CREATE TABLE DRIVER (
    . . .
    PRIMARY KEY (DID, DCarId),
    . . .
);

CREATE TABLE BOOKING (
    . . 
    FOREIGN KEY (DID) references Driver(DID),
    . . .
);

These are inconsistent. The primary key for Driver has two component keys. The foreign key reference only uses one. You need to reference both.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM