Oracle 复合键问题

Oracle Problems with Composite Keys

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

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

在 table 头像中,我一直在尝试创建这个外键,但我没有成功。我有这样的错误:

ORA-02270: no matching unique or primary key for this column-list

和:

ORA-02270: no matching unique or primary key for this column-list

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

我认为您计划在 table 中引用 WeaponInventory_ID 列(而不是 Weapon_IDWeaponInventory:

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