SQL 数据规范化更改示例

标签 sql database sqlite android-sqlite normalization

我在这里遇到数据规范化挑战,非常感谢一些提示和指导。

我有一个包含非常困惑数据的 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/

相关文章:

android - 错误更新或从数据库中删除; "could not execute method"

Sqlite 在日期时间上更新日期

java - SQLite 复制数据库到 Android "no such table"

mysql - SQL:根据另一列的值选择一列中的项目

SQL 行到列

sql - 将 SQL Server 数据库设置为仅允许符合 ANSI 的 SQL 代码

sql - 存储过程 : get 3 values from a table and save them to another table

mysql - 设计复杂的 SQL 结构

database - 4NF分解后新关系的主键

mysql - 表格设计建议