创建具有多个外键的表

问题描述 投票:0回答:1

当我尝试创建一个包含 1 PK 和 3 FK 的表时。但遇到以下错误。

代码1

SQL:

CREATE TABLE Rent
(
    cardID number,
    itemID varchar2(10),
    appropriationDate DATE,
    returndate DATE,

    CONSTRAINT Rent_pk  
        PRIMARY KEY(cardID, itemID),
    CONSTRAINT Rent_fk 
        FOREIGN KEY (cardID) REFERENCES Card(cardID),
    CONSTRAINT Rent_fk 
        FOREIGN KEY (itemID) REFERENCES Book(bookID),
    CONSTRAINT Rent_fk 
        FOREIGN KEY (itemID) REFERENCES Videos(videoID)
);

错误:

错误报告

ORA-02270: 此列列表没有匹配的唯一键或主键 02270. 00000 - “此列列表没有匹配的唯一键或主键”

*原因:CREATE/ALTER TABLE 语句中的 REFERENCES 子句给出的列列表在引用的表中没有匹配的唯一键或主键约束。
*操作:使用 ALL_CONS_COLUMNS 目录视图查找正确的列名称

代码2

CREATE TABLE Employees
(
    employeeID number,
    name varchar2(40),
    address varchar2(40),
    empphone number(9),
    paycheck number(8,2),
    username varchar2(10),
    password varchar2(20),
    cardnumber number,
    branchname varchar2(40),

    CONSTRAINT Employees_pk 
        PRIMARY KEY(employeeID),
    CONSTRAINT Employees_fk 
        FOREIGN KEY (cardnumber) REFERENCES Card(cardID),
    CONSTRAINT Employees_fk 
        FOREIGN KEY (branchname) REFERENCES Branch(bname)
);

错误报告

ORA-02264: 名称已被现有约束使用
02264. 00000 - “名称已被现有约束使用”
*原因:指定的约束名称必须是唯一的。
*操作:为约束指定唯一的约束名称。

如何添加多个外键?请帮助我

sql oracle foreign-keys primary-key
1个回答
0
投票

错误

ORA-02270
告诉您您尝试创建的外键与引用表中的唯一或主键约束不匹配。

在您的代码中,

itemID
字段引用
Book
Videos
表。看来您正在尝试强制
itemID
可以是
bookID
videoID
。标准 SQL 外键约束不直接支持这一点。

您可以通过为

RentBook
RentVideo
创建单独的表,或者在
Rent
表中引入单独的类型字段来解决此问题。

CREATE TABLE Rent
(
    cardID number,
    itemID varchar2(10),
    itemType varchar2(10) CHECK (itemType IN ('Book', 'Video')),
    appropriationDate DATE,
    returndate DATE,

    CONSTRAINT Rent_pk  
        PRIMARY KEY(cardID, itemID),
    CONSTRAINT Rent_card_fk 
        FOREIGN KEY (cardID) REFERENCES Card(cardID),
    CONSTRAINT Rent_book_fk 
        CHECK (itemType = 'Book' AND itemID IN (SELECT bookID FROM Book)),
    CONSTRAINT Rent_video_fk 
        CHECK (itemType = 'Video' AND itemID IN (SELECT videoID FROM Videos))
);

错误

ORA-02264
告诉您约束名称在模式中必须是唯一的。在给定的代码中,您对两个外键约束使用了名称
Employees_fk
,这导致了错误。只需给它们起一个独特的名字,如下所示:

CREATE TABLE Employees
(
    employeeID number,
    name varchar2(40),
    address varchar2(40),
    empphone number(9),
    paycheck number(8,2),
    username varchar2(10),
    password varchar2(20),
    cardnumber number,
    branchname varchar2(40),

    CONSTRAINT Employees_pk 
        PRIMARY KEY(employeeID),
    CONSTRAINT Employees_card_fk 
        FOREIGN KEY (cardnumber) REFERENCES Card(cardID),
    CONSTRAINT Employees_branch_fk 
        FOREIGN KEY (branchname) REFERENCES Branch(bname)
);
© www.soinside.com 2019 - 2024. All rights reserved.