嗨,我的参考文献有问题
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);
你知道什么地方出了问题吗?
谢谢。
答案 0 :(得分:1)
您正试图添加一个外键,该外键指向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专家,但是此消息至少暗示了以下内容:
CREATE / ALTER TABLE语句中的REFERENCES子句提供了一个列列表,该列列表在引用表中没有匹配的唯一或主键约束。
>
尽管从数据建模的角度来看,我仍然建议使用主键作为参考点,但您的RDBMS可能仅支持将外键添加到唯一字段中。但首先,FAKTURA
表上的该字段必须唯一:
CONSTRAINT U_ID_Pozycji UNIQUE (ID_Pozycji)