59
4.1 Modélisation de la base de données
Toolkit: The Complete Guide to Dimensional Modeling, chez Wiley).
Ralph Kimball est un des deux théoriciens importants du décisionnel moderne, et
les principes de ce livre ont été appliqués dans les outils BI de SQL Server.
4.1.3 Bien choisir ses types de données
Lors du passage au modèle physique de données (MPD), c’est-à-dire lors de l’adaptation du MCD à une implémentation de SGBDR particulière – SQL Server en ce qui
nous concerne –, plusieurs considérations sont importantes pour les performances :
Choisissez les bons types de données. Nous avons vu que la 1FN prescrit de
dédier chaque attribut à une valeur atomique. Physiquement, il est également
important de dédier le type de données adapté à cette valeur. Par exemple, si vous
devez exprimer un mois de l’année, faut-il utiliser un type DATE (ou DATETIME en SQL
Server 2005), ou un CHAR(6), dans lequel vous inscrirez par exemple '200801' pour le
mois de janvier 2008 ? Si l’idée vous vient d’utiliser un CHAR(6), que ferez-vous
lorsqu’il vous sera demandé de retourner par requête la différence en mois entre deux
dates ? Si vous avez opté dès le départ pour le type qui convient, la fonction DATEDIFF() est tout ce dont vous avez besoin. De plus, le type DATE est codé sur trois
octets, alors qu’un CHAR(6), par définition, occupe le double. Sur une table de dix
millions de lignes, cela représente donc un surpoids d’environ trente mégaoctets,
totalement inutile et contre performant.
Prévoir la volumétrie
À la mise en place d’une nouvelle base de données, estimez sa volumétrie future, pour
dimensionner correctement votre machine, vos disques et la taille de vos fichiers de données
et de journal. Vous pouvez utiliser les fonctionnalités intégrées de dimensionnement des
outils de modélisation comme Embarcadero ER/Studio ou Sybase PowerDesigner/PowerAMC. HP publie aussi des outils de sizing : http://activeanswers.compaq.com/ActiveAnswers/
Render/1, 1027,4795-6-100-225-1,00.htm. Vous pouvez aussi créer votre propre script, par
exemple fondé sur la colonne max_length de la vue sys.columns, en prenant en compte que
la valeur de max_length pour un objet large est -1.
Une colonne comportant un type de taille trop importante augmente la taille de
la ligne. Il s’ensuit que moins de lignes peuvent résider dans la même page, et plus de
pages doivent être lues, ou parcourues, pour obtenir le même jeu de données. Il est
important, dans ce cadre, de faire la distinction entre types précis et types approchés,
types de taille fixe ou de taille variable, ainsi qu’entre les types qui restent dans la
page et ceux qui peuvent s’en échapper. Passons en revue quelques types de données
système de SQL Server.
Numériques
Les types numériques sont soit entiers, soit décimaux, à virgule fixe ou flottante. Les
types entiers sont codés en un bit (BIT), un octet (TINYINT), deux octets (SMALLINT),
quatre octets (INT) ou huit octets (BIGINT). Le BIT est utilisé en général pour
exprimer des valeurs booléennes (vrai ou faux). Il accepte le marqueur NULL. Le stoc-
4.1 Modélisation de la base de données
Toolkit: The Complete Guide to Dimensional Modeling, chez Wiley).
Ralph Kimball est un des deux théoriciens importants du décisionnel moderne, et
les principes de ce livre ont été appliqués dans les outils BI de SQL Server.
4.1.3 Bien choisir ses types de données
Lors du passage au modèle physique de données (MPD), c’est-à-dire lors de l’adaptation du MCD à une implémentation de SGBDR particulière – SQL Server en ce qui
nous concerne –, plusieurs considérations sont importantes pour les performances :
Choisissez les bons types de données. Nous avons vu que la 1FN prescrit de
dédier chaque attribut à une valeur atomique. Physiquement, il est également
important de dédier le type de données adapté à cette valeur. Par exemple, si vous
devez exprimer un mois de l’année, faut-il utiliser un type DATE (ou DATETIME en SQL
Server 2005), ou un CHAR(6), dans lequel vous inscrirez par exemple '200801' pour le
mois de janvier 2008 ? Si l’idée vous vient d’utiliser un CHAR(6), que ferez-vous
lorsqu’il vous sera demandé de retourner par requête la différence en mois entre deux
dates ? Si vous avez opté dès le départ pour le type qui convient, la fonction DATEDIFF() est tout ce dont vous avez besoin. De plus, le type DATE est codé sur trois
octets, alors qu’un CHAR(6), par définition, occupe le double. Sur une table de dix
millions de lignes, cela représente donc un surpoids d’environ trente mégaoctets,
totalement inutile et contre performant.
Prévoir la volumétrie
À la mise en place d’une nouvelle base de données, estimez sa volumétrie future, pour
dimensionner correctement votre machine, vos disques et la taille de vos fichiers de données
et de journal. Vous pouvez utiliser les fonctionnalités intégrées de dimensionnement des
outils de modélisation comme Embarcadero ER/Studio ou Sybase PowerDesigner/PowerAMC. HP publie aussi des outils de sizing : http://activeanswers.compaq.com/ActiveAnswers/
Render/1, 1027,4795-6-100-225-1,00.htm. Vous pouvez aussi créer votre propre script, par
exemple fondé sur la colonne max_length de la vue sys.columns, en prenant en compte que
la valeur de max_length pour un objet large est -1.
Une colonne comportant un type de taille trop importante augmente la taille de
la ligne. Il s’ensuit que moins de lignes peuvent résider dans la même page, et plus de
pages doivent être lues, ou parcourues, pour obtenir le même jeu de données. Il est
important, dans ce cadre, de faire la distinction entre types précis et types approchés,
types de taille fixe ou de taille variable, ainsi qu’entre les types qui restent dans la
page et ceux qui peuvent s’en échapper. Passons en revue quelques types de données
système de SQL Server.
Numériques
Les types numériques sont soit entiers, soit décimaux, à virgule fixe ou flottante. Les
types entiers sont codés en un bit (BIT), un octet (TINYINT), deux octets (SMALLINT),
quatre octets (INT) ou huit octets (BIGINT). Le BIT est utilisé en général pour
exprimer des valeurs booléennes (vrai ou faux). Il accepte le marqueur NULL. Le stoc-
