明確にするために、これは宿題の質問です。
これはリレーショナルスキーマです。
PaperInvolvement
(paperNr, academicId, paperRole
)Academic
(academicId, acadName, employer
)
したがって(academicID)
、はテーブルの主キーでAcademic
あり、テーブル(paperNr, academicId)
の主キーですPaperInvolvement
。
これが私に求められているトリガーです:
- 挿入
PaperInvolvement
後、更新 Academic
更新後オン- 同じ会社で働いている2人の学者が反対の役割で同じ論文に関与するのを防ぎます。
- ストアドプロシージャを使用するか、トリガーで完全にカバーします
このテーブルで使用できる役割は2つだけですReviewer
。Author
これは私がこれまでに行ったことです:
CREATE TRIGGER TR_PaperInvolvement_1
ON PaperInvolvement
AFTER INSERT, UPDATE
AS
IF EXISTS
(
SELECT a.academicId, paperRole, paperNr
FROM
(SELECT academicId
FROM Academic
GROUP BY employer, academicId) AS a
JOIN
(SELECT academicId, paperRole, paperNr
FROM PaperInvolvement
GROUP BY paperNr, academicId, paperRole) AS p_inv
ON a.academicId = p_inv.academicId
WHERE paperRole = 'Author' AND paperRole = 'Reviewer'
)
BEGIN
RAISERROR('Cannot have 2 Academics from the same company to work on
different roles for this paper.',16,1)
ROLLBACK TRANSACTION
END
GO
私の質問は、要件(箇条書きに記載したもの)に基づいて、これが質問に答える正しい方法ですか?