如何确保数据库中的特定数据不再被更改。
我们正在使用TSQL。在数据库内部,我们存储合同修订。它们具有以下状态:草稿/活动。当状态变为活动状态时,修订可能永远不会再被更改。修订版可以有8个活动模块(每个模块都有自己的表),每个模块都有自己的设置和子表。这会创建一个包含记录的整个表树,当合同修订版设置为活动状态时,这些记录可能永远不会更改。
理想情况下,我只是将这些记录标记为只读。但是这样的事情从今天起就不存在了。我想到的下一件事是触发器。因此,我必须将这些触发器添加到许多表中,所有表都与合同修订相关。
现在可能还有其他方法,例如仅用于存档的数据库,用户只有插入权限。因此,当合同修订版变为活动状态时,它将从一个DB移动到归档DB(允许插入)。永远不能改变(DENY UPDATE | DELETE)。
但也许还有其他一些我没有想过的巧妙选择,你做到了。也许包括CLR或者不包括。
那么如何才能有效地在我们的TSQL数据库中创建记录的树结构,这是最免维护,易于理解,快速设置,并且可以以最通用的方式应用?
答案 0 :(得分:1)
你所做的一切(触发器,授予的权利......)可能会被拥有更高权利的用户所克服,你肯定知道......
这只是为了存档这些数据吗?
我想到的一个想法是创建一个嵌套的XML,其中包含大型结构中的所有数据,并将其放在一个边表中。创建一个INSTEAD OF UPDATE,DELETE TRIGGER
,你什么都不做。让这些表格为1:1
- 相关。
您仍然可以使用此数据,但速度不如从物理表中读取。
如果需要,您甚至可以将XML转换为字符串并计算一些Hash-Code,您可以将其存储在不同的位置以检查操作。
整个过程可以在一个单独的存储过程调用中完成。