ORA-02270 Внешний ключ, Не могу найти ошибку - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с подключением моего Sample_Measure_FK из таблицы Sample к таблице измерений.

Там есть следующие разделы кода:

create table Sample
(
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On),
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num),
  -- the following is the problem:
  constraint Sample_Measure_FK foreign key (Recorded_On) references Measurement(Recorded_On)
);

create table Measurement
(
  Site_ID varchar2(5) not null,
  Recorded_On timestamp not null,
  Name varchar2(50),
  Value numeric(10,8),
  Outlier_Indicator varchar2(50),

  constraint Measurement_PK primary key(Site_ID, Recorded_On),

);

Полученное сообщение об ошибке:

Error starting at line : 65 in command -
create table Sample
(
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On),
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num),
  constraint Sample_Measure_FK foreign key (Recorded_On) references Measurement(Recorded_On)
)
Error report -
SQL Error: ORA-02270: no matching unique or primary key for this column-list
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

Другие внешние ключи работают, а жирный - нет.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Возможно, это наименование, но я ожидаю, что в одной выборке будет несколько измерений, предполагая, что отношение внешнего ключа находится на неправильной таблице:

create table Sample (
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On)
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num)
);


create table Measurement (
  Site_ID varchar2(5) not null,
  Recorded_On timestamp not null,
  Name varchar2(50),
  Value numeric(10, 8),
  Outlier_Indicator varchar2(50),

  constraint Measurement_Sample_FK foreign key (Site_ID, Recorded_On) references Sample(Site_ID, Recorded_On),

  constraint Measurement_PK primary key (Site_ID, Recorded_On, Name)
);

Это работает.

0 голосов
/ 23 мая 2018

Таблица Measurement должна быть создана до того, как таблица Sample

Подтвержден внешний ключ, поэтому ссылочная таблица должна уже существовать.

Внешний ключ должен указывать на первичный ключ другой таблицы

ограничение Sample_Measure_FK ссылки на внешний ключ (Recorded_On) Измерение (Recorded_On)

Скважина, Recorded_on не является первичным ключом на Measurement.В качестве альтернативы это также может быть уникальное ограничение, но это не так.

Обычно вы указываете внешние ключи на первичные ключи других таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...