Нормализация нескольких похожих таблиц

Я новичок во всех этих технических штуках, поэтому заранее извините меня за ошибки.

У меня вопрос по нормализации данных. Я использую 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 |

И я сделал это по каждой колонке. Теперь мне нужно связать все это воедино - я иду в правильном направлении или ушел в плохом?

Каков следующий шаг и, если возможно, какой код мне нужно использовать.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
552
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Самый простой способ объединить две таблицы с идентичными схемами - создать новую третью таблицу с той же схемой и скопировать в нее все записи.

Что-то вроде этого:

INSERT INTO Table3 SELECT * FROM Table1;
INSERT INTO Table3 SELECT * FROM Table2;

Или, если вам просто нужен результат комбинированного запроса, вы можете использовать UNION:

SELECT * FROM Table1
UNION
SELECT * FROM Table2;

Итак, что вы предлагаете - это создать одну большую таблицу со всеми данными за каждый год и нормализовать оттуда? - Это действительно может упростить задачу. Спасибо, что помогли мне немного нестандартно подумать.

Petervingum 01.05.2018 22:51
SELECT, объединяющий все данные в одну большую таблицу, поможет вам увидеть, какие столбцы имеют общие данные, которые вы можете абстрагировать в их собственную таблицу. Я бы рекомендовал использовать метод UNION, так как он гарантирует, что обе ваши таблицы имеют одинаковый порядок столбцов. Плюс UNION избавит от дураков. Если вы на 100% уверены, что таблицы не будут содержать дубликатов, вы можете использовать UNION ALL, чтобы сделать это намного быстрее.
Shawn 01.05.2018 23:22

Я определенно выбрал бы один стол. Затем, если вам нужны записи только за один год, вы можете добавить «WHERE Year = 2008».

Neil B 02.05.2018 14:06

Вы нет движетесь в правильном направлении. Лучший подход - просто хранить все данные в одной таблице и использовать индексы и / или разделы для доступа к определенным строкам.

Иногда это невозможно, особенно потому, что таблицы имеют разные форматы. Возможные решения:

  • Разбейте существующие таблицы на наборы схожести на основе столбцов и создайте по одной таблице для каждого набора схожести.
  • Создайте таблицу на основе определения таблицы самый последний, NULL исключив столбцы, которых нет в таблицах хронологии.
  • Используйте такую ​​возможность, как JSON, для столбцов, которые менялись с течением времени.
  • Используйте такую ​​возможность, как наследование, для столбцов, которые изменились с течением времени.

Другие вопросы по теме