【发布时间】:2017-01-29 03:16:03
【问题描述】:
我正在开发一个数据库,该数据库将包含来自不同应用程序的信息,其中一些多选标签在同一字段中包含多个值。
例如最简单的情况是在一个应用程序中存在以下选择器:
You are: Lord
Lady
花药有这个:
You are: Monsieur
Madame
最后,我需要在集中式数据库 (DataWarehouse) 中提供每个客户的标准化表格。
customer_id | customer_name | customer_type
--------------------------------------------
1 | John | Sir
2 | Sia | Madame
我认为,当我在源中开发此数据的标准化时,为了规范化这些数据,最好的策略是创建辅助表来保存我的规范化数据 (output) 和 input 数据的关系应用。
例如:
我的标准化期望值
id | value
----------------
1 | Sir
2 | Madame
我的输入期望值
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
我认为在这种情况下这是正确的策略,因为我不知道确切的值,以及一旦值标准化后与我的预期输入和预期输出的确切关系。 此外,我不知道要规范化的应用程序数量(可能是 2 个,也可能是 100 个)。
在这种情况下,如果我一开始有 2 个应用程序要规范化,我可以毫无复杂地创建规范化的预期值表,然后我可以在发现新值时添加输入的预期值,然后在关系中将其关联起来表而不会对规范化过程产生任何影响。
此外,我可以使用这三个表来生成所有多选器的所有规范化过程,例如:
街道多选器:
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
我的关系表
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
这个实现对于我想做的事情是否足够好并且一致?
【问题讨论】:
-
@philipxy 你为什么这么说?最后,您要做的是规范化数据(使用 id,您可以引用任何这些值,然后您就可以减少数据冗余)
-
数据库“规范化”减少冗余涉及用其他加入它的关系替换关系。它不涉及添加ID。 (如果有的话,那就是数据压缩。)如果您认为确实如此,则需要阅读教科书。当我第一次阅读您的消息时,我编辑了您的标题,添加了标签“数据库规范化”并评论说规范化不涉及添加 id。但是后来我认为您的意思是在系统地更改数据值的意义上“规范化”,例如在统计中,每个标签“规范化”,例如将许多输入值转换为一个规范化的值。所以我取消了这些更改。
标签: sql database database-normalization