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

Sql Oracle DB无法创建显示“的表”;ORA-02270:此列列表没有匹配的唯一或主键“;,sql,oracle,Sql,Oracle,我试图在ORACLE中创建带有外键和主键的表,但它显示了一个错误。 " 外键(分行ID)引用银行分行(分行ID), * 第10行出错: ORA-02270:此列列表没有匹配的唯一键或主键 FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID) * 第10行出错: ORA-02270:此列列表没有匹配的唯一键或主键 " 我不知道

我试图在ORACLE中创建带有外键和主键的表,但它显示了一个错误。 " 外键(分行ID)引用银行分行(分行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命令行显示错误。

已测试。。。这会起作用,但请阅读下面的内容

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)
);
似乎经理id对应于员工id。。。 看起来他们可能是一家银行分行的不止一名经理。。 基本上,我认为应该从银行分支机构中删除经理id,而应该创建经理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) 
 );

但是您需要调整“Employees”的设置,可能还需要为经理添加一个表。

外键约束必须仅链接到另一个表中的主键约束;也可以将其定义为引用另一个表中唯一约束的列

在bank_branchs表中,您创建了一个复合主键,即包含多个列的主键

PRIMARY KEY (Branch_ID,Manager_ID)
此语句不会将Brach_ID和Manager_ID作为主键,而是将它们的组合作为主键。由于外键只能引用主键或具有唯一约束的列,因此会抛出错误

尝试在这两列上添加唯一约束

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)
))


这可能会解决您的问题。

谢谢您的评论和帮助