Вот рабочий пример. Я создал таблицу AMMO
(описание которой вы не опубликовали, поэтому я использовал только столбец ID
, чтобы ограничение внешнего ключа не нарушалось). Обратите внимание на комментарии, которые я написал в коде.
SQL> create table ammo
2 ( id VARCHAR2(10),
3 CONSTRAINT pk_ammo PRIMARY KEY(id) );
Table created.
SQL> CREATE TABLE Company
2 ( id VARCHAR(3),
3 name VARCHAR(30), --> switch from CHAR to VARCHAR2
4 CONSTRAINT pk_Company PRIMARY KEY(id) );
Table created.
SQL> CREATE TABLE Weapons
2 ( id NUMBER(4),
3 name VARCHAR2(30),
4 damage NUMBER(4),
5 company_id VARCHAR2(3), --> should match COMPANY.ID datatype
6 ammo_id VARCHAR2(10), --> should match AMMO.ID datatype
7 CONSTRAINT pk_Weapons PRIMARY KEY(id),
8 CONSTRAINT fk_Weapons_company FOREIGN KEY(company_id) REFERENCES Company(id),
9 CONSTRAINT fk_Weapons_ammo FOREIGN KEY(ammo_id) REFERENCES ammo(id) );
Table created.
SQL>
В ограничении ссылочной целостности вы должны сопоставлять типы данных столбцов внешнего и первичного ключей. Нет смысла иметь VARCHAR2(10)
в таблице сведений, которая указывает на столбец VARCHAR2(3)
в основной таблице; вы все равно не сможете поместить в столбец таблицы подробностей более 3 символов (ограничение внешнего ключа не позволит вам).