J'ai une table avec la structure suivante:Normaliser une table: trouver des colonnes uniques sur la série de lignes (Oracle 10.x)
WorkerPersons
-------------------------------
ID (PK)
PersonID (Indicates which version of Person the record describes)
SomeColumn1 (data specific to Worker)
SomeColumn2 (data specific to Person)
....
SomeColumnN
-------------------------------
Comme vous pouvez le voir, il est une table dénormalisé, qui détient à la fois des travailleurs et Personne (et de nombreuses versions d'une personne) dans une table. Mon souhait est de normaliser cette table, cependant, comme la table contient beaucoup de données (beaucoup de nombreuses colonnes), je dois être sûr que les colonnes devraient aller à la table Workers et quelles colonnes à la table Persons. Le résultat devrait être comme ceci:
Workers Persons
----------------------- ---------------------
ID ID
PersonID (now a FK) PersonColumn1
WorkerColumn1 PersonColumn2
WorkerColumn2 ...
... PersonColumnN
WorkerColumnN
----------------------- ---------------------
Pour ce faire, je dois analyser les données qui a une portée différente de la personne sur toutes les personnes uniques (Wich sont séparés par PersonID en WorkerPersons). Par exemple:
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
Dans ce cas, il existe 3 versions sur PersonA et 2 versions de PersonB. Les valeurs Column1 sont toujours les mêmes sur toutes les versions de Person, et nous pouvons déplacer cette colonne vers la table Worker. Mais les valeurs Colonne 2 et Colonne3 changent sur différentes versions de la personne, donc ces valeurs doivent être déplacées vers la table Person.
Non imaginez, j'ai environ 10 tables comme ça qui ont besoin d'être normalisées, avec environ 40 colonnes dans chacune. La table Eeach contient environ 500k à 5m lignes.
J'ai besoin d'un script qui m'aide à analyser les colonnes à déplacer où. J'ai besoin d'un script qui affiche toutes les colonnes qui changent dans la portée de la personne unique sur toute la table. Je n'ai pas d'idées cependant comment faire cela. J'ai expérimenté avec la fonction analytique LAG pour comparer avec la rangée suivante mais comment dans le monde pour sortir les colonnes changées est au-delà de moi.
Veuillez nous aviser.
Meilleurs voeux, Andrew