2015-03-25 1 views
1

Je suis la conception et la construction d'une table de fait des ventes dans un schéma en étoile et je ne peux pas sembler trouver comment aller sur le problème suivant:client d'entrepôt de données dimensionnelle avec plusieurs comptes

Un client peut avoir 1 ou 2 comptes, mais un compte ne peut appartenir qu'à 1 client. Donc, ceci est une relation de 1 à plusieurs.

Dois-je créer des dimensions pour le client et le compte, et les lier avec une table de bridge?

Dans le tableau dernier fait que j'aurais en lignes par exemple:

| date_id | cust_id | Acc_id | count(sales) | 
| 1 | 150 | 25 |  1  | 
| 1 | 150 | 26 |  1  |  
+0

ACC_ID est-il unique en soi? – APC

+0

Oui, son unique –

+0

Est-il possible d'avoir des dimensions séparées pour le compte et le client et d'avoir une clé étrangère dans la dimension du compte qui renvoie à la dimension client –

Répondre

2

Il suffit de créer les dimensions Compte et Client. Ne pas les lier avec une clé étrangère - c'est comme cela que vous feriez des choses si vous créiez un schéma entièrement normalisé, plutôt qu'un schéma Star. Le lien entre Client et Compte est conservé dans la ou les tables de faits - parce que vous avez une ligne de données contenant Cust_Id 150 aux côtés de Acc_Id 25 et une autre rangée de données contenant le même Cust_Id par rapport à Acc_Id 26, cela apparaîtra dans n'importe quelle couche OLAP vous construisez dessus que ceux-ci sont liés.

Notez que vous pouvez également avoir une dimension de compte et conserver les détails du client en tant qu'attributs sur le compte. Sans connaître le reste de votre modèle, il est impossible de dire si c'est une solution plus appropriée, cependant.

+0

votre premier suggérant fait beaucoup de sens. Merci! Je préfère les séparer afin que je ne duplique pas les détails du client. De plus, certains détails spécifiques au compte peuvent être stockés dans une dimension de compte. Merci de préciser que je n'ai pas besoin de les lier. –

+0

@GrantMcKinnon Heureux que ça a aidé! Gardez à l'esprit que vous ne devriez pas vous soucier de la duplication de données (tant que c'est une duplication intentionnelle de données comme celle dont nous parlons) dans les schémas en étoile. Les faits et les dimensions doivent tous deux être déterminés par le grain. Par conséquent, si vous avez une table de faits dont le client est le grain, vous avez besoin d'une dimension client. Sinon, il n'y a pas de gain réel à avoir une Dimension séparée. Prend un moment pour m'habituer à cet état d'esprit, je trouve! –

0

Créer une table client, avec Cust_ID comme clé primaire. Créez une table de compte avec Acct_ID en tant que clé primaire et Cust_ID en tant que clé étrangère. Chaque compte doit avoir un et un seul client, mais un client peut être répertorié sur plusieurs comptes.

Qu'est-ce qu'une «table des faits de vente»? Essayez-vous de suivre les commandes?

+0

une table de faits à partir d'un schéma en étoile dans un entrepôt de données. Je pense que vous faites référence à une base de données relationnelle, Ces données sont déjà stockées dans des tables relationnelles. Je le consolide dans un schéma avec un total des ventes en tant que fonction d'agrégat et client et compte en tant que dimensions. Chaque ligne de la table de faits correspond à une vente à un compte, qui a un client. Une vente peut être seulement pour un compte et un client, mais ce que je suis coincé avec, est de savoir comment lier les dimensions de client et de compte –