这个数据规范化政策是一个很好的实施吗?
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 时,你想保持同样的概念。
我正在开发一个数据库,它将包含来自不同应用程序的信息,其中一些多选标签在同一字段中包含多个值。
例如,最简单的情况是在一个应用程序中存在以下选择器:
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 时,你想保持同样的概念。