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