Как иметь разные поведения для ON DELETE на основе записи? - PullRequest
0 голосов
/ 06 ноября 2019

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

"Когда вы удаляете врача, вызывайте ошибку, если врач является главой больницы, и выполняете каскадное удаление при удалении врача, который лечит пациентов. "

Как я должен вести себя по-разному при удалении в зависимости от того, какого доктора удаляют ???

Моя первая мысль была такая, но, похоже, она не работает:

CREATE TABLE DOCTOR (
 LiscenceNumber CHAR(4) NOT NULL, 
 Firstname VARCHAR(20), 
 Lastname VARCHAR(20), 
 Specialty VARCHAR(30), 
 LiscenceDate DATE, 
 IsHead BOOLEAN, 
 HeadDate DATE, 
 HospitalCode CHAR(3), 
 FOREIGN KEY (HospitalCode) REFERENCES Hospital(Code) 
  ON DELETE CASCADE WHERE IsHead = False
)

Есть идеи? Буду очень признателен за любую помощь.

1 Ответ

1 голос
/ 06 ноября 2019

Когда вы удаляете врача, вызывайте ошибку, если врач является главой больницы, и делаете каскадное удаление при удалении врача, который лечит пациентов.

Iбудет выглядеть следующим образом:

  • создать таблицу doctors (возможно, с внешним ключом, ссылающимся на больницу, в которой они работают, но это не самое главное)

  • создать таблицу hospitals с head_doctor_id, которая ссылается на первичный ключ таблицы doctors;это ограничение не позволяет «главному» врачу быть удаленным

  • создать таблицу patients, которая ссылается на больницу и врача;внешний ключ к таблице doctors должен содержать предложение on delete, которое удаляет пациента при удалении его доктора

Пример схемы:

create table doctors(
    id int primary key,
    ...
);

create table hospitals(
    id int primary key,
    ...
    head_doctor_id int,
    foreign key(head_doctor_id) references doctors(id)
);

create table patients(
    id int primary key,
    ...
    hospital_id int,
    doctor_id int,
    foreign key(hospital_id) references hospitals(id)
    foreign key(doctor_id) references doctors(id) on delete cascade
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...