Joe*_*ell 10 sql architecture sql-server database-design
我正在开发一个项目,我们需要让某些用户输入或更新的数据在添加到"实时数据"之前处于挂起状态.
在准备数据的同时,用户可以保存不完整的记录.虽然数据处于待处理状态,但我们不希望数据影响对编辑实时数据的用户施加的规则,例如,当输入已存在的相同数据时,处理实时数据的用户不应该遇到唯一的约束.待处理状态.
我设想将数据更新集合分组为"数据提交",当有人质量控制提交时,数据将被重新验证并更正/拒绝/批准.
我考虑了两种关于存储数据的方案:
1)将待处理状态数据保存在与实时数据相同的表中,但添加一个标志以指示其状态.我可以在这里看到问题,必须删除约束或使必需字段可以为空以支持"不完整"状态数据.然后是如何处理更新现有数据的问题,您必须为更新添加新行并将其链接回现有的"实时"行.这对我来说似乎有些混乱.
2)添加镜像活动表的新表并将数据存储在那里直到它被批准.这将允许我完全控制现有的活动表,而"待定"表可以被用户认为他想放在那里的任何东西滥用.这样做的缺点是我最终会在数据库中添加许多额外的表/ SP.我想到的另一个问题是用户如何在两条记录之间进行链接,其中链接的记录可能是活动表中的记录,也可能是挂起表中的记录,但我想在这种情况下你总是可以获取一份链接记录并将其视为更新?
这两种解决方案似乎都不完美,但第二种解决方案似乎对我来说是更好的选择 - 是否有第三种解决方案?
你的选项 2 听起来是最好的主意。如果您想使用引用完整性以及通过 DBMS 获得的所有好处,则不能将待处理的数据放在同一个表中。但是不需要非结构化数据 - 待处理数据仍然是结构化的,并且您可能希望数据库在执行规则方面发挥作用,即使是在这些数据上。即使您没有这样做,待处理的数据也非常适合标准表结构。
一组单独的表格听起来是正确的答案。您可以将要更改的行的主键放入待处理表中,以便您知道正在编辑哪个项目,或者正在链接到哪个项目。
我不完全了解您的情况,因此这可能不合适,但一个想法是有一个单独的表来存储正在进行的批量编辑,因为这样您就可以对批次进行质量控制,或将批次提交给居住。每个挂起的表都可以有一个批次键,以便您知道它属于哪个批次。您必须找到一种方法来控制对同一行的多个待处理编辑(如果您愿意),但这似乎不是一个很难解决的问题。
我不确定这是否合适,但可能值得研究“主数据管理”工具,例如 SQL Server 的主数据服务。
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |