Database design 结构来处理需要批准的记录更改

Database design 结构来处理需要批准的记录更改,database-design,Database Design,在数据输入web应用程序上工作,需要授权更改。后端数据库是PostgreSQL 9.6。无需保留变更历史审核跟踪,只需保留记录的脏副本和授权的干净副本。检查其他问题,建议的解决方案似乎有点过头了 , 而使用一个时态数据库解决方案,如,显然似乎有些过头了 一个选项是每个字段有两列,一列保存干净副本,另一列保存脏副本和记录状态枚举字段。数据提供者的任何插入或修改都会写入脏字段,并且状态会相应地更改。当管理员授权更改时,脏字段值将复制到干净字段,状态更改。数据的公共视图只会选择干净的字段并过滤掉插入的

在数据输入web应用程序上工作,需要授权更改。后端数据库是PostgreSQL 9.6。无需保留变更历史审核跟踪,只需保留记录的脏副本和授权的干净副本。检查其他问题,建议的解决方案似乎有点过头了

,

而使用一个时态数据库解决方案,如,显然似乎有些过头了

一个选项是每个字段有两列,一列保存干净副本,另一列保存脏副本和记录状态枚举字段。数据提供者的任何插入或修改都会写入脏字段,并且状态会相应地更改。当管理员授权更改时,脏字段值将复制到干净字段,状态更改。数据的公共视图只会选择干净的字段并过滤掉插入的记录

这似乎有点像黑客,不符合正常化的规则。但这似乎是满足要求的最简单的解决方案。当使用一个单独的表来保存更改时,它在处理父子关系时不会出现问题,即在父记录插入之前授权子记录插入

如果有人能提出更好的设计,我将不胜感激

更新1 所以要稍微澄清一下要求。该应用程序要求授权用户可以输入有关其项目的详细信息。任何更改或添加都必须经过管理员审核,然后才允许使用。如前所述,目前无需保留变更历史记录。一个项目几乎总是由一个人编辑

使用PostgreSQL 9.6,在ORM中使用SQLAlchemy,在前端使用HTML5和jquery


希望使解决方案尽可能简单,特别是保持web界面简单。

在您的web应用程序中,具有适当权限的人会更改字段。 更改应转到一个单独的表中,该表引用了应更改的列,如果更改被授权或拒绝,还应包含一个状态列。 该表应该有1个额外的时间戳行,因为超过1个用户可能会尝试更改同一字段,当然还有一列用于更改的用户id/名称。 审阅者应该能够在web上看到更改并进行批准。 批准意味着更改该工作表中的状态列。 一个单独的脚本可以拾取工作表中的更改并更新主表。 有一点需要指出:

无需保留变更历史审核跟踪


根据我的经验,一旦你开始批准变更,此类要求可能会很快出现/变更。您应该考虑到这一点,如果不了解您的全部需求,很难说过度使用意味着什么

两列方法似乎需要相当多的代码,而且有点容易出现错误——更多的代码意味着更多的错误。在某些情况下,它还需要前端逻辑来隐藏某些列,但在其他情况下则不需要


我更喜欢单表,每更改一行,状态标志解决方案。更新单个列和插入的代码更少,而不是更新大量列,并且如果将来需求发生变化,则更容易扩展。处理前端需求更容易—显示已接受和草稿,或仅显示已接受状态。

谢谢。是的,我同意需求变化非常快。谢谢你的评论。是的,我同意多个字段可能容易出错。希望界面尽可能简单。应用程序应该只允许管理员阻止任何不希望的内容进入实时网页。