数据库设计:相同的表结构但不同的表

时间:2011-05-02 05:38:30

标签: performance database-design

我的最新项目涉及大量“暂存”数据。 就像客户注册时一样,数据存储在“customer_temp”表中,当他被验证时,数据被移动到“客户”表。

在我开始拍摄电子邮件之前,继续横行以了解我认为这是错误的,你应该在行上放一面旗帜,我总是有可能是白痴。 任何人都可以向我解释为什么这是可取的? 创建2个具有相同结构的表,填充表(表1),然后在发生特定事件时将整行移动到不同的表(表2)。

我可以理解表2是否会存储档案,非常少使用的数据。

但是我无法理解表2是否存储了可以不断变化的实时数据。

回顾一下: 任何人都可以解释这种看似适得其反的方法是错误的(或正确的)吗?

4 个答案:

答案 0 :(得分:2)

如果业务逻辑中的“客户”和“潜在客户”之间存在显着差异,则在数据库中将它们分开是有意义的(您无需始终记住按标志查询,例)。特别是如果为两者存储的数据可能在将来出现分歧。

它使报告更容易,并减少了将两种类型的实体视为同一种实体的机会。

然而,正如你所说,这确实看起来多余,可能不是大多数人设计数据库的方式。

答案 1 :(得分:0)

似乎有几个解释为什么你想要“customer_temp”。

  1. 正如您所说,将用于存档目的。为了允许分析数据,但在这种情况下,应根据一些有趣的查询来聚合历史数据。然而,它使用实时数据听起来似乎不合理

  2. 正如oded所指出的那样,可能存在一种区分客户和潜在客户的商业逻辑。

  3. 或者它可能是一项安全功能,除了存储已批准的客户外,还需要记录所有注册客户的尝试。

答案 2 :(得分:0)

每当我看到一个永久性表名“customer_temp”时,我看到一个红旗。这通常意味着某人正在处理问题,因为他们正在进行并且没有提前考虑它。

至于你描述的结构有一些优点。例如,可以对表进行不同的索引,也可以将表放在不同的文件位置以提高性能。

但通常这些优点不值得保持结构同步以进行更改的成本(将列添加到不同的表中以搜索两组依赖项等)。

如果你确实需要对它们进行不同的处理,那么通过在视图中添加一个抽象层而不是创建两个单独的模型来处理它会更好。

答案 3 :(得分:0)

我会按照您的建议使用单个表格设计。但我只知道你发布的关于这个案子的内容。在决定设计师是个白痴之前,我想知道两个表格设计可能会产生的其他后果,无论是有意还是无意。

例如,它可以减少存储新潜在客户的流程与访问现有客户群的流程之间的争用。或者它可以允许某些列在客户表中被约束为非空,并且在潜在客户表中允许为空。或者它可以允许严格控制对客户表的写访问,并且不允许来自Web的操作。

或者原始设计师可能根本没有看到您和我在单个表设计中看到的好处。