员工可以参加会议,所以我们有一个链接表:
此外,我无法触及公司表(例如,此处没有触发器)。我想拥有的是:
不幸的是我被卡住了,因为这引发了可怕的“可能导致循环或多个级联路径”。考虑到约束,如何解决这个问题呢?我想我甚至不能把两个FK都放进去,或者有一个风险,即在删除公司之后,员工或会议都无法删除,因为EmployeeMeetings中的FK会阻止这一点。正确?
彼得
答案 0 :(得分:2)
如果我是你,我会完全避免触发器和级联删除。他们总是以意想不到的方式工作。
与触发器和级联删除相比,存储过程易于理解。因此,我将创建一个存储过程,在公司之前删除会议和员工:
create procedure dbo.RemoveCompany(@companyId int)
as
delete * from employees where CompanyId = @companyId
delete * from meetings where CompanyId = @companyId
delete * from companies where Id = @companyId
作为额外的好处,存储过程会在您的数据库和应用程序之间创建一个明确的合同。
答案 1 :(得分:1)
从公司到员工,从公司到会议以及从员工到员工会议都有级联删除。 在删除EmployeeMeetings中删除的表会议后添加触发器。
create trigger Meetings_Delete on Meetings after delete
as
begin
set nocount on;
delete EmployeeMeetings
from deleted
where deleted.MeetingsID = EmployeeMeetings.MeetingsID
end