Este é o esquema com o qual estou trabalhando:
Aqui está o DBML para recriar em https://dbdiagram.io/d :
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)
Meu objetivo:
- Uma universidade pode ter várias turmas e professores.
- Uma classe pode ter um ou nenhum professor.
- A exclusão de uma universidade exclui todos os seus professores e turmas
- Excluir um Professor define Class.ProfessorID como NULL
O último objetivo está nos causando problemas. O SQL Server impede a adição de outra restrição de chave estrangeira em cascata devido a múltiplos caminhos em cascata, e um gatilho não pode funcionar porque:
- a consulta de exclusão é rejeitada devido à restrição de chave estrangeira no Professor, portanto, um gatilho FOR DELETE nunca será executado
- O SQL não pode criar um INSTEAD OF DELETE devido ao relacionamento em cascata com a Universidade
Como posso conseguir isso?