У меня есть проблема нормализации данных здесь и была бы действительно благодарна за некоторые советы и указания.SQL нормализация chalange с примером
У меня есть файл 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
То, что я хочу, чтобы в конце концов, список цветов/сочетание цветов для каждого принтер. Что-то вроде этого:
Canon1:
- красный и синий
- фиолетовый
- коричневый/зеленый
Я понимаю, что я должен создавать группы (для каждой пули на список) и привязать принтеры к этим группам. А затем создавайте комбинации из цветов и грамматики. И, наконец, свяжите эти комбинации с группами. Что-то вроде этого:
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 info, и было бы плохой практикой оставлять ячейки пустыми/заполнять их чем-то бессмысленным ,
Так что только выбор состоит в том, чтобы отделить данные от другого отношения родитель-потомок, но тогда я не уверен, как обязательно наводить порядок дискретных фрагментов информации при запросе данных и, наконец, распечатать строку.
Любые виды направлений/помощи будут очень признательны.
Спасибо!
Имея пустые поля, это не обязательно плохо. –
Нормализация не вводит новые идентификационные номера, где раньше их не было. Нет такой вещи, как нормальная форма «каждая таблица имеет номер id». Могут быть веские причины вводить номера идентификаторов, но нет причин называть нормализацию этого процесса. –
@CL. Но этого следует избегать, если это возможно, не так ли? Не могли бы вы представить какой-либо пример, где предпочтительнее иметь пустые поля в таблице и хороший дизайн RDB? –