sql – 用于数据更新批准的Db设计

我正在开发一个项目,我们需要让某些用户输入或更新的数据在添加到“实时数据”之前处于挂起状态.

在准备数据的同时,用户可以保存不完整的记录.虽然数据处于待处理状态,但我们不希望数据影响对编辑实时数据的用户施加的规则,例如在输入已处于挂起状态的相同数据时,处理实时数据的用户不应该遇到唯一的约束.

我设想将数据更新集合分组为“数据提交”,当有人质量控制提交时,数据将被重新验证并更正/拒绝/批准.

我已经考虑了两种关于存储数据的方案:

1)将待处理状态数据保存在与实时数据相同的表中,但添加一个标志以指示其状态.我可以在这里看到问题,必须删除约束或使必填字段可以为空以支持“不完整”状态数据.然后是如何处理更新现有数据的问题,您必须为更新添加新行并将其链接回现有的“实时”行.这对我来说似乎有些混乱.

2)添加镜像实时表的新表并将数据存储在那里直到它被批准.这将允许我完全控制现有的活动表,而“待定”表可以被用户认为他想放在那里的任何东西滥用.这样做的缺点是我最终会在数据库添加许多额外的表/ SP.我想到的另一个问题是用户如何在两个记录之间建立链接,其中链接的记录可能是活动表中的记录,也可能是挂起表中的记录,但我想在这种情况下你总是可以获取一份链接记录并将其视为更新?

这两种解决方案似乎都不完美,但第二种似乎对我来说是更好的选择 – 是否有第三种解决方案?

解决方法

你的选择2非常听起来像是最好的主意.如果您想使用参照完整性以及使用DBMS获得的所有好处,则无法在同一个表中使用待处理数据.但是没有必要存在非结构化数据 – 待处理数据仍然是结构化的,并且可能您希望数据库在执行规则时发挥作用,即使对这些数据也是如此.即使您没有,未决数据也很适合标准表结构.

一组单独的表听起来是正确的答案.您可以将要更改的行的主键带到挂起的表中,以便了解正在编辑的项目或链接到的项目.

我不完全了解你的情况,所以这可能不合适,但一个想法是有一个单独的表来存储正在进行的批量编辑,因为那样你就可以质量控制批次,或者提交一个批次到生活.每个挂起的表都可以有一个批处理键,因此您可以知道它所属的批处理.您必须找到一种方法来控制对同一行的多个挂起编辑(如果您愿意),但这似乎不是一件难以解决的问题.

我不确定这是否适合,但可能值得研究“主数据管理”工具,如sql Server的主数据服务.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03