代码之家  ›  专栏  ›  技术社区  ›  khebbie

数据库表的草稿版本

  •  5
  • khebbie  · 技术社区  · 16 年前

    我有一个带有报表表的数据库。此表表示报表数据,并具有约束。 现在这个应用程序已经被消防员使用了,他们可能需要跑掉并扑灭一些火灾。 因此,在为这个表填写数据的过程中,它们可能必须运行。 我们要做的是,当会话结束时,我们将数据保存到一个草稿表中,在该表中我们只是序列化对象图,没有约束(因为我们不知道所有内容是否都处于有效状态)。 当消防员后来想把数据拉出来的时候,我们只需要再把草稿拉出来。

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

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

    4 回复  |  直到 13 年前
        1
  •  1
  •   mavnn    16 年前

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

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

    你现在不会为英国的国税局工作,是吗?如果不是的话,听起来dk也在寻求类似的(原则上)解决这个问题的方法(我曾经在英国消防和救援部门工作过)。

        2
  •  3
  •   Jeromy Irvine    16 年前

    我不知道这是否可以作为一个模式来使用,但我认为最干净的方法是创建一个视图,对两个表进行联合并对其进行搜索。

        3
  •  1
  •   Toby Allen mercator    16 年前

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

        4
  •  1
  •   Neil McGuigan    13 年前

    我对这个问题思考了很长时间和很难,下面是我的答案:

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

    2. 使用is_draft=1关闭触发器和检查约束或ORM验证规则中的验证

    3. 许多字段必须可以为空或具有默认值。

    这有几个优点:

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

    2. 草稿及其相应的验证实体 有相同的身份证 . 为什么这很重要?

    假设您为客户开始报价。保存它。它会得到一个ID。您在Web浏览器/Quotes/ID/55中查看它。您开始编辑该引用,删除一个必需的值,因为它是错误的。你必须到隔壁去查,但你想保存它。ID号不应更改。

    如果人们在同一个文档上进行协作,并且如果文档进入或退出有效状态,那么它的ID将不断更改,这也会让人困惑。