【问题标题】:What are some ways to map & normalize related data?有哪些方法可以映射和规范化相关数据?
【发布时间】:2010-11-09 17:40:39
【问题描述】:

假设您需要将提供给您的随机相关数据集中到更简洁的类别中。

示例 - 为您提供以下数据。 注意 - 可能有任意数量的其他相关的柱状数据:

 Customer      Product                Category
==========    =========    =================================
Customer A    Product A                 Cat 1
 CustomerA    Product B               Category 1
  Cust-A      Product C    Totally Lame & Unrelated Grouping

任务 - 将上述内容整合并规范化为干净的预定义分组:

CustomerA
  Category1
    ProductA
    ProductB
    ProductC

请不要担心完成的数据将如何持久化。而是专注于如何坚持和管理分组规则。

只有一个假设:您不能使用数据库来保存分组规则。因此,当我们说“规范化”时,我们并不是在说关系数据库规范化规则。但是,我们希望消除数据输入中的不一致(如上所示),以使随机数据进入一致状态。

那么有哪些可用选项?保持技术无关:

XML?

配置文件?

设置文件(编译与否)?

Ini 文件?

代码?

等等

列出每个答案的优缺点。虽然这确实是一个 excersize,但这是一个现实世界的问题。因此,假设您的客户/雇主已委托您完成此任务。

【问题讨论】:

  • 你应该更清楚地说明这一点......从 djna 的评论中:“你会提前知道要将数据规范化到什么,你也会知道哪些数据需要提前规范化时间”……这是什么意思?我们知道什么?一种格式?还是我们已经知道所有值并且只需要将输入与正确的值进行匹配?第二个代码块是什么?这是否意味着我们对客户和类别以及类别和产品有 1-n 关系?我们需要检测这些吗?
  • XML &c。可以被视为简单的数据存储。鉴于许多平台都有处理 XML 的库,这些(连同存储一起)构成了一个数据库。分组规则不存储在数据库中的要求背后的目的是什么?它只是为了排除 RDBMS 吗?您是否打算将规则存储设为只写?还有什么?

标签: language-agnostic data-structures normalization data-mapping


【解决方案1】:

这似乎是一个数据清理练习,完美是不可能的。问题:

1)。您可以预先指定类别,还是必须从数据中推断?

2)。我们可以使用哪些规则来接受等价?

“Cat 1”与“Category 1”相同?和“第一类”?

“猫 1”。还是“猫 1”? “猫 1”呢? ?和“Cat 12”?

只是在挑战中获得一套好的规则。

2)。你将如何捕捉这些规则?代码还是配置?如果 config 你会怎么表达呢?您最终是否只是编写一种新的特定编程语言?

【讨论】:

  • 1) & 2) 请参阅我关于“预定义”分组的文字。您将提前知道将数据规范化为什么,并且您还将提前知道需要对哪些数据进行规范化。 3)实际上是原始问题的一部分。是否应该使用配置?利弊?
【解决方案2】:

这似乎是一个数据清理练习,完美是不可能的。问题:

1)。您可以预先指定类别,还是必须从数据中推断?

2)。我们可以使用哪些规则来接受等价?

“Cat 1”与“Category 1”相同?和“第一类”?

“猫 1”。还是“猫 1”? “猫 1”呢? ?和“Cat 12”?

只是在挑战中获得一套好的规则。

3)。你将如何捕捉这些规则?代码还是配置?如果 config 你会怎么表达呢?您最终是否只是编写一种新的特定编程语言?

【讨论】:

    【解决方案3】:
    1. 每个值的字典映射。 'Cat1' => 'Category1','Category 2' => 'Category2'。这很容易存储,并且没有意外的后果。缺点是手动创建所有这些映射是实际工作。
    2. 一系列正则表达式。这样,您就可以使用相对较少的工作来捕获几乎所有规则。缺点是正则表达式相对容易“出错”,并且评估顺序很重要(即当值匹配多个“规则”时。

    至于如何坚持呢?我想不出比这更无趣的问题了。您只需使用您喜欢的编程语言中最简单的语言即可。

    【讨论】:

      猜你喜欢
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2018-01-27
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多