Doctor(SSN、First_Name、Last_Name)、Clinic(ID、Name、Address)、およびWorksFor(Doctor_SSN、Clinic_ID)の関係で、トリガーを追加します。医師が1つのクリニックから別のクリニックに移動するときに、医師の最初のクリニックを挿入してレポートを提出します。と姓、および新旧の診療所名をdoctor_transfer関係に追加します。
次の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)
);
上記のコードでは、DoctorandClinicテーブルの具体的な画像を取得できます。しかし、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);