2017-02-27 1 views
0

Je suis assez nouveau dans les bases de données et SQL en général et j'ai une tâche assez importante que je ne sais pas comment résoudre. Étant donné que j'ai une société (société A) avec trois filiales différentes (sous-catégorie A, sous-B, sous-catégorie C). Les trois filiales produisent les mêmes produits qui peuvent être divisés en trois catégories de produits:Créer un schéma en étoile "DWH like" dans MySQL

  • Catégorie de produit A
  • Catégorie Produit B
  • Catégorie de produit C

Ma tâche est de créer une étoile schéma qui me permet d'obtenir les informations suivantes: Revenus totaux du sous-A et du sous-B pour chaque produit de la catégorie de produits B.

Le format requis du résultat t est un tableau contenant trois colonnes «nom de la filiale», «nom du produit» et «revenu».

Ce que j'ai essayé jusqu'ici, est de créer le tableau de faits, la dimension et les clefs suivants. Les clés primaires des dimensions sont connectées aux clés étrangères de ma table de faits.

Structure Approach

Mes questions sont les suivantes:

  • Suis-je même sur la bonne voie ou cette approche est tout à fait tort? Comment pourrais-je réellement "remplir" mes tables avec des données d'exemple pour pouvoir écrire une question qui répond à la question donnée ci-dessus?

  • À quoi ressemblerait une telle requête?

Pour l'instant, je me sers d'un serveur MySQL local créé avec XAMPP et me connecte à cela en utilisant IntelliJ IDEA ultime 2016. Le diagramm ci-dessus a également abeille créé à l'aide de ce logiciel.

J'espère que quelqu'un est capable et désireux de m'aider.

Aussi, s'il vous plaît pardonnez toutes les erreurs (ou s'il vous plaît dites-moi ce que j'ai fait de mal) que je suis nouveau à SQL et surtout nouveau à Stackoverflow.

Amitiés

Edit:

J'ai utilisé un autre outil pour créer et visualiser mes tableaux. Aussi, comme Fenix ​​l'a mentionné, j'ai ajouté plusieurs dimensions différentes, comme une table de date/heure. Cependant, afin de résoudre ma tâche, je suppose que j'ai seulement besoin des deux dimensions dimCompany (qui représente les différentes filiales) et dimProduct. enter image description here

Répondre

1
  • Vous êtes sur la bonne voie. Exemple scolaire de la façon dont le data mart devrait être structuré. L'exemple réel peut contenir des clés natives de companyID, productID et salesID. Veuillez ajouter PK_sales ou PK_fact (selon vos préférences).Evénement (une vente) sans date ni timbre, il est rare que cela se produise, mais s'il s'agit simplement d'une preuve de concept, vous pouvez peut-être vous en passer.
  • Avez-vous des données ou voulez-vous recomposer des données?
    1. Vous pouvez créer des exemples de données dans Excel en utilisant la fonction RANDBETWEEN.
    2. De nombreux outils client MySQL ont l'option d'importer des données à partir de fichiers Excel, CSV ou TXT.
    3. Vous pouvez également utiliser certains outils d'intégration de données gratuits, tels que Pentaho Kettle et Talend Open Studio. Si c'est trop en ce moment, évitez cette étape. Cependant, cela vous donnera un bon aperçu de ce que sont les outils DI et comment DWH pourrait être peuplé (dans l'exemple réel).
  • Ce serait quelque chose comme ceci:

SELECT dp.ProductName,sum(fs.revenue) as total_revenue FROM fact_sales fs JOIN dim_product dp ON fs.FK_Product = dp.PK_Product JOIN dim_company dc ON fs.FK_Company = dc.PK_Company WHERE dp.Product_Type = 'Product Category B' AND dc.CompanyName IN ('Sub A','Sub B') GROUP BY dp.PK_Product;

Malheureusement, certaines des datamarts ne sont pas bien structurés de sorte qu'il ne contient pas l'intégrité référentielle (anti-modèle), de sorte que vous devrait aller avec LEFT JOIN au lieu de INNER JOIN. Notez que INNER JOIN est identique à JOIN. Un peu sur JOIN vous pouvez visualiser here.

Edit:

En ce qui concerne votre commentaire, il est difficile de faire un bon équilibre pour ne pas faire cette réponse trop large, car ce site AQ devrait servir pour les questions et les réponses spécifiques.

Puisque DWH est toujours une base de données, il a hérité de la plupart des principes de base de données. L'un d'entre eux sont des clés de table. La clé primaire est identifiant de ligne unique, et lorsque la conception de la base de données permet (dans le monde DWH il devrait toujours être) les clés sont des entiers (grands entiers exactement). Voir this pour plus d'informations.

But? Vous pouvez avoir deux sociétés avec les mêmes noms mais des états différents, donc vous avez besoin d'une clé pour les distinguer.

Pourquoi devrait-il être un nombre entier? C'est une question plus technique, et un des réponses est de l'optimisation de la requête. Le processeur va faire correspondre deux entiers (4 ou 8 octets) beaucoup plus rapidement que les chaînes (VARCHAR dans le monde de la base de données) avec plus de 100 octets (ou de quelque manière que ce soit que vous spécifiez). Pourquoi quelqu'un utilise VARCHAR comme clé primaire? Eh bien, parfois, être aussi natif que possible est une bonne approche. Donc, VARCHAR clé primaire pour le produit pourrait être la combinaison de la marque du produit et compteur (du fournisseur), et si vous êtes re-vendeur, ERP pourrait donner Microsoft Office 2016 clé comme MCR-OFF-123. Dans DWH, il est recommandé de stocker la clé native (quelle qu'elle soit, int ou varchar) et d'attribuer une clé primaire de substitution.

Sub A a la touche '1', Sub B a la touche « 2

citation de votre commentaire.

Oui, vous avez raison.

+0

Tout d'abord: merci beaucoup pour votre réponse rapide!J'ai modifié mon message d'origine pour inclure une approche plus détaillée du schéma de données. Cependant, j'ai encore quelques questions à ce sujet. Bien que je comprenne l'idée générale d'utiliser des clés primaires et étrangères pour connecter les tables, je ne peux pas penser à quoi ressemblerait une telle clé. Supposons que nous ayons Sub A, Sub B et Sub C. Ces noms sont-ils les clés? Ou ont-ils des clés uniques? (Comme Sub A a la touche '1', Sub B a la touche '2' ...) La même chose est pour les produits. –

+0

Hey, j'ai prolongé ma réponse en fonction de votre commentaire :-) Si vous avez d'autres questions concernant les clés et db stuff s'il vous plaît poser une autre question si elle n'a pas encore répondu. Votre question de base est bonne et la garder spécifique pourrait aider d'autres personnes également. – fenix

+0

Merci encore beaucoup. J'ai accepté votre réponse, car elle m'a déjà beaucoup aidé. Cependant, je n'ai pas encore tout à fait réussi ce que j'ai à faire, mais je pense que je le comprendrai. Sinon, pourrais-je vous contacter pour une aide plus spécifique sans "spammer" les forums? –