IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Opérateurs d'agrégation [Normalisation]


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 17
    Points : 20
    Points
    20
    Par défaut Opérateurs d'agrégation
    Bonjour,
    tirée du cours(plutôt Référence) de Monsieur Fsmrel sur la normalisation
    Du point de vue de la manipulation des données, on observera que dans le cas de la table Magasin_H, l'utilisation des opérateurs classiques d'agrégation, SUM, AVG, etc. est pour le moins remise en question.
    je n'arrive pas a comprendre comment les classiques d'agrégation sont remise en question ?

    Du point de vue de la performance, dans les deux cas, une seule lecture d'un enregistrement physique suffira pour connaître le chiffre d'affaires hebdomadaire d'un magasin.
    si je ne dis pas de bêtise, la lecture d'un enregistrement physique dans la table Magasin_V donne seulement le chiffre d'affaire quotidien ?
    Mes salutations

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour Hakim,


    Merci de votre lecture attentive. L’article que j’ai commis n’est effectivement pas un cours (je ne suis pas prof), mais plus une réflexion sur le thème de la normalisation des bases de données. Si d’aucuns s’en servent comme d’une référence, je les en remercie.


    1) Concernant les fonctions d’agrégation

    Pour obtenir le chiffre d’affaires de la semaine :

    Avec la table Magasin_V : c’est simple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MagId, SUM(ChiffreAffairesJ)
    FROM   Magasin_V
    GROUP BY MagId ;

    Avec la table Magasin_H : c’est faisable, mais il faut faire figurer dans la requête chacun des 7 jours appartenant à l’en-tête de la table, et veiller à n’en oublier aucun (il faudra donc penser à modifier la requête si un jour la structure de la table devait passer de 7 à 10 colonnes) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MagId, SUM( ChiffreAffairesJ1 + ChiffreAffairesJ2 + ChiffreAffairesJ3 + ChiffreAffairesJ4
                     + ChiffreAffairesJ5 + ChiffreAffairesJ6 + ChiffreAffairesJ7)
    FROM   Magasin_H
    GROUP BY MagId ;

    Disons que pour SUM, avec la table Magasin_H ça n’est pas très élégant, c’est moyen (maintenance), mais ça marche.

    Pour obtenir la moyenne de la semaine :

    Avec la table Magasin_V : c’est simple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MagId, AVG(ChiffreAffairesJ)
    FROM   Magasin_V
    GROUP BY MagId ;

    Avec la table Magasin_H : à moins d’une astuce que je ne connais pas, la fonction AVG est à remplacer par SUM, avec division par la constante 7 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MagId, SUM( ChiffreAffairesJ1 + ChiffreAffairesJ2 + ChiffreAffairesJ3 + ChiffreAffairesJ4
                     + ChiffreAffairesJ5 + ChiffreAffairesJ6 + ChiffreAffairesJ7) / 7
    FROM Magasin_H
    GROUP BY MagId ;

    Pour obtenir le jour de la semaine où le chiffre d’affaires a été le meilleur :

    Avec la table Magasin_V : c’est simple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(ChiffreAffairesJ)
    FROM   Magasin_V
    GROUP BY MagId ;

    Avec la table Magasin_H, je ne sais pas faire. Existe-t-il un moyen ?


    Conclusion : sous réserve d'être contredit, je modifierai l’article en ce sens :

    « l'utilisation des opérateurs classiques d'agrégation, est pour le moins balourde et à surveiller (SUM), voire remise en question (AVG, MAX, MIN). »


    2) Concernant les lectures physiques

    Vous écrivez : « La lecture d'un enregistrement physique dans la table Magasin_V donne seulement le chiffre d'affaire quotidien ? »

    Je réponds : Ça donne bien plus que ça. Prenons le cas de DB2 for z/OS V8, et choisissons la taille d’enregistrement physique la plus petite, à savoir 4 K (4096 octets). Un tel enregistrement contient 254 lignes de la table Magasin_V. Grâce à l’effet cluster, les lignes se suivront physiquement selon la séquence <MagId, Jour> : ainsi, la lecture d’un enregistrement physique fera monter en mémoire 254 journées, c'est-à-dire les 7 journées de 36 magasins.

    Si en plus de la colonne Jour on fait figurer les colonnes Annee et Mois, la page contient encore 203 lignes de la table Magasin_V, c'est-à-dire les 7 journées de 29 magasins.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    Merci pour cette réponse claire et pédagogique ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avec la table Magasin_H, je ne sais pas faire. Existe-t-il un moyen ?

    je suis encore au niveau conceptuel dans mon apprentissage :mieux comprendre les conséquences d'une mauvaise structure (Magasin_H) ne peut être que bénéfique pour la suite.

    Dans mon esprit, enregistrement physique était synonyme d'une ligne de table ou même d'un tuple d'où ma confusion .
    Mes salutations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [V6] Utilisation de l'opérateur Où avec agrégats ?
    Par jvaillant dans le forum Deski
    Réponses: 1
    Dernier message: 13/04/2010, 15h14
  2. Opérateur like
    Par Troopers dans le forum ASP
    Réponses: 3
    Dernier message: 15/09/2003, 19h19
  3. opérateur non applicable à ce type d'opérande
    Par Amon dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 18h07
  4. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22
  5. Création d'agrégat avec SQLServer
    Par Testav dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/09/2002, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo