У меня есть таблица со следующей структурой:
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
----------------------- ---------------------
Для этого мне нужно проанализировать, какие данные различаются по объему Person по всем уникальным Person (которые отделены PersonID в WorkerPersons). Например:
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
В этом случае имеется 3 версии PersonA и 2 версии PersonB. Значения Column1 всегда одинаковы для всех версий Person, и мы можем переместить этот столбец в таблицу Worker. Но значения столбца 2 и столбца 3 изменяются в разных версиях Person, поэтому эти значения следует переместить в таблицу Person.
Не представляю, у меня около 10 таких таблиц, которые нужно нормализовать, с примерно 40 столбцами в каждой. Каждый стол вмещает от 500 до 5 метров.
Мне нужен скрипт, который поможет мне проанализировать, в какие столбцы двигаться. Мне нужен сценарий, который выводит все столбцы, которые изменяются в объеме уникального человека по всей таблице. Однако я понятия не имею, как это сделать. Я экспериментировал с аналитической функцией LAG для сравнения со следующей строкой, но то, как в мире выводить измененные столбцы, мне не подходит.
Пожалуйста, сообщите.
С наилучшими пожеланиями,
Андрей