Database 数据库表的草稿版本

Database 数据库表的草稿版本,database,design-patterns,database-design,Database,Design Patterns,Database Design,我有一个带有报表表的数据库。此表表示报表数据,并具有约束条件。 现在,消防员正在使用该应用程序,他们可能不得不跑掉并扑灭一些火灾。 因此,在填充这个表的数据中间,它们可能必须运行。 我们要做的是,当会话结束时,我们将数据保存到一个草稿表中,在那里我们只需序列化对象图,而不受任何约束(因为我们无法知道是否所有内容都处于有效状态)。 当消防队员后来想把数据拿回来时,我们只需再把草稿拿出来 这个很好用! 然而,消防员现在希望能够搜索表格和草稿表格。 所以在这里,我想把所有的数据(包括草稿)存储到一个表

我有一个带有报表表的数据库。此表表示报表数据,并具有约束条件。 现在,消防员正在使用该应用程序,他们可能不得不跑掉并扑灭一些火灾。 因此,在填充这个表的数据中间,它们可能必须运行。 我们要做的是,当会话结束时,我们将数据保存到一个草稿表中,在那里我们只需序列化对象图,而不受任何约束(因为我们无法知道是否所有内容都处于有效状态)。 当消防队员后来想把数据拿回来时,我们只需再把草稿拿出来

这个很好用! 然而,消防员现在希望能够搜索表格和草稿表格。 所以在这里,我想把所有的数据(包括草稿)存储到一个表中,我搜索这个表,所以我不必合并两个表中的搜索

是否存在用于草稿的某种数据库模式?
我想要的是一种模式,用于存储无约束(草稿模式)和有约束(最终模式)的数据。

我不知道草稿的数据库模式,但如果需要验证,我建议保留单独的表,只需搜索两个表。

我不知道这是否符合模式,但我认为最干净的方法是创建一个视图,将两个表合并并进行搜索。

使用一个简单的解决方案:创建一个视图,它只是两个表的合并(这应该是相当直接的,因为我假设它们都有(几乎)相同的结构)然后,如果它们想同时包含这两个,则将其作为源运行搜索

实际上,我不会在任何时候合并完整数据和草稿数据:错误和意外使用未验证数据的可能性似乎很大


你现在不会为英国的国税局工作,是吗?如果不是的话,听起来DK对这个问题也采取了类似的(原则上)解决方案(我以前在英国的一家消防救援机构工作)。

我对这个问题想了很久,想了很久,下面是我的答案:

  • 将草稿及其相应的已验证实体存储在同一个表中。有一个草稿栏

  • 使用is_draft=1关闭触发器中的验证并检查约束或您的ORM验证规则

  • 您的许多字段必须为空或具有默认值

  • 这有几个优点:

  • 草稿及其相应的已验证实体存储在同一个表中

  • 草稿及其相应的已验证实体具有相同的id。为什么这很重要

  • 想象一下,您开始为客户报价。保存它。它获取一个id。您正在web浏览器/quotes/id/55中查看它。您开始编辑该引号,删除所需的值,因为它是错误的。你必须到隔壁去查,但你想保存它。身份证号码不应更改


    如果人们在同一个文档上进行协作,并且文档的id在有效状态进出时不断变化,这也会让人感到困惑

    这也是我第一次想到不要在IRS上工作(第:-)难道我们不需要加倍维护吗?我的意思是,如果我们在一个表中添加一列,我们就必须将它添加到另一个表(顺便说一下视图)是的,但是您必须已经这样做了,不是吗?只要两个表完全匹配,联合本身就不需要修改:只需使用“[Table1]联合[Table2];”而不指定字段名。如果使用uuid,相同的id可以复制到非草稿版本。