Ваш синтаксис выглядит нормально.Вы не показываете DDL для ссылочных таблиц PATIENT
и DOCTOR
, однако, вероятно, ошибка возникает из-за того, что не выполняется одно из требований к внешним ключам MySQL.
Цитаты из документации :
Соответствующие столбцы во внешнем ключе и ссылочном ключе должны иметь одинаковые типы данных.
Необходимо убедиться, что оба значения DOCTOR(DNo)
и PATIENT(PNo)
VARCHAR(5)
.
MySQL требует индексов для внешних ключей и ссылочных ключей.[...] Такой индекс создается в ссылочной таблице автоматически, если он не существует.
В идеале DOCTOR(DNo)
и PATIENT(PNo)
должны быть первичным ключом соответствующих таблиц.Иначе, для каждого из них должен существовать индекс (это может быть индекс из нескольких столбцов, в котором указанный столбец появляется один раз).
См. эту базу данных did fiddle для рабочего примера:
CREATE TABLE PATIENT(PNo VARCHAR(5) PRIMARY KEY);
CREATE TABLE DOCTOR(DNo VARCHAR(5) PRIMARY KEY);
CREATE TABLE APPOINTMENT(
APNo VARCHAR(5),
PNo VARCHAR(5),
DNo VARCHAR(5),
APDATE DATETIME
);
ALTER TABLE APPOINTMENT
ADD PRIMARY KEY (APNo),
ADD FOREIGN KEY (PNo) REFERENCES PATIENT(PNo),
ADD FOREIGN KEY (DNo) REFERENCES DOCTOR(DNo)
;