Oracle DB无法创建表显示“ORA-02270:此列列表没有匹配的唯一键或主键”

时间:2015-03-14 06:58:53

标签: sql oracle

我正在尝试使用外键和主键在ORACLE中创建表但它显示错误。 “         FOREIGN KEY(Branch_ID)REFERENCES Bank_Branchs(Branch_ID),                                                        * 第10行的错误: ORA-02270:此列列表没有匹配的唯一键或主键

    FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID)
                                                   *

第10行的错误: ORA-02270:此列列表没有匹配的唯一键或主键 “

我不知道错误的原因是什么。请看一下我的sql代码。

drop table Employees;
drop table Bank_Branchs;
drop table Departments;
drop table Job_Titles;
drop table Accounts;

CREATE TABLE Bank_Branchs(
    Branch_ID NUMBER(15) NOT NULL,
    Branch_Name VARCHAR2(15),
    Country VARCHAR2(35),
    City VARCHAR2(35),
    Phone VARCHAR2(15),
    Manager_ID NUMBER(7) NOT NULL,
    PRIMARY KEY (Branch_ID,Manager_ID)
);
CREATE TABLE Departments(
    Dept_ID CHAR(3) NOT NULL,
    Dept_Name VARCHAR2(25),
    Head_of_Dept NUMBER(7),
    PRIMARY KEY(Dept_ID)
);
CREATE TABLE Job_Titles(
    Title_ID CHAR(3)NOT NULL,
    Title_Name VARCHAR2(25),
    Title_Desc VARCHAR2(250),
    PRIMARY KEY(Title_ID)
);
CREATE TABLE Employees
   (Emp_ID NUMBER(7) NOT NULL,
    Branch_ID NUMBER(15) NOT NULL,
    Title_ID CHAR(3),
    Department_ID CHAR(3),
    Manager_ID NUMBER(7),
    Salary NUMBER(9),
    Hourly_Rate NUMBER(9),
    PRIMARY KEY(Emp_ID),
    FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID),
    FOREIGN KEY(Title_ID) REFERENCES Job_Titles (Title_ID),
    FOREIGN KEY(Department_ID) REFERENCES Departments (Dept_ID),
    FOREIGN KEY(Manager_ID) REFERENCES Bank_Branchs (Manager_ID)
);





CREATE TABLE Accounts(
    Account_ID NUMBER(7) NOT NULL,
    Branch_ID NUMBER(15) NOT NULL,
    Customer_ID NUMBER(7),
    Acc_Type char(2),
    Balance NUMBER(38),
    Rate    NUMBER(9),
    Status VARCHAR(15),
    PRIMARY KEY(Account_ID),
    FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID)
);

我尝试使用start I:/SQLNAME.sql运行它,SQL命令行显示错误。

2 个答案:

答案 0 :(得分:0)

经过测试......这会有效,但请在下面阅读......

CREATE TABLE Bank_Branchs(
    Branch_ID NUMBER(15) NOT NULL,
    Branch_Name VARCHAR2(15),
    Country VARCHAR2(35),
    City VARCHAR2(35),
    Phone VARCHAR2(15),
    Manager_ID NUMBER(7) NOT NULL,
    PRIMARY KEY (Branch_ID,Manager_ID)
);
CREATE TABLE Departments(
    Dept_ID CHAR(3) NOT NULL,
    Dept_Name VARCHAR2(25),
    Head_of_Dept NUMBER(7),
    PRIMARY KEY(Dept_ID)
);
CREATE TABLE Job_Titles(
    Title_ID CHAR(3)NOT NULL,
    Title_Name VARCHAR2(25),
    Title_Desc VARCHAR2(250),
    PRIMARY KEY(Title_ID)
);
CREATE TABLE Employees
   (Emp_ID NUMBER(7) NOT NULL,
    Branch_ID NUMBER(15) NOT NULL,
    Title_ID CHAR(3),
    Department_ID CHAR(3),
    Manager_ID NUMBER(7),
    Salary NUMBER(9),
    Hourly_Rate NUMBER(9),
    PRIMARY KEY(Emp_ID),
    FOREIGN KEY(Branch_ID, Manager_ID) REFERENCES Bank_Branchs(Branch_ID, Manager_ID),
    FOREIGN KEY(Title_ID) REFERENCES Job_Titles (Title_ID),
    FOREIGN KEY(Department_ID) REFERENCES Departments (Dept_ID)
);

似乎manager_id对应于employee_id ...... 对于个别银行分行而言,他们似乎不止一个经理。 基本上,我认为应该从bank_branches中删除manager_id,而应该创建它:

create table bank_branch_managers(
    branch_id number(14),
    manager_id number(7),
    effective_date date,
    activity_date date,
    PRIMARY KEY (branch_id, manager_id),
    FOREIGN KEY (branch_id) REFERENCES Bank_Branches(Brand_id),
    FOREIGN KEY (manager_id) REFERENCED Employees( Emp_id) 
 );

但您需要调整"员工"的设置,可能还会为经理人添加一个表格。

答案 1 :(得分:0)

FOREIGN KEY约束只能链接到另一个表中的PRIMARY KEY约束;或者它也可以定义为引用另一个表中UNIQUE约束的列。

在bank_branchs表中,您创建了一个复合主键,即由多个列组成的主键。

PRIMARY KEY (Branch_ID,Manager_ID)

此语句不会将Brach_ID和Manager_ID作为主键,而是将它们组合为主键。并且由于外键只能引用主键或具有UNIQUE约束的列,因此会引发错误。

尝试在这两列上添加UNIQUE约束。

CREATE TABLE Bank_Branchs(
Branch_ID NUMBER(15) UNIQUE NOT NULL,
Branch_Name VARCHAR2(15),
Country VARCHAR2(35),
City VARCHAR2(35),
Phone VARCHAR2(15),
Manager_ID NUMBER(7) UNIQUE NOT NULL,
PRIMARY KEY (Branch_ID,Manager_ID)

);

这可能会解决您的问题。