【问题标题】:Oracle Problems with Composite Keys组合键的 Oracle 问题
【发布时间】:2015-03-28 19:48:00
【问题描述】:

这里有点令人困惑的问题: 我正在尝试从复合 PK 创建复合 FK。我会向您展示我遇到问题的表;

CREATE TABLE Weapons (
Weapon_ID VARCHAR(10) NOT NULL,
Weapon_Name VARCHAR(30),
Range_In_Meters INT,
Maximum_Number_Of_Uses INT,
Damage_Factor INT,
Cost INT,
primary key(Weapon_ID));

CREATE TABLE WeaponInventory (
Inventory_ID VARCHAR(30) NOT NULL,
WeaponInventory_ID Varchar(10) NOT NULL,
Weapon_ID VARCHAR(10) REFERENCES Weapons(Weapon_ID) NOT NULL,
primary key(Inventory_ID, WeaponInventory_ID));

CREATE TABLE Avatars (
Avatar_ID VARCHAR(10) NOT NULL,
Avatar_Name VARCHAR(30),
AvA_DOB DATE,
Age VARCHAR(30),
Gender VARCHAR(30),
Strength_Indicated INT,
Hoard INT,
Avatar_Level VARCHAR(30),
Skill VARCHAR(30),
Original_Owner VARCHAR(30),
Family_ID VARCHAR(10) NOT NULL,
Species_ID VARCHAR(10) NOT NULL,
Inventory_ID VARCHAR(30) NOT NULL,
Weapon_ID VARCHAR(10) NOT NULL,
Player_ID VARCHAR(10) NOT NULL,
PRIMARY KEY (Avatar_ID),
FOREIGN KEY (Inventory_ID, Weapon_ID)
REFERENCES WeaponInventory (Inventory_ID, Weapon_ID));

在表 Avatars 中,我一直在尝试创建这个外键,但我没有运气。我有如下错误:

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

和:

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

任何帮助将不胜感激!我只是一直感到困惑并最终在同一个地方! (:

【问题讨论】:

    标签: sql oracle foreign-keys ddl


    【解决方案1】:

    我认为您计划在表 WeaponInventory 中引用列 WeaponInventory_ID(而不是 Weapon_ID):

    FOREIGN KEY (Inventory_ID, Weapon_ID)
    REFERENCES WeaponInventory (Inventory_ID, WeaponInventory_ID) -- see here
    

    注意Weapon_ID不是WeaponInventory中PK的一部分:

    CREATE TABLE WeaponInventory (
      Inventory_ID VARCHAR(30) NOT NULL,
      WeaponInventory_ID Varchar(10) NOT NULL,
      Weapon_ID VARCHAR(10) REFERENCES Weapons(Weapon_ID) NOT NULL,
      primary key(Inventory_ID, WeaponInventory_ID) -- Weapon_ID is not part of PK
    );
    

    检查这个Fiddle

    【讨论】:

    • 啊!我再次尝试这样做,我不敢相信它成功了!通过一次又一次地更改记事本中的代码,我让自己有点困惑......所以我这样做并且让自己感到沮丧。但是谢谢你指出这一点,向你致敬(:
    • 没问题,我很乐意提供帮助:D
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多