我正在开发一个数据库,其中包含来自不同应用程序的信息,其中一些多选标记在同一个字段中包含多个值。
例如,最简单的情况是在一个应用程序中存在以下选择器:
*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
这个实现是否足够好并且符合我的要求?
答案 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可以是标题中的任何内容。做许多人时,你想保持同样的概念。