Sql 多个相似表的规范化

Sql 多个相似表的规范化,sql,database,postgresql,Sql,Database,Postgresql,我对所有这些技术性的东西都很陌生,所以请原谅我犯了错误——事先 我的问题是关于数据规范化。我正在使用PGadmin4执行此任务 我有多个表,每年一个,包含多个列。我希望将这些数据标准化,以便进行进一步的查询。数据的格式如下: Table 1 | id | name1 | code1| code2 | year| | 1 | Peter | 111 | 222 | 2007| Table 2 | id | name1 | code1| code2 | year| | 2 | Pete

我对所有这些技术性的东西都很陌生,所以请原谅我犯了错误——事先

我的问题是关于数据规范化。我正在使用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;
你的方向不对。最好的方法是将所有数据存储在一个表中,并使用索引和/或分区访问特定行

有时这是不可能的,特别是因为表的格式不同。可能的解决办法:

  • 根据列将现有表拆分为相似性集,并为每个相似性集创建一个表
  • 根据表的最新定义创建一个表,
    NULL
    ing输出历史表中不存在的列
  • 对随时间变化的列使用JSON等工具
  • 对随时间变化的列使用诸如继承之类的功能

那么您的建议是制作一个包含每年所有数据的大表,并从中进行规范化这实际上可能会让事情变得更容易。感谢您帮助我开箱思考。
选择
将所有数据放入一个大表将有助于您查看哪些列具有公共数据,您可以将其抽象到自己的表中。我建议使用
UNION
方法,因为这样可以确保两个表的列顺序相同。另外,
UNION
将消除重复。如果您100%确定这些表不会包含重复项,那么可以使用
UNION-ALL
来加快速度。我肯定会选择单表。然后,如果只需要一年的记录,可以添加“WHERE year=2008”