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

时间:2017-01-19 21:29:39

标签: sql database database-normalization

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

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

*QMNAME

Anther有这个:

You are: Lord
         Lady

最后,我在集中式数据库(DataWarehouse)中需要的是每个客户的标准化表格。

You are: Monsieur
         Madame

我认为在我在源中开发此数据的标准化时规范化这些数据,最好的策略是创建辅助表来保存我的规范化数据(customer_id | customer_name | customer_type -------------------------------------------- 1 | John | Sir 2 | Sia | Madame )和{{1}的关系}应用程序的数据。

例如:

我的标准化预期值

output

我的输入预期值

input

我的关系表

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

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

在这种情况下,如果我有两个应用程序在开始时进行规范化,我可以创建我的规范化期望值表而没有任何复杂性,然后我可以在发现新值时添加输入预期值,然后我在关系中将其关联起来表格不会对规范化过程产生任何影响。

此外,我可以使用这三个表来生成所有多重选择器的所有规范化过程,例如:

街道多重选择器:

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

另:

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

我的标准化预期值

You live: Str
          Ave

我的输入预期值

You live: St
         Av

我的关系表

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

这个实现是否足够好并且符合我的要求?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这个计划对我来说很好。我有两年在数据仓库中进行自定义分析的经验。我会添加一个默认映射,因此您可以轻松地标记新值而不使用NULL,我会在用于映射的表上添加源列,但除此之外,这似乎是一个很好的计划。

答案 2 :(得分:1)

总体而言,该计划似乎没问题。也许正常化的第一件事:没有列意味着不止一件事。

实际上,大多数时候都会使用1对多。基本上:

表标题

ID  |  Desc
 1  |   Sir
 2  | Madam

表人

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

只有标题被添加到Title表中。只有人员在人员表中,但标题ID可以是标题中的任何内容。做许多人时,你想保持同样的概念。