#sqlplus
#sqlplus
Вопрос:
Я пытаюсь написать этот код.
create table pat_entry (
pat_no number,
pat_name varchar2(20),
pat_sex char(2) CHECK(pat_sex IN ('M', 'm', 'F', 'f') ) NOT NULL,
pat_age number(3) NOT NULL,
pat_address varchar2(100) NOT NULL,
pat_ph_no number(15) NOT NULL,
pat_entry_date date NOT NULL,
doc_name varchar(2) NOT NULL,
diagnosis varchar2(20),
d_name varchar2(20) NOT NULL,
constraint pk_patEntry_no primary key(pat_no),
constraint uk_patEntry_name UNIQUE(pat_name, diagnosis)
);
Table created.
create table pat_chkup (
pat_no number,
oc_no varchar2(20) NOT NULL,
date_of_chkup date NOT NULL,
diagnosis varchar2(20) NOT NULL,
treatment varchar2(20) NOT NULL,
status varchar2(16) CHECK(status IN ('admitted', 'operation', 'regular patient') ) NOT NULL,
constraint pk_patChkup_no primary key(pat_no),
constraint uk_patChkup_treatment UNIQUE(treatment),
foreign key(pat_no, diagnosis) REFERENCES pat_entry(pat_no, diagnosis)
);
foreign key(pat_no, diagnosis) REFERENCES pat_entry(pat_no, diagnosis),
*
Я добавил pat_no в качестве первичного ключа и диагноз в качестве уникального ключа, но это показывает мне, что у меня есть эта ошибка при создании моего внешнего ключа
ORA-02270: no matching unique or primary key for this column-list
Ответ №1:
Внешний ключ должен ссылаться на некоторый уникальный ключ (будь то первичный ключ или нет). Здесь уникальный ключ в pat_entry
есть (pat_name, diagnosis)
, но pat_chkup
ссылается (pat_no, diagnosis)
.
Просто измените одно, чтобы оно соответствовало другому (на основе того, что правильно в логике вашего приложения), и все должно быть в порядке.