dbms或应用程序堆栈的数据完整性

时间:2011-04-17 23:16:04

标签: database

我的问题很简单,而且更多的是我正在寻求的建议。在维护数据完整性方面有什么更好的:DBMS或应用程序代码?

示例:使用DBMS,我们可以使用触发器,事务,过程等来执行ALMOST正确的数据管理,并确保事情适合正确的位置。使用应用程序代码也可以实现。

您更喜欢哪一个?

应用程序代码或两者的组合?

1 个答案:

答案 0 :(得分:0)

通常,您希望将任何数据静态完整性烘焙到DBMS中。参考要求,数据限制(长度等),类似的东西。这个想法是DBMS本身应该(与[s]断开连接并且不依赖于它的应用程序)维护它所包含的数据的完整性和规则。

他们需要注意的是,有多个应用程序可能会使用此数据库。即使特定数据库不是这种情况,或者在可预见的未来甚至可能不是这种情况,它仍然是好的设计。并非所有应用程序都必须具有相同的业务逻辑或相同的完整性检查。 DBMS绝不应该假设已经检查了它的完整性。

应用程序应该应用业务逻辑并保持动态数据的完整性。它应该尽力防止甚至尝试将无效数据持久存储到数据库中。但是在应用程序的任何给定点上,假设它“知道”数据库中的所有其他数据可能是不合理的。应用程序可以将逻辑应用于它当前持有的小块数据,然后尝试与数据库交互以保持它。

但数据库的工作是了解和维护所有数据,而不仅仅是应用程序当前使用的内容。因此,如果应用程序可能认为它具有完美的数据,则数据库可能会根据应用程序未使用的某些其他数据的状态而不同意。数据库然后向应用程序返回错误,告诉它发送的数据存在问题,这是完全可以接受的。应用程序应该能够处理这些错误。

总结......

从应用程序的角度来看,活动数据是所有数据的一小部分,应用程序仅负责活动数据。此外,数据处于运动状态且非常流畅,是业务逻辑的更丰富逻辑模型的一部分。

从DBMS的角度来看,“活动数据”是所有数据,DBMS负责维护所有数据的完整性。通常,数据处于静止和静态状态,并且在表的任何给定快照中都应该是“良好数据”。