我有一个具有以下结构的表:
WorkerPersons
-------------------------------
ID (PK)
PersonID (Indicates which version of Person the record describes)
SomeColumn1 (data specific to Worker)
SomeColumn2 (data specific to Person)
....
SomeColumnN
-------------------------------
如您所见,它是一张非规范化表,在一张表中同时保存了 Worker 和 Person(以及一个 Person 的多个版本)数据。我的愿望是规范化该表,但是,由于该表包含大量数据(很多列),我需要确定哪些列应该进入 Workers 表,哪些列应该进入 Persons 表。结果应该是这样的:
Workers Persons
----------------------- ---------------------
ID ID
PersonID (now a FK) PersonColumn1
WorkerColumn1 PersonColumn2
WorkerColumn2 ...
... PersonColumnN
WorkerColumnN
----------------------- ---------------------
为此,我需要分析所有唯一人员(在 WorkerPersons 中由 PersonID 分隔)的 Person 范围内哪些数据不同。例如:
WorkerPersons
-------------------------------------------------------
ID PersonID Column1 Column2 Column3
-------------------------------------------------------
1 PersonA 10.1 John Doe Single
2 PersonA 10.1 John Doe Single
3 PersonA 10.1 John Doe Married
4 PersonB 09.2 Sully Single
5 PersonB 09.2 Sullivan Single
在这种情况下,PersonA 上有 3 个版本,PersonB 有 2 个版本。Column1 的值在所有版本的 Person 中始终相同,我们可以将该列移动到表 Worker。但是 Column 2 和 Column3 的值会随着 Person 的不同版本而变化,因此应该将这些值移动到 Person 表中。
没想到,我有大约 10 个这样的表需要标准化,每个表大约有 40 列。每个表包含大约 500k 到 5m 行。
我需要一个脚本来帮助我分析哪些列要移动到哪里。我需要一个脚本来输出在整个表中唯一 Person 范围内发生变化的所有列。我不知道如何做到这一点。我尝试了 LAG 分析函数来与下一行进行比较,但是如何输出更改的列却超出了我的范围。
请指教。
最好的祝愿,安德鲁