在关系 Doctor(SSN, First_Name, Last_Name), Clinic (ID, Name, Address) 和 WorksFor(Doctor_SSN,Clinic_ID) 中,添加触发器:当医生从一个诊所转移到另一个诊所时,通过插入医生的第一个来提交报告和姓氏以及新旧诊所名称进入医生转移关系。
我希望有人解释以下 SQL 代码是否正确,以及触发器和外键如何工作。
表
CREATE TABLE Doctor(
SSN INT PRIMARY KEY,
First_Name VARCHAR(50),
Last_Name VARCHAR(50),
);
CREATE TABLE Clinic(
ID INT PRIMARY KEY,
Name VARCHAR(50),
Address VARCHAR(255),
);
CREATE TABLE WorksFor(
Doctor_SSN INT REFERENCES Doctor(SSN),
Clinic_ID INT REFERENCES Clinic(ID)
);
在上面的代码中,我可以得到 Doctor 和 Clinic 表的具体图片。但是 WorksFor 关系如何工作?从我在Django 框架上工作的一点经验中,我有点了解外键是如何工作的,但除此之外,我不知道创建外键关系时数据库中会发生什么。MySQL 是否会创建一个全新的表,其中包含WorksFor 关系的Doctor 和 Clinic 表的所有属性?
然后是触发器。概念相当容易理解。我只想问您是否可以验证以下 SQL 代码是否与上面的任务描述匹配。简而言之,当旧诊所的 ID 与新诊所的 ID 不同时,我会创建一个新表,其中包含医生的名字、姓氏、旧诊所名称、新诊所名称。同样,我不完全确定外键是如何工作的。当我调用 current.Name 时,它会给我诊所的名称,因为 Clinic_ID 引用了诊所关系?和Doctor一样,下面的代码会起作用还是我错过了什么?
扳机
CREATE TRIGGER DoctorTransfer(
AFTER UPDATE ON WorksFor
REFERENCING
OLD ROW AS current
NEW ROW AS new
FOR EACH ROW
WHEN(current.Clinic_ID <=> new.Clinic_ID)
INSERT INTO doctor_transfer VALUES
VALUES(new.First_Name, new.Last_Name, current.Name as Old Clinic,
new.Name as New Clinic);