这个数据规范化政策是一个很好的实施吗?

Is this data normalization policy a good implementation?

我正在开发一个数据库,它将包含来自不同应用程序的信息,其中一些多选标签在同一字段中包含多个值。

例如,最简单的情况是在一个应用程序中存在以下选择器:

You are: Lord
         Lady

Anther 有这个:

You are: Monsieur
         Madame

最后,我在中央数据库 (DataWarehouse) 中需要的是每个客户的规范化 table。

customer_id | customer_name | customer_type
--------------------------------------------
      1     |       John    |       Sir
      2     |        Sia    |     Madame

我认为当我在源头开发这些数据的标准化时,为了标准化这些数据,最好的策略是创建辅助 tables 来保存我的标准化数据的关系(output ) 和应用程序的 input 数据。

例如:

我的标准化预期值

   id  |  value 
----------------
    1  |   Sir  
    2  | Madame 

我输入的期望值

   id  |  value 
----------------
    1  | Lord  
    2  | Lady 
    3  | Monsieur
    4  | Madame 

我的关系 table

 id | normalized_value_id | expected_value_id
----------------------------------------------
 1  |           1         |          1
 2  |           1         |          3
 3  |           2         |          2
 4  |           2         |          4

我认为在这种情况下这是正确的策略,因为我不知道确切的值,也不知道与我的预期输入和预期输出之间的确切关系,一旦这些值被规范化。 此外,我不知道要规范化的应用程序数量(可能是 2 个,也可能是 100 个)。

在这种情况下,如果我一开始有 2 个应用程序要规范化,我可以创建规范化的期望值 table 而不会出现任何复杂情况,然后我可以在发现新值时添加输入的期望值,然后我在关系 table 中对此进行了关联,而没有对规范化过程产生任何影响。

此外,我可以使用这三个 table 为所有多选器生成所有规范化过程,例如:

街道多选器:

You live: Str
          Ave

另一个:

You live: St
         Av

我的标准化预期值

   id  |  value 
----------------
    1  |   Sir  
    2  | Madame
    3  | Street
    4  | Avenue 

我输入的期望值

   id  |  value 
----------------
    1  | Lord  
    2  | Lady 
    3  | Monsieur
    4  | Madame 
    5  | Str
    6  | St
    7  | Av
    8  | Ave

我的关系 table

 id | normalized_value_id | expected_value_id
----------------------------------------------
 1  |           1         |          1
 2  |           1         |          3
 3  |           2         |          2
 4  |           2         |          4
 5  |           3         |          5
 6  |           3         |          6
 7  |           4         |          7
 8  |           4         |          8

对于我想做的事情,此实现是否足够好且一致?

您的实现只需要申请many-to-many关系。我猜这些表中的关系是 1-to-many。您应该阅读如何为 1-to-many 关系实施解决方案。

首先 - 如果您还没有检查过 ETL 过程,我会推荐它:https://en.m.wikipedia.org/wiki/Extract,_transform,_load

我觉得这个计划不错。我有两年在数据仓库中进行自定义分析的经验。我会添加一个默认映射,这样您就可以轻松地标记新值而无需使用 NULL,并且我会在您用于映射的 table 上添加一个 source-column,但除此之外这似乎是一个不错的计划。

总的来说,这个计划似乎还不错。也许规范化的第一件事:没有列意味着不止一件事。

在实践中,1-to-Many大部分时间被使用。本质上:

Table 标题

ID  |  Desc
 1  |   Sir
 2  | Madam

Table 人

ID | Name | Title
 1 | Dean |   1
 2 | Jess |   2 

其中仅将标题添加到标题 table。 person table 中只有 Persons,但 Title ID 可以是 Title 中的任何内容。在做 Many-Many 时,你想保持同样的概念。