2017-07-19 6 views
0

J'ai une table de faits avec beaucoup d'entrées, et ils ont des colonnes 'ship to' qui sont très proches, mais aucune des colonnes n'est toujours unique. Je voudrais créer une table de dimension pour cela et référencer les nouvelles lignes de la table de dimension à l'aide d'une clé.PostgreSQL - Comment créer une table "dimension" à partir d'une requête "select distinct" et créer une clé primaire et une clé étrangère?

Je peux créer la nouvelle table de dimension avec une table create comme select distinct, et je peux ajouter une clé primaire de numéro de ligne, mais je ne suis pas sûr comment mettre la clé étrangère correspondante dans la table de faits, où ils correspondent.

Je pourrais facilement créer une nouvelle colonne de clé étrangère, et la remplir en utilisant un endroit où faire correspondre les anciennes lignes distinctes dans la table de faits aux lignes distinctes dans la table de dimension, mais il n'y a pas de colonne facile à n'est pas encore une clé), ai-je besoin de créer une correspondance 'where' qui correspond à toutes les colonnes ensemble, puis assigne la clé primaire à partir de la table de dimension? Je peux juste être fainéant, et je ne veux pas chercher comment créer des requêtes d'altération et comment créer une correspondance complexe, mais cela semble être une action assez courante pour la gestion de base de données, donc je sens que ça pourrait aider les autres .

Répondre

0

Je suppose qu'une façon de le faire est de créer une concaténation de toutes les valeurs dans toutes les colonnes pour chaque ligne de la nouvelle dimension afin de créer un identifiant unique à partir des données, puis de faire la même chose pour les colonnes dans la dimension de fait. Maintenant, il y a une clé unique entre les deux, et cela peut être converti en un identifiant entier. Ajoutez une nouvelle colonne de séquence dans la nouvelle dimension, puis créez une nouvelle colonne dans le fait et définissez-la sur l'ID entier dans la nouvelle dimension où l'ID concaténé est le même.

Ceci est évidemment très inefficace, car tout le contenu de la nouvelle dimension doit être dupliqué, ainsi que cela encore dans la dimension de fait - juste pour créer un lien.

+0

N'est-ce pas une action courante pour la gestion de base de données? Pourquoi ne puis-je trouver aucune référence à quelqu'un ayant ce problème? –