Неверные ссылки на FOREIGN KEY - PullRequest
0 голосов
/ 28 января 2020
CREATE TABLE MEDICO (
    DNIMedico CHAR(9) NOT NULL,
    NumeroColegiado VARCHAR(200) NOT NULL,
    Nombre VARCHAR(200) NOT NULL,
    FechaNacimiento DATE NOT NULL,
    CONSTRAINT pk_MEDICO PRIMARY KEY (DNIMedico)
)

CREATE TABLE PACIENTE (
    DNIPaciente CHAR(9) NOT NULL,
    Nombre VARCHAR(200) NOT NULL,
    Direccion VARCHAR (200) NOT NULL,
    Edad INT NOT NULL,
    Peso FLOAT NOT NULL,
    Altura FLOAT NOT NULL,
    CONSTRAINT pk_PACIENTE PRIMARY KEY (DNIPaciente)
)

CREATE TABLE MEDICO_PACIENTE (
    CONSTRAINT fkMP_MEDICO FOREIGN KEY (DNIMedico) REFERENCES
    MEDICO (DNIMedico),
    CONSTRAINT fkMP_PACIENTE FOREIGN KEY (DNIPaciente) REFERENCES
    PACIENTE (DNIPaciente),
    Especialidad VARCHAR(200) NOT NULL
)

Сообщение 1769, уровень 16, состояние 1, строка 18 Внешний ключ «fkMP_MEDICO» ссылается на недопустимый столбец «DNIMedico» в ссылочной таблице «MEDICO_PACIENTE». Сообщение 1750, уровень 16, состояние 0, строка 18 Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

1 Ответ

1 голос
/ 29 января 2020

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

Следовательно:

CREATE TABLE MEDICO_PACIENTE (
    DNIMedico CHAR(9) NOT NULL,
    DNIPaciente CHAR(9) NOT NULL,
    Especialidad VARCHAR(200) NOT NULL,
    CONSTRAINT fkMP_MEDICO FOREIGN KEY (DNIMedico) REFERENCES MEDICO (DNIMedico),
    CONSTRAINT fkMP_PACIENTE FOREIGN KEY (DNIPaciente) REFERENCES PACIENTE (DNIPaciente)
);

Обратите внимание, что у каждого столбца повторения должны быть тот же тип данных и длина, что и у столбца, на который они ссылаются.

Было бы также неплохо объявить первичный ключ для таблицы MEDICO_PACIENTE. Возможно, вы хотите составной первичный ключ на (DNIMedico, DNIPaciente ):

CREATE TABLE MEDICO_PACIENTE (
    DNIMedico CHAR(9) NOT NULL,
    DNIPaciente CHAR(9) NOT NULL,
    Especialidad VARCHAR(200) NOT NULL,
    CONSTRAINT fkMP_MEDICO FOREIGN KEY (DNIMedico) REFERENCES MEDICO (DNIMedico),
    CONSTRAINT fkMP_PACIENTE FOREIGN KEY (DNIPaciente) REFERENCES PACIENTE (DNIPaciente),
    CONSTRAINT pk_MEDICO_PACIENTE  PRIMARY KEY (DNIMedico, DNIPaciente)
);

Демонстрация на DB Fiddle

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