如果 Main Table 实体被删除,则使用 FOREIGN KEY 约束删除所有记录

Delete All the records Using FOREIGN KEY Constraints if Main Table Entity is deleted

如果主要 table 的实体被删除,如何从多个 table 中删除记录,因为约束应用于所有

场景

让我给你一个场景:有一个名为 OrganizationTblOrganization 的主要 table。该组织在分支 table 中有分支 tblBranch,这些分支在 table tblApplication 中有多个应用程序。这些应用程序又被存储在 tblUsers.

中的多个用户使用

我想要的是:当我删除一个组织时,与它相关的所有分支、应用程序和用户也必须一并删除。

如何在 asp.net 网络表单中单击按钮时应用它?

现在这是我的删除功能,非常简单

Public void Delete(int? id)
{
    var str = ”DELETE FROM tblOrganization WHERE organizationId=”+ id ;
}

我的 table 看起来像这样:

CREATE TABLE tblOrganization
(
    OrganizationId int,
    OrganizationName varchar(255)
); 


CREATE TABLE tblApplication
(
     ApplicationId int,
     OrganizationId int,
     ApplicationName varchar(255)
);

CREATE TABLE tblBranches
(
    BranchId int, 
    OrganizationId int,
    BranchName varchar (255)
);

CREATE TABLE tblUsers
(
    userId int,
    OrganizationId int,
    UserName varchar(255)
);

像这样

对所有table应用约束
ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])

你不能在 ASP.NET 中 "apply" - 这是一个 数据库问题 并且你需要更改你的外键约束以包含 ON DELETE CASCADE - 像这样:

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
        ON DELETE CASCADE

这意味着:如果删除 tblOrganization 中的一行,该删除也会 级联 向下进入 tblBranchs table , 删除所有引用该组织的行。您可以对多个外键约束进行这些 ON DELETE CASCADE 设置,直至 tblUsers table。

您需要将 ON DELETE CASCADE 添加到 tblBranch、tblApplication 和 tblUsers 的约束中:

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblApplication] WITH CHECK 
    ADD CONSTRAINT [FK_tblApplication_tblBranchs] 
    FOREIGN KEY([BranchId])
    REFERENCES [dbo].[tblBranchs] ([BranchId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblUsers] WITH CHECK 
    ADD CONSTRAINT [FK_tblUsers_tblApplication] 
    FOREIGN KEY([ApplicationId])
    REFERENCES [dbo].[tblApplication] ([ApplicationId])
    ON DELETE CASCADE

现在如果您删除一个组织,数据库引擎会自动删除所有相关的子记录:

  • 如果您删除一个组织,所有相关的记录都会从 tblBranch、tblApplication 和 tblUsers 中删除。

  • 如果删除一个分支,tblApplication 和 tblUsers 的所有相关记录都将被删除。

  • 如果您删除一个应用程序,所有相关的记录都会从 tblUsers 中删除。

  • 如果您删除一个用户,则不会删除任何其他用户。