0

背景

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

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

现在我不是专业的数据库管理员,但我知道数据库中需要数据完整性,否则事情会变得丑陋。

问题

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

那么,哪一个更好呢?在不同的情况下每个更好吗?

4

1 回答 1

1

另一方面,我可以放入触发器并让数据库处理对其他表的更新,但我会失去很多控制权。

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

我知道以编程方式更新相关表时我有更大的控制权,但代价是人为错误和时间。我可能会遗漏一些东西或没有正确实现表更新,并且在更新中编写代码需要更长的时间。

你像程序员一样思考,而不是数据库设计师。(这是一种观察,而不是批评。)不要想,“我可能会错过一些东西”。这种思维方式真的是落伍了。

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

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

(我工作的最后一家财富 500 强公司的 OLTP 数据库中至少有两打不同语言编写的程序。)

于 2011-03-15T22:31:50.730 回答