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 :
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) :
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 :
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 :
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 :
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.
Partager