背景的
我有几个使用SQLite数据库进行数据的项目。存储在数据库中的数据显然存储在几个表中,通过键/外键值链接。
问题在于,在这些数据库中,如果某些内容发生变化,我必须更新其他几个表。最好的例子是删除记录。我必须确保删除与被删除的记录相关的所有其他记录。现在,我相信这个例子可以使用键/外键值来解决,但是更复杂的更新呢?
现在我不是专业数据库管理员,但我知道数据库中需要数据完整性,或者事情变得很难看。
问题
所以,我的问题。我知道在以编程方式更新相关表时我有更大的控制权,但代价是人为错误和时间。我可能会错过一些或者没有正确实现表更新,并且在更新中编码需要更长的时间。另一方面,我可以放入触发器并让DB处理其他表的更新,但是我失去了很多控制权。
那么哪一个更好?在不同情况下各自更好吗?
答案 0 :(得分:1)
另一方面,我可以投入 触发并让DB处理 更新到其他表,但我 失去了很多控制权。
您认为自己失去了什么控制权?如果数据完整性要求“此类更新此处需要额外的更新那里和那里”,那么您不会失去控制权在触发器中编码。您正在集中控制,并将其委托给dbms,这是唯一可以保证每个应用程序都遵循这些要求的软件。
我知道我有更强的控制力 更新相关表时 以编程方式,但代价 人为错误和时间。我可能会想念 是或否实现表 正确更新,需要很多 在更新中编码的时间更长。
你在想程序员,而不是数据库设计师。 (这是观察,而不是批评。)不要想,“我可能会错过一些东西”。这种思维方式确实错过了标记。
相反,当您想要将数据完整性委托给应用程序代码时,请考虑“从现在开始直到时间结束时,每个程序员和每个新的或更改过的应用程序都必须完全正确。”
现在,老实说,真的听起来对你来说是个好主意吗?
(我工作过的最后一家财富500强公司,用至少二十多种不同语言编写的程序打到了他们的OLTP数据库。)