使用什么,一对多约束的 CASCADE DELETE 规则或 ON DELETE 触发器?

TLa*_*ama 4 mysql sql-server delete constraint mysql-5.5

我想问一下如何处理这种关系。为了更好地查看,我试图简化并将我的情况转换为我认为 StackOverflow 问题投票的方式(对不起,如果不是:-)

在此处输入图片说明

我想添加一个带有CASCADE DELETE规则的约束,但是我不知道这种情况是否可行。另一种选择是创建一个ON DELETE触发器,所以...

我的问题是:
你更喜欢CASCADE DELETE约束规则(如果可能的话)还是ON DELETE触发器?
或者你会为这个简单的案例(想象一下 StackOverflow 的投票方案)以不同的方式创建一个数据库模型吗?

我为什么要问:
我在某处读到CASCADE DELETE约束规则在内部只是触发器,而这里的一些人根本不喜欢约束规则。我知道,很模糊的问题,但我想让我的数据库从不存在的关系记录中清除。

重要的是:
我正在创建的应用程序应该能够在 SQL Server 以及 MySQL 数据库引擎上运行,但我猜这两者都应该支持所有CASCADE DELETE约束规则和ON DELETE触发器。

谢谢!

a1e*_*x07 6

我认为您不会看到触发器和使用级联之间的性能差异。我宁愿ON CASCADE DELETE只是因为在我看来它更好地描述了模型并揭示了创作者的意图。此外,如果您以后使用一个或另一个 ORM,如果它是通过foreign key约束而不是通过触发器实现的,它将能够在实体之间建立关系(当然,我说的是“数据优先”方法)。

  • @TLama:您还应该考虑完全不使用触发器:) (3认同)
  • SQL-Server 有 [计算列](http://msdn.microsoft.com/en-us/library/ms191250.aspx) 和 [视图](http://msdn.microsoft.com/en-us/library/ aa214282%28v=sql.80%29.aspx) 可以索引,可以满足您的需要,无需使用触发器。 (2认同)