我首先要澄清一下,“状态”列并不是要反映表中记录(行)所代表的真实项目的状态。相反,它旨在显示记录本身的状态。
它可以像活动/不活动一样简单,也可以像批准/删除/锁定/未决/拒绝等复杂。状态可以存储在布尔/短整数列或单字符列中,并带有true
/ 1
=活动或A
=已批准。
基本思想是在应用程序中具有回收站/类似垃圾桶的恢复支持(并在数据库中进行模拟)。如果有一个前端GUI或其他界面可以让用户“删除”记录,则它实际上不会删除表中的记录,而只是将记录状态更改为“不活动”或“已删除”。当接口获取记录时,它总是获取仅与状态为“活动”或“已批准”的条件匹配的记录。
如果用户犯了一个错误并且需要恢复“删除的”记录(从用户的角度来看),DBA可以轻松地将记录重新打回“活动”或“已批准”状态,这比搜索备份并希望找到原始记录要好。那里。或者界面本身可以让用户在单独的视图中查看已删除的记录,并根据需要还原它们,甚至永久删除它们(删除实际记录)。
我的问题:
- 这是好习惯还是坏习惯?
- 它会影响数据的规范化吗?
- 潜在的陷阱是什么?
- 有没有其他方法可以达到相同的目标?(看注释)
- 您如何让数据库仅对特定状态强制对数据执行唯一约束(但对其他状态允许任意数量的重复项)?
- 为什么数据库不提供原生的类似“回收站”的功能或表跟踪/恢复功能,所以我们可以让接口不用担心而删除实际记录?
注意:我读过有关维护单独的历史记录表的信息,但是在存储和必须生成触发器并使触发器与跟踪表的架构保持最新方面而言,这似乎更糟。