Выпуск первичного и внешнего ключа - PullRequest
0 голосов
/ 11 декабря 2018

Привет, у меня проблема со ссылками

ALTER TABLE POZYCJA_FAKTURY
ADD (CONSTRAINT FK_ASD FOREIGN KEY (ID_Pozycji)
references FAKTURA (ID_Pozycji))
Error report -
ORA-02270: niezgodność klucza unikatowego lub głównego dla tej listy kolumn
02270. 00000 -  "no matching unique or primary key for this column-list"
*Cause:    A REFERENCES clause in a CREATE/ALTER TABLE statement
           gives a column-list for which there is no matching unique or primary
           key constraint in the referenced table.
*Action:   Find the correct column names using the ALL_CONS_COLUMNS
           catalog view

create table FAKTURA
(
ID_Faktury  number(9)   not null,
ID_Naprawy  number(9)   not null,
ID_Pozycji  number(9)   not null,
ID_Osoby_Pracownik  number(9)   not null,
ID_Osoby_Klient number(9) not null,
NR_Faktury  number(9)   not null,
Data_Faktury    date    not null,

constraint PK_FAKTURA primary key (ID_Faktury)

);

create table POZYCJA_FAKTURY
(
ID_Pozycji number(9) not null,
Ilosc   number(10)  not null,

constraint PK_POZYCJA_FAKTURY primary key (ID_Pozycji)

);


ALTER TABLE POZYCJA_FAKTURY
ADD CONSTRAINT FK_FAKTURA_POZYCJA_FAKTURY FOREIGN KEY (ID_Pozycji)
REFERENCES FAKTURA (ID_Pozycji);

У вас есть идеи, что не так?

Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

Вы пытаетесь добавить внешний ключ, который указывает на столбец 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...