以下是在https://dbdiagram.io/d中重新创建的 DBML :
Table University {
ID integer [primary key]
}
Table Professor {
ID integer [primary key]
UniversityID integer [primary key, ref: > University.ID]
}
Table Class {
ID integer [primary key]
UniversityID integer [primary key, ref: > University.ID]
ProfessorID integer [null]
}
Ref: Class.(ProfessorID, UniversityID) - Professor.(ID, UniversityID)
我的目标:
- 一所大学可以有多个班级和教授。
- 一个班级可以有一位教授,或者没有教授。
- 删除一所大学会删除其所有教授和课程
- 删除教授会将 Class.ProfessorID 设置为 NULL
最后一个目标给我们带来了问题。由于存在多个级联路径,SQL Server 会阻止添加另一个级联外键约束,并且触发器无法工作,因为:
- 由于 Professor 上的外键约束,删除查询被拒绝,因此 FOR DELETE 触发器永远不会运行
- 由于与大学的级联关系,SQL 无法创建 INSTEAD OF DELETE
我怎样才能实现这个目标?