如何处理这个数据库架构?

时间:2012-12-16 02:16:40

标签: database database-design

使用SO作为一个主要示例,假设某个问题的questionanswer被删除,但在删除之前获得了一些上升选票。我想这些点仍然授予作者(如果它们不是,假设它们是),那么SO如何保持准确的声誉总数?

问题/答案是否实际上从数据库本身删除,并且可能有一个处理的状态字段,并决定问题或答案是否可见?

或者,它们实际上已被删除,而且声誉依赖于系统在每次投票时都是连续准确的,并且不一定有历史记录(如记录投票的问题)

1 个答案:

答案 0 :(得分:1)

据我所知,SO使用了软删除和硬删除的组合。我可以肯定地说,我已经失去了海报或主持人删除的问题所获得的声誉。然而,这不是你问题的重点,所以......

如果您希望能够推断出一个准确的总数,特别是如果您希望能够计算总数(通过查看您的积分历史记录可以让您做到的方式)那么您需要保持交易信息,而不是一个总计。

如果要为点的事务日志提供参照完整性,则需要使用软删除机制来隐藏“已删除”的问题。

如果您没有保留事务日志,并且没有软删除问题来备份事务点日志,那么您将无法重新计算或证明总计。您还将更难以显示随时间推移而获得的积分图和随时间累积的声誉。您可以通过保留每日点快照来完成这些图表,但这在存储方面会比仅仅跟踪上下投票更加繁重和昂贵。