Я новичок во всех этих технических штуках, поэтому заранее извините меня за ошибки.
У меня вопрос по нормализации данных. Я использую PGadmin4 для этой задачи.
У меня есть несколько таблиц, по одной на каждый год, содержащих несколько столбцов. Я хочу нормализовать эти данные для дальнейших запросов. Данные представлены в таком виде:
Table 1
| id | name1 | code1| code2 | year|
| 1 | Peter | 111 | 222 | 2007|
Table 2
| id | name1 | code1| code2 | year|
| 2 | Peter | 111 | 223 | 2008|
Итак, мои таблицы похожи, но каждый год с некоторыми разными данными.
Я разбил его, поэтому у меня есть несколько таблиц, содержащих только один столбец информации:
name1_table
| id | name1 |
И я сделал это по каждой колонке. Теперь мне нужно связать все это воедино - я иду в правильном направлении или ушел в плохом?
Каков следующий шаг и, если возможно, какой код мне нужно использовать.
Самый простой способ объединить две таблицы с идентичными схемами - создать новую третью таблицу с той же схемой и скопировать в нее все записи.
Что-то вроде этого:
INSERT INTO Table3 SELECT * FROM Table1;
INSERT INTO Table3 SELECT * FROM Table2;
Или, если вам просто нужен результат комбинированного запроса, вы можете использовать UNION:
SELECT * FROM Table1
UNION
SELECT * FROM Table2;
SELECT
, объединяющий все данные в одну большую таблицу, поможет вам увидеть, какие столбцы имеют общие данные, которые вы можете абстрагировать в их собственную таблицу. Я бы рекомендовал использовать метод UNION
, так как он гарантирует, что обе ваши таблицы имеют одинаковый порядок столбцов. Плюс UNION
избавит от дураков. Если вы на 100% уверены, что таблицы не будут содержать дубликатов, вы можете использовать UNION ALL
, чтобы сделать это намного быстрее.
Я определенно выбрал бы один стол. Затем, если вам нужны записи только за один год, вы можете добавить «WHERE Year = 2008».
Вы нет движетесь в правильном направлении. Лучший подход - просто хранить все данные в одной таблице и использовать индексы и / или разделы для доступа к определенным строкам.
Иногда это невозможно, особенно потому, что таблицы имеют разные форматы. Возможные решения:
NULL
исключив столбцы, которых нет в таблицах хронологии.
Итак, что вы предлагаете - это создать одну большую таблицу со всеми данными за каждый год и нормализовать оттуда? - Это действительно может упростить задачу. Спасибо, что помогли мне немного нестандартно подумать.