2016-02-29 2 views
0

J'essaie de concevoir une modélisation dimensionnelle pour l'entreposage de données pour un de mes projets (commande client). Je suis nouveau à ce concept.Comment stocker des données dans une table de faits avec plusieurs produits dans un ordre dans l'entrepôt de données

Jusqu'à présent, je pourrais comprendre que le produit, le client et la date peuvent être stockées dans la table de dimension et les informations de commande sera dans la table de faits.

structure de la table de Date_dimension sera

date_dim_id, date, week_number, month_number 

structure de la table de Product_dimension sera

product_dim_id, product_name, desc, sku 

structure de la table Order_fact seront

order_id, product_dim_id(fk), date_dim_id(fk), order_quantity, order_total_price, etc 

Si une commande est place avec 2 ou plus le nombre du produit, y aura-t-il des entrées répétées dans la table order_fact pour la même order_id, date_dim_id

Aidez s'il vous plaît. Je suis confus ici. Je sais que dans une base de données relationnelle, order table aura une entrée par ordre et la relation entre le produit et l'ordre sera maintenue dans une table différente ayant le order_id et le product_id comme clé étrangère.

Merci d'avance.

+0

Quelles informations souhaitez-vous enregistrer dans la table des en-têtes de commande? Vous créez un fait au niveau du niveau de la commande, puis vous calculez comment enregistrer les informations d'en-tête de commande. Par exemple, le client apparaît uniquement dans l'en-tête de votre système source, mais dans votre table des commandes, il sera répété pour toutes les commandes de produits individuelles. Il n'y a pas de problème avec ça. Le seul défi est de dire quand vous avez un montant total d'achat sur l'en-tête - vous ne pouvez pas répéter cela sur plusieurs enregistrements de produits. –

+0

Il existe deux solutions principales pour cela: 1. diviser l'envoi par le nombre d'enregistrements et le répartir sur tous les enregistrements; 2. Ajouter un autre enregistrement et prétendre que la livraison est un produit. Quoi que vous fassiez, vous devez conserver le numéro de commande d'origine dans le fait afin que vous puissiez mesurer des choses comme «vente moyenne par commande» et «moyenne des produits par commande». Quoi qu'il en soit, cette modélisation dimensionnelle en-tête/détail est discutée ad nauseum sur internet. Pourquoi ne faites-vous pas de recherche et ne posez pas de question précise? –

+0

vous devriez probablement utiliser Order Line Item comme le grain de votre table de faits –

Répondre

1

Ceci est un cas classique où vous devriez (probabilement) avoir deux tables de faits FactOrderHeader et FactOrderDetail.

FactOrderHeader aura un dossier pour chaque commande, le stockage d'informations en ce qui concerne la valeur de l'ordre et des réductions de niveau de commande; bien qu'ils puissent être exprimés comme un enregistrement OrderDetail dans certains cas.

FactOrderDetail aura un dossier pour chaque ligne de commande, le stockage d'informations considèrent le produit, le coût du produit, le prix de vente des produits, nombre d'éléments, point de réduction.

Vous devrez peut-être également avoir un DimOrderHeader s'il y a des informations non factuelles que vous souhaitez stocker, par exemple, la date à laquelle la commande a été prise, livrée, payée.