Dave Nguyen
Dave Nguyen

Reputation: 139

Error :ORA-02270

The error I got .

FOREIGN KEY (bid)        REFERENCES ALLOCATION (bid),        * 

Error at line 8: ORA-02270: no matching unique or primary key for this column-list

Not sure how to fix it. ALLOCATION and WORKSESSION are week entities. Any helps would be appreciated.

    CREATE TABLE BOOK(
    bid          number(4),
    title        varchar2(30) CONSTRAINT NN_TITLE NOT NULL,
    sellingprice number(6,2) CONSTRAINT CHK_SELLING_PRICE CHECK(sellingprice>0),
    PRIMARY KEY  (bid)
    );

    CREATE TABLE AUTHOR(
    authorid    number(4),
    sname       varchar2(30),
    fname       varchar(30),
    PRIMARY KEY (authorid),
    CONSTRAINT UC_AUTHOR_NAME UNIQUE(sname,fname)
    );

    CREATE TABLE ALLOCATION(
    bid         number(4),
    authorid    number(4),
    payrate     number(6,2) CONSTRAINT CHK_PAY_RATE CHECK(payrate>1 AND payrate<79.99),
    PRIMARY KEY (bid,authorid),
    FOREIGN KEY (bid)      REFERENCES BOOK   (bid),
    FOREIGN KEY (authorid) REFERENCES AUTHOR (authorid)
    );

    CREATE TABLE WORKSESSION(
    bid       number(4),
    authorid  number(4),
    WorkYear  number(4)   CONSTRAINT CHK_WORKYEAR  CHECK(WorkYear<2013 AND WorkYear>2011),
    WorkWeek  number(2)   CONSTRAINT CHK_WORKWEEK  CHECK(WorkWeek>1 AND WorkWeek<52),
    WorkHours number(4,2) CONSTRAINT CHK_WORKHOURS CHECK(WorkHours>0.5 AND WorkHours<99.99),
    PRIMARY KEY (bid,authorid,WorkYear,WorkWeek),
    ***FOREIGN KEY (bid)       REFERENCES ALLOCATION (bid), 
    FOREIGN KEY (authorid) REFERENCES ALLOCATION (authorid)
    );

Upvotes: 0

Views: 88

Answers (1)

J. Chomel
J. Chomel

Reputation: 8393

Your FK must point to an existing Primary Key (PK) or Unique Key(UK);

Use this create statement for last table:

CREATE TABLE WORKSESSION(
    bid       number(4),
    authorid  number(4),
    WorkYear  number(4)   CONSTRAINT CHK_WORKYEAR  CHECK(WorkYear<2013 AND WorkYear>2011),
    WorkWeek  number(2)   CONSTRAINT CHK_WORKWEEK  CHECK(WorkWeek>1 AND WorkWeek<52),
    WorkHours number(4,2) CONSTRAINT CHK_WORKHOURS CHECK(WorkHours>0.5 AND WorkHours<99.99),
    PRIMARY KEY (bid,authorid,WorkYear,WorkWeek),
    ***FOREIGN KEY (bid)       REFERENCES ALLOCATION (bid), 
    FOREIGN KEY (bid, authorid) REFERENCES ALLOCATION (bid, authorid)
    );

Upvotes: 1

Related Questions