2011-05-06 32 views
0

我有一个Excel电子表格,我将变成一个数据库来挖掘数据并构建一个交互式应用程序。大约有20列和80,000条记录。实际上,所有记录都有大约一半的列数据为空,但哪一列的数据对于每条记录都是随机的。什么是更重要的,规范化或易于编码?

的选项将是:

  1. 与表中的每个列创建一个更加标准化DB,并使用20联接,以查看所有数据。我认为好处将是一个真正没有NULL值的DB,因此它的大小会更小。其中一个主要缺点是更多的代码来更新应用程序端的每个表。

  2. 创建一个包含所有列的表的平面文件。我认为这对于应用程序端执行更新会更容易,但会导致一个表空间数据空间的对接加载。

+0

“多空字段”和规范化之间的关系是什么?如果您在2011年1月1日... 1/20/2011有80,000个不同的数据库程序员(由他们的社会安全号标识)和20列,以表明他们是否在这一天对数据库进行了规范化处理,如果稀疏 - 表。为了优化存储,你需要一个(不是二十个)表(ssn,date)。 – 2011-05-06 19:58:17

回答

2

我不明白为什么你认为更新规范化的数据库是比平坦的表更难。这是非常相反的。

考虑插入客户和产品之间的关系(基本上是一个订单)。你必须:

  1. 选择描述数据的其余部分的行,但空或某事在产品列
  2. 你有更新的产品列
  3. 你必须插入巨大的行数据库

第一次呢?你如何处理初始空值?你修改你的选择忽略它们吗?如果你想要这个空值?

如果删除最后一个产品,该怎么办?你是否将其更改为更新并为几列设置空值?


加入一旁,用标准化的表工作是琐碎通过设计。你支付其性能琐碎,这是实际的权衡。

+0

+1来抵消downvote – Oded 2011-05-06 19:56:42

+0

我不认为这会更困难,我只是认为这将需要更多的编码,为每个列单独更新而不是一行来更新更大的行。接下来的问题是更多的代码会使应用程序变得更慢,或者更大的数据库会使应用程序变慢。 – sfreelander 2011-05-06 20:16:50

+0

@sfreelander,你仍然在问错误的问题。对于整个应用程序*,非标准化数据库几乎没有比标准化数据库更好的方法*。然而像谷歌这样的大数据集群是为了查询每几个小时而对它们的数据库进行非规范化处理,但是保持其主数据库的爬虫插入规范化。这样他们就能获得两全其美的好处。 – Blindy 2011-05-06 21:52:44

1

如果你打算使用一个关系型数据库,你应该正常化你的表,如果不出意外,以缓解数据维护和确保你没有重复的数据。

您可以调查document database的存储使用情况,而不是关系数据库,但它是not the only option

+1

+1:易于使用通常是一个熟悉的问题,这真的不应该是如何处理事情的决定性因素。 – 2011-05-06 19:43:14

+0

@Downvoter - 谨慎评论? – Oded 2011-05-06 19:49:33

1

通常规范化的数据库最终会更容易编写代码,因为SQl代码在设计规范化表的时候会被忽略。

+0

恰恰相反。你最终通过db进行集成。不好。 – 2011-05-06 19:47:40

+0

@adymitruk,你的评论没有意义,并清楚地表明你对数据库编程的无知。 – HLGEM 2011-05-20 14:53:21

-4

不要标准化太多。随着应用程序的增长,很难维护一个规范模型。存储便宜。不要因为20年前有效的担忧而被误认为编码头痛。除非你需要它,否则不需要去nosql。

+0

规范化不仅仅是存储空间。这也与数据完整性有关。数据复制得越多,数据就越容易失去同步 - 在发生这种情况的时候,尝试找出哪些数据是有效的,这成了一种痛苦。 – cHao 2011-05-07 22:04:42

+0

不是。复制对于存储多个模型是必需的。将多个关注点融入到一个模型中。 – 2011-05-09 03:19:25

+0

无论如何,这听起来像一个可怕的想法。 – cHao 2011-05-09 13:00:53

1

标准化不必在所有列上进行,因此在您提供的两个选项之间存在一个中间地带。一个好的经验法则是,如果您的列的值在整个记录中重复重复,那么这些列可能是标准化为一个或多个单独表格的理想候选者。将每列放在自己的表格中并加入它们几乎肯定会过度。

相关问题