1

对于经常删除记录的 Web 应用程序,如果我们考虑性能,什么是最好的?

  • 检查记录是否与其他表有任何关系,并防止用户删除。

    例如:查询将是这样的

     if not exist(select * from table1 where tableX_id = @id) and 
           not exist(select * from table2 where tableX_id = @id)
           ...
        then 
           delete from tableX where id = @id 
    

    或者

  • 执行delete并让 RDBMS 由于foriegn key约束引发错误

      try{
           Service.DeleteRecord(id)
      }catch{
           Handle the error here
      }
    

    在这种情况下,查询将很简单

     delete from TableX where id = @id
    
4

3 回答 3

3

我会使用数据库触发器(或 ON CASCADE DELETE)来处理任何关系——可用的工具将取决于您的 RDBMS。

于 2012-06-08T14:11:13.367 回答
3

如果目标是仅在实际运行删除会产生错误的情况下防止行被删除,因为它被其他表引用,那么我建议您在让 SQL Server 为您检查之前检查违规行为。我已经对此进行了一些测试,让 SQL 捕获错误或仅使用 TRY/CATCH 可能会更昂贵,如果您预计即使是中等数量的失败也是如此。有了适当的索引,执行检查的额外成本可以忽略不计;但是,不进行检查的成本肯定可以忽略不计。

于 2012-06-08T14:20:37.037 回答
1

显然,执行删除并让 RDBMS 处理业务。通过自己实施检查,您将招致 RDBMS 无论如何都会执行的额外操作。

于 2012-06-08T14:09:38.713 回答