复合键的Oracle问题

时间:2015-03-28 19:48:01

标签: sql oracle foreign-keys ddl

这里有点令人困惑的问题: 我正在尝试从复合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:此列列表没有匹配的唯一键或主键

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

1 个答案:

答案 0 :(得分:1)

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

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

请注意,Weapon_ID不属于WeaponInventory中的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 );

{{1}}

选中Fiddle