在SQLite数据库中,最好使用触发器来处理级联表更改,还是以编程方式更好?

时间:2011-03-04 15:11:51

标签: triggers sqlite system.data.sqlite data-integrity

背景

我有几个使用SQLite数据库进行数据的项目。存储在数据库中的数据显然存储在几个表中,通过键/外键值链接。

问题在于,在这些数据库中,如果某些内容发生变化,我必须更新其他几个表。最好的例子是删除记录。我必须确保删除与被删除的记录相关的所有其他记录。现在,我相信这个例子可以使用键/外键值来解决,但是更复杂的更新呢?

现在我不是专业数据库管理员,但我知道数据库中需要数据完整性,或者事情变得很难看。

问题

所以,我的问题。我知道在以编程方式更新相关表时我有更大的控制权,但代价是人为错误和时间。我可能会错过一些或者没有正确实现表更新,并且在更新中编码需要更长的时间。另一方面,我可以放入触发器并让DB处理其他表的更新,但是我失去了很多控制权。

那么哪一个更好?在不同情况下各自更好吗?

1 个答案:

答案 0 :(得分:1)

  

另一方面,我可以投入   触发并让DB处理   更新到其他表,但我   失去了很多控制权。

您认为自己失去了什么控制权?如果数据完整性要求“此类更新此处需要额外的更新那里那里”,那么您不会失去控制权在触发器中编码。您正在集中控制,并将其委托给dbms,这是唯一可以保证每个应用程序都遵循这些要求的软件。

  

我知道我有更强的控制力   更新相关表时   以编程方式,但代价   人为错误和时间。我可能会想念   是或否实现表   正确更新,需要很多   在更新中编码的时间更长。

你在想程序员,而不是数据库设计师。 (这是观察,而不是批评。)不要想,“我可能会错过一些东西”。这种思维方式确实错过了标记。

相反,当您想要将数据完整性委托给应用程序代码时,请考虑“从现在开始直到时间结束时,每个程序员和每个新的或更改过的应用程序都必须完全正确。”

现在,老实说,真的听起来对你来说是个好主意吗?

(我工作过的最后一家财富500强公司,用至少二十多种不同语言编写的程序打到了他们的OLTP数据库。)