Нормализация нескольких похожих таблиц - PullRequest
0 голосов
/ 01 мая 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

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

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

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

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

Примерно так:

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

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

SELECT * FROM Table1
UNION
SELECT * FROM Table2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...