внешние ключи: количество столбцов не равно ссылочным столбцам - PullRequest
0 голосов
/ 03 мая 2018

Я получаю сообщение об ошибке от оракула, в котором говорится, что «число столбцов, на которые имеются ссылки, должно совпадать с столбцами, на которые имеются ссылки».
Я хочу, чтобы мой столбец записанный_он в таблице измерение указывал на записанный_он в таблице с именем выборка
Столбец Записано в таблице Sample должно быть частью составного ключа вместе с Scientist_Num
Ошибка исходит от
КЛЮЧЕВОЙ КЛЮЧ (Recorded_On) ССЫЛКИ Образец (Ученый, Recorded_On, Site_ID)

CREATE TABLE Sample (
Scientist_Num varchar2(5) not null,
Recorded_On date not null,
Site_ID varchar2(4) not null,
Comments clob,
Primary key (Scientist_Num, Recorded_On),
FOREIGN KEY (Scientist_Num) REFERENCES Scientist(Scientist_Num),
FOREIGN KEY (Site_ID) REFERENCES Site(Site_ID)
);

CREATE TABLE Measurement (
Site_ID varchar2(4) not null,
Recorded_On date not null,
Name varchar2(10) not null,
Value varchar2(10),
Outlier_Indicator varchar2(10),
Primary key (Site_ID, Recorded_On, Name),
FOREIGN KEY (Site_ID) REFERENCES Sample(Site_ID),
FOREIGN KEY (Recorded_On) REFERENCES Sample(Scientist, Recorded_On, Site_ID)
);    

Столбцы Scientist_Num и Recorded_On должны находиться в составном ключе вместе.
Буду очень признателен за ответ на мою проблему и объяснение того, что пошло не так.

Ответы [ 2 ]

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

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

CREATE TABLE Measurement (
    Site_ID varchar2(4) not null,
    Scientist_Num varchar2(5) not null,
----^ added for foreign key reference
    Recorded_On date not null,
    Name varchar2(10) not null,
    Value varchar2(10),
    Outlier_Indicator varchar2(10),
    Primary key (Site_ID, Recorded_On, Name),
    FOREIGN KEY (Site_ID) REFERENCES Site(Site_ID),
-------------------------------------^ Presumably you intend the site table
    FOREIGN KEY (Scientist_Num, Recorded_On) REFERENCES 
Sample(Scientist_Num, Recorded_On)
-----------------^ two columns, both need to already be defined
); 

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

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

Вы можете создать виртуальный столбец в примере таблицы:

Recorded_virtual varchar2(5) [GENERATED ALWAYS] AS 
(Scientist||Recorded_On||Site_ID) [VIRTUAL] 

И создать ссылку на этот столбец:

CONSTRAINT fk_column
 FOREIGN KEY (Recorded_On)
 REFERENCES Sample(Recorded_virtual )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...