Comme la quantité de données d'une entreprise typique a augmenté de façon exponentielle, il est devenu encore plus critique d'optimiser le stockage des données. La taille de vos données n'a pas seulement un impact sur la taille et les coûts de stockage, elle affecte également les performances des requêtes. Un facteur clé pour déterminer la taille de vos données est le type de données que vous sélectionnez. Ce didacticiel explique comment sélectionner les bons types de données.
Que sont les types de données ?
Types de données définir le type et la plage de données pouvant être stockées dans un champ (ou une colonne) donné(e).
Considérez une table de ventes avec ces exemples d'enregistrements :
Chaque champ a son propre type et sa propre plage de valeurs :
purchase_time :date et heure de la ventesale_id :valeurs entières incrémentées de un pour chaque nouvelle ventecustomer_id :valeurs entières incrémentées de un pour chaque nouveau clientdevise :texte toujours dans le code de devise à 3 caractèresamount_paid : valeurs numériques réelles monétaires comprises entre 0,00 USD et 1 000,00 USDappareil : texte, où les valeurs peuvent être :"ordinateur de bureau", "application mobile" et "web mobile"has_discount :booléen où les entrées peuvent être TRUE
ou FALSE
remarques :texte, où l'entrée peut être aussi longue que ce qui est autorisé dans notre outil de saisie d'agent (250 caractères)
Le type de données (entiers, texte, nombres réels, etc.) et les plages de valeurs possibles (0 à 1 000 ; 3 caractères quelconques ; etc.) correspondent à des types de données spécifiques à la base de données .
Quels sont les types de données possibles ?
Différentes bases de données ont différents types de données disponibles, mais la plupart entrent dans ces catégories :
Numérique :
- entiers :pour les nombres sans fractions. Peut être signé (autoriser les valeurs positives et négatives) ou non signé (autoriser uniquement les nombres positifs). Couramment utilisé pour les champs d'ID et le nombre de quelque chose
- décimal(x,y) :pour les nombres avec des fractions nécessitant une précision exacte. Peut être signé (autoriser les valeurs positives et négatives) ou non signé (autoriser uniquement les nombres positifs). Couramment utilisé pour les champs monétaires. L'utilisateur précise le nombre de chiffres significatifs autorisés globalement (x) et après la virgule (y) entre parenthèses
- flottant/double :pour les nombres avec des fractions ne nécessitant pas une précision exacte. Peut être signé (autoriser les valeurs positives et négatives) ou non signé (autoriser uniquement les nombres positifs). Couramment utilisé pour tous les nombres réels à l'exception des champs monétaires
Date/heure :
date :pour les valeurs de date
- temps :pour les valeurs temporelles
- horodatage/dateheure :pour les valeurs de date et d'heure
Texte :
- caractère(n) :pour les chaînes de caractères de longueur fixe, où la valeur entre parenthèses dicte la taille fixe de chaque entrée
- varchar(n) :pour les chaînes de caractères de longueur variable, où la valeur entre parenthèses détermine la taille maximale acceptée pour chaque entrée
Booléen :
- booléen :pour les valeurs booléennes (vrai/faux). Certaines bases de données (comme MySQL) n'ont pas de type de données booléen et convertissent à la place les valeurs booléennes en nombres entiers (1=TRUE, 0 =FALSE)
La plupart des bases de données proposent des variations de taille pour chaque type. Par exemple, MySQL fournit ces types de données entiers possibles :
Comment sélectionner les bons types de données
La stratégie de base pour sélectionner le meilleur type de données consiste à sélectionner le plus petit type de données qui correspond au type de données dont vous disposez et qui permet toutes les valeurs possibles de vos données.
Par exemple, customer_id
dans notre exemple de tableau des ventes se trouve un nombre entier commençant par 0. Aujourd'hui, notre société fictive ne compte que 15 000 clients. En utilisant la table de type de données entières MySQL de la section précédente, nous pourrions être tentés de sélectionner SMALLINT
unsigned comme type de données, car c'est le plus petit type de données qui acceptera nos valeurs entières actuelles de 0 à 15 000. Cependant, nous prévoyons d'atteindre 100 000 clients au cours des 6 à 12 prochains mois. Lorsque nous dépassons 65 535, le SMALLINT
ne suffira plus. Ainsi, une meilleure sélection est MEDIUMINT
non signé, qui devrait nous couvrir pour les prochaines années.
Vous pouvez laisser votre base de données sélectionner les types de données pour vous lors de la création de votre table avec des exemples d'enregistrements. Cependant, cela vous donnera rarement la meilleure sélection de type de données. Par exemple, laisser MySQL sélectionner les types de données pour une table de ventes avec les exemples de valeurs indiqués précédemment pose plusieurs problèmes.
Les problèmes que nous rencontrons avec les types de données automatiquement sélectionnés par MySQL sont :
- mauvais type de données :vous ne pourrez pas utiliser le champ comme vous le souhaiteriez. Par exemple, avoir
purchase_time
sous la forme d'une chaîne et non d'un type de données temporelles, cela signifie que vous ne pourrez pas effectuer d'opérations temporelles (telles que le calcul du temps écoulé depuis l'achat) sur le terrain - trop contraint :MySQL génère des erreurs lorsque vous essayez d'entrer des valeurs supérieures à ce que le type de données autorise. Par exemple, nous obtiendrons des erreurs si nous avons une vente avec un montant_payé de 100,00 $ ou plus ou un agent_comment de plus de 65 caractères
- trop conservateur :alors que rien ne vous empêchera d'être trop conservateur avec les types de données, vous gaspillerez de l'espace de stockage. Avec nos données d'exemple, nous pourrions économiser 15 % de stockage en utilisant les options préférées les moins conservatrices
Aussi intelligentes que soient les bases de données modernes, les propriétaires des données savent toujours mieux quel type de données sont stockées et quelles sont les valeurs possibles que les données peuvent prendre dans un avenir prévisible. Vous devez donc bien spécifier les types de données pour chacun de vos champs.
La documentation sur les types de données pour différentes bases de données communes est fournie ici :
- MySQL
- Amazon Redshift
- Apache Hive
- Teradata
Conclusion
Pour que votre base de données fonctionne correctement et soit aussi optimisée que possible, il est important de sélectionner avec soin les types de données pour chaque champ de vos tables.