Mysql 如何根据条目进行不同的删除行为?

Mysql 如何根据条目进行不同的删除行为?,mysql,sql,database,Mysql,Sql,Database,我目前正在从事一项sql任务,该任务涉及医生、患者和医院的数据库。每家医院都有一名主任医生,我们需要存储该医生开始担任医院主任的日期。我可以将此信息包括在医生表、医院表或其自己的表中。我需要具备以下功能: “删除医生时,如果该医生是医院的负责人,则会导致错误发生,并在删除正在治疗患者的医生时执行级联删除。” 根据被删除的医生,我应该如何在删除时有不同的行为 我的第一个想法是这样的,但似乎不起作用: CREATE TABLE DOCTOR ( LiscenceNumber CHAR(4) NOT

我目前正在从事一项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
)
有什么想法吗?我真的很感激你的任何帮助

删除医生时,如果该医生是医院的负责人,则会导致错误发生,并在删除正在治疗患者的医生时执行级联删除

我会选择以下设计:

  • 创建一个
    doctors
    表(可能有一个外键引用他们工作的医院,但这不是最重要的事情)

  • 创建一个
    hospitals
    表,其中包含引用
    doctors
    表主键的
    head\u doctor\u id
    ;此约束防止删除“主”医生

  • 创建引用医院和医生的
    患者
    表;
    医生
    表的外键应该有一个
    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
)

您可能需要编写一个
DELETE
trigger在删除正在治疗患者的医生时执行级联删除:这意味着删除医生时,您要删除他们的患者?太棒了!谢谢你的快速回复!!如果因为一个患者可以有多个医生,我不得不实施一个治疗表会怎么样?我将如何实现上述逻辑?@jewelltaylor9430:好的,您将创建一个桥接表,如
patients\u-doctor(id,doctor\u-id,patient\u-id)
,而不是将
doctor\u-id
存储在
patients
表中,每个表都使用外键引用各自的表,并在delete cascade上引用
。删除医生(或患者)时,桥接表中相应的记录也会被删除。