Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Triggers 在SQLite数据库中,使用tirggers处理级联表更改是更好,还是以编程方式更好?_Triggers_Sqlite_System.data.sqlite_Data Integrity - Fatal编程技术网

Triggers 在SQLite数据库中,使用tirggers处理级联表更改是更好,还是以编程方式更好?

Triggers 在SQLite数据库中,使用tirggers处理级联表更改是更好,还是以编程方式更好?,triggers,sqlite,system.data.sqlite,data-integrity,Triggers,Sqlite,System.data.sqlite,Data Integrity,背景 我有几个项目使用SQLite数据库进行数据处理。数据库中存储的数据显然是跨多个表存储的,由键/外键值链接 问题是,在这些数据库中,如果某个记录发生更改,我必须更新其他几个表。我脑海中最好的例子就是删除一条记录。我必须确保与被删除记录相关的所有其他记录也被删除。现在,我相信这个例子可以通过使用键/外键值来解决,但是更复杂的更新呢 现在我不是专业的数据库管理员,但我知道数据库中需要有数据完整性,否则事情会变得很糟糕 问题 所以,我的问题是。我知道,在以编程方式更新相关表时,我有更大的控制权,但

背景

我有几个项目使用SQLite数据库进行数据处理。数据库中存储的数据显然是跨多个表存储的,由键/外键值链接

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

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

问题

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

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

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

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

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

你的思维方式是程序员,而不是数据库设计师。(这是一种观察,而不是批评。)不要认为“我可能会错过什么”。那种思维方式真的没有达到目的

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

老实说,你觉得这真的是个好主意吗


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

你没有考虑在你的FK定义中使用<代码>删除级联< /代码>吗?触发器在正确实现时,允许您拥有始终一致的DB。但这些都不太容易正确实现,触发器通常没有多少空间来操作。如果级联要求简单明了,我会尝试删除
,并首先触发方法。正如我在问题中提到的,我知道我给出的示例可以用k/fk解决,但我想知道更复杂的表更新,比如“Name”列(不是键)是否会更改并且必须在其他地方更改。与键无关的事情。+1“从现在起到时间结束,每一个程序员和每一个访问此数据库的新的或更改的应用程序都必须完全正确。”