数据库表的草稿版本

时间:2009-03-10 12:15:02

标签: database design-patterns database-design

我有一个包含报告表的数据库。此表表示报告数据,并具有约束。 现在应用程序被消防员使用,他们可能不得不逃跑并扑灭一些火灾。 因此,在填写此表的数据时,它们可能必须运行。 我们所做的是当会话用完时我们将数据保存到草稿表中,我们只是序列化对象图,没有约束(因为我们无法知道所有内容是否都处于有效状态)。 当消防员后来想要取回数据时,我们只需再次取出草案。

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

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

4 个答案:

答案 0 :(得分:3)

我不知道这是否有资格作为模式,但我认为最简洁的方法是创建一个视图,对两个表进行联合并搜索它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用简单的解决方案:创建一个View,它只是两个表的联合(它应该是相当直接的,因为我们假设它们都具有(几乎)相同的结构),然后对其进行搜索作为源如果他们想要包括两者。

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

你现在不会在英国的IRS界面上工作,对吗?如果没有,像DK这样的声音已经解决了这个问题的类似(原则上)(我曾经在英国消防和救援服务中工作)。

答案 3 :(得分:1)

我认为这个问题很长很难,这是我的答案:

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

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

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

  4. 这有几个好处:

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

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

    3. 假设您为客户开始报价。保存。它得到了一个id。你在网络浏览器/ quotes / id / 55中看它。您开始编辑该引用,删除所需的值,因为它是错误的。你必须去隔壁看,但你想保存它。身份证号码不应改变。

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