我在这里遇到数据规范化挑战,非常感谢一些提示和指导。
我有一个包含非常困惑数据的 excel 文件,我想将其转录到 SQLite 数据库中。我有这样的单元格(虚拟示例数据):
PRINTER COLORS_TO_CHANGE
canon1 red and blue, purple, brown/green
hp1 yellow/green, red, blue or purple
canon2 brown or black/red, blue or green and purple
epson1 red, green, blue
我将数据规范化到 3 个表中:
**tbl_printer**
printer_id printer
1 canon1
2 hp1
3 canon2
4 epson1
**tbl_colors**
color_id color
1 red
2 blue
3 green
4 brown
5 purple
6 yellow
7 black
**tbl_grammar**
grammar_id grammar
1 and
2 /
3 or
我希望最后得到每台打印机的颜色/颜色组合列表。像这样:
佳能1:
- 红色和蓝色
- 紫色
- 棕色/绿色
我知道我应该创建组(针对列表中的每个项目符号)并将打印机与这些组相关联。然后根据颜色和语法创建组合。最后将这些组合与组联系起来。像这样:
tbl_printer_groups
group_id foreign_printer_id bullet_group_id
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 3
7 3 1
8 3 2
9 4 1
10 4 2
11 4 3
然后我创建适合每个组的组合。这就是事情对我来说停止的部分。如果 tbl_colors 和 tbl_grammar 是同一张表,假设 tbl_thesame 其中来自 tbl_grammar 的数据恰好适合来自 tbl_colors 的数据,我会做类似的事情:
tbl_printergroups_to_combinations
combination_id foreign_group_id foreign_thesame_id order_in_combination
1 1 1 1
2 1 8 2
3 1 2 3
4 2 5 1
5 3 4 1
6 3 9 2
7 3 3 3
8 4 6 1
9 4 9 2
10 4 3 3
11 5 1 1
12 6 2 1
13 6 10 2
14 6 5 3
15 7 4 1
16 7 10 2
17 7 7 3
18 7 9 4
19 7 1 5
... ... ... ...
我迷路的地方是如何从 2 个单独的表中执行此操作。我不能将数据分组,我不能将外键和关系放在同一个表的不同列中,因为某些项目符号组没有 tbl_grammar 信息,将单元格留空/用无意义的东西填充它们是不好的做法.
所以唯一的选择是在另一个父子关系中分隔数据,但我不确定如何确保在查询数据并最终打印字符串时强加离散信息的顺序。
任何类型的指示/帮助将不胜感激。
谢谢!
最佳答案
我不明白为什么你需要有 tbl_grammar? 为什么每个颜色组合实际上不能在 tbl_colors 中成为单独的颜色?例如。
color_id color
1 brown or black/red
2 brown
3 black/red
等等
关于SQL 数据规范化更改示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26470466/