Вы пытаетесь добавить внешний ключ, который указывает на столбец ID_Pozycji
в таблице FAKTURA
:
FOREIGN KEY (ID_Pozycji) references FAKTURA (ID_Pozycji)
Но это не ключ в этой таблице, ID_Faktury
:
constraint PK_FAKTURA primary key (ID_Faktury)
Внешний ключ должен указывать на ключ на целевой таблице.Например:
FOREIGN KEY (ID_Faktury) references FAKTURA (ID_Faktury)
Вот так будет идентифицироваться запись в целевой таблице.Столбец ID_Faktury
идентифицирует запись FAKTURA
, поэтому любая таблица, которой требуется внешний ключ обратно к FAKTURA
, должна ссылаться на ID_Faktury
в этой таблице.(Хотя сам столбец внешнего ключа не обязательно должен иметь одно и то же имя, но часто рекомендуется избегать путаницы.)
И наоборот, может иметь возможность ссылаться хотя бы на уникальный столбец (если не первичный ключ).Я не эксперт по Oracle, но это сообщение, по крайней мере, подразумевает столько же:
Предложение REFERENCES в операторе CREATE / ALTER TABLE дает список столбцов, для которых нет соответствующих уникальных или ограничение первичного ключа в указанной таблице.
Несмотря на то, что я по-прежнему рекомендую использовать первичный ключ в качестве вашей точки отсчета с точки зрения моделирования данных, вполне возможно, чтоВаша СУБД может поддерживать добавление внешнего ключа в уникальное поле.Но сначала это поле в таблице FAKTURA
должно быть уникальным:
CONSTRAINT U_ID_Pozycji UNIQUE (ID_Pozycji)