首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数据更新审批的数据库设计

用于数据更新审批的数据库设计
EN

Stack Overflow用户
提问于 2011-04-20 16:51:48
回答 4查看 3.4K关注 0票数 13

我在一个项目中工作,在这个项目中,我们需要让一些用户输入或更新的数据在被添加到‘实时数据’之前通过一个挂起的状态。

在准备数据时,用户可以保存不完整的记录。当数据处于挂起状态时,我们不希望数据影响用户编辑实时数据的规则,例如,处理实时数据的用户在输入已经处于挂起状态的相同数据时不应该遇到唯一的限制。

我设想一组数据更新将被分组到“数据提交”中,当有人对提交进行质量控制时,数据将被重新验证和更正/拒绝/批准。

关于存储数据,我考虑了两种情况:

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

2)添加镜像实时表的新表,并将数据存储在其中,直到审核通过。这将允许我完全控制现有的活动表,而“挂起”的表可以被滥用,因为用户认为他想放在那里的任何东西。这样做的缺点是,我最终会在db中得到很多额外的表/SP。我在思考的另一个问题是,用户如何链接两个记录,从而链接到的记录可能是活动表中的记录或挂起表中的记录,但我认为在这种情况下,您总是可以获取链接记录的副本,并将其视为更新。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-05 16:54:00

你的选择2听起来是最好的主意。如果您想要使用引用完整性以及DBMS带来的所有好处,就不能将挂起的数据放在同一个表中。但是没有必要存在非结构化数据-挂起的数据仍然是结构化的,并且您可能希望db在执行规则方面发挥作用,甚至在这些数据上也是如此。即使没有,挂起的数据也可以很好地适应标准的表结构。

一组单独的表听起来是正确的答案。您可以将正在更改的行的主键放入挂起的表中,这样您就可以知道正在编辑的是哪个项目,或者正在链接到哪个项目。

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-04-20 16:58:03

'Unit of work'是“数据提交”的好名字。

您可以将其序列化到不同的位置,如(非关系)面向文档的数据库,并且仅在批准时才保存到关系数据库。

取决于仍需要将多少实时数据约束应用于未经批准的数据。

票数 1
EN

Stack Overflow用户

发布于 2011-04-20 17:03:14

我认为第二种选择更好。要管理这一点,您可以使用view,它将包含这两个表,并且您可以通过View使用此结构。

另一种好方法是在单独的表中使用XML列来存储必要的数据(因为列的数量/名称未知)。您可以只创建一个包含XML列和列"Type“的表,以确定此文档与哪个表相关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5727765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档