Retour à la liste des articles Articles
10 minutes de lecture

Quel type de données choisir pour une colonne lors de la création d'une table en SQL ?

Les bases de données stockent des valeurs de données de différents types. Par exemple, vous pouvez stocker le nom d'un produit sous forme de chaîne de texte, le prix d'un produit sous forme de nombre ou la date de vente d'un produit sous forme de date. Ces valeurs - le nom du produit, le prix et la date de vente - sont stockées sous différents types de données. Dans cet article, nous expliquons plusieurs types de données SQL à l'aide d'exemples réels.

Création d'une table en SQL

SQL est un langage permettant de manipuler les données dans les bases de données. Créé au début des années 1970, il est encore utilisé aujourd'hui dans presque toutes les bases de données relationnelles après 50 ans. L'apprentissage de SQL reste très populaire.

SQL est utilisé comme langage de données standard pour la manipulation et l'interrogation des données dans les bases de données les plus populaires. Je ne pense pas me tromper en disant que nous utilisons tous des applications qui font appel à des requêtes SQL plusieurs fois par jour sur nos téléphones portables ou nos ordinateurs sans même nous en rendre compte.

SQL est également un langage facile à apprendre, très proche de l'anglais avec une courbe d'apprentissage peu prononcée. Prenez par exemple la requête SQL suivante :

SELECT employee_id, employee_name FROM employees WHERE salary > 75000

Vous pouvez probablement deviner quelles données cette requête renvoie : l'identifiant et le nom des employés gagnant plus de 75 000 dollars. Facile, n'est-ce pas ?

Cependant, avant de pouvoir interroger les données d'une base de données, nous devons stocker les données dans la base. Les bases de données utilisent des tables pour stocker les enregistrements de données. Une table comporte un ensemble de champs (également appelés colonnes).

Pour en savoir plus sur les tables, je vous suggère le cours Creating Table in SQL. Il s'agit d'un cours pratique avec environ 80 exercices pour vous équiper de tout ce dont vous avez besoin pour commencer à créer des tables dans des bases de données SQL.

Une table typique destinée à stocker des données sur les employés peut comporter des champs tels que employee_id, employee_name et salary. Vous pouvez inclure n'importe quel champ dans la table ; vous pouvez inclure d'autres champs en fonction de vos besoins, tels que le département auquel l'employé appartient et sa date de naissance.

Cependant, lorsque vous définissez un nouveau champ dans une table, vous devez obligatoirement spécifier son type de données. L'objectif principal de cet article est d'explorer quel type de données choisir pour un champ lors de la création d'une table en SQL.

Commençons par créer une simple table appelée foods pour une entreprise de plats à emporter. Elle ne comporte que deux colonnes ou champs : food_name et food_category. Comme ces deux colonnes stockent des valeurs de texte, nous utilisons le type de données VARCHAR, qui permet de stocker des chaînes de texte de n'importe quelle longueur. Voyons l'instruction CREATE TABLE à cet effet :

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20)
);

Les deux colonnes (food_name et food_category) accepteront des valeurs de type chaîne de caractères. Toutefois, food_name acceptera des valeurs ne dépassant pas 50 caractères. Cette limitation est spécifiée dans VARCHAR(50); de même, food_category n'acceptera pas plus de 20 caractères.

Supposons que nous voulions créer une nouvelle version de la table avec une colonne supplémentaire. Nous voulons enregistrer la date à laquelle l'aliment a été cuisiné ou préparé. Appelons cette colonne supplémentaire prepared_on et utilisons le type de données DATE pour celle-ci. L'instruction CREATE TABLE pour la nouvelle version de la table est la suivante :

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE
);

Les valeurs valides pour la colonne prepared_on comprennent '2022-11-03' et '2022-11-02'. Le format exact des dates peut varier ; d'autres formats valides courants sont 'mm/dd/yyyy' et 'yyyymmdd'. L'instruction suivante INSERT montre comment créer un enregistrement dans la table foods:

INSERT INTO foods
VALUES ('Chicken with mashed potatoes','Main Dish','11/08/2022');

Pour en savoir plus sur INSERT, consultez cet article.

L'instruction SQL SELECT ci-dessous montre comment lire les enregistrements dans la table et voir à quoi ils ressemblent :

SELECT food_name, food_category, prepared_on FROM foods;

Dans l'image suivante, vous voyez comment le client SQL affiche les noms des colonnes et les types de données pour chaque colonne renvoyée par l'instruction SELECT:

Quel type de données choisir pour une colonne lors de la création d'une table en SQL ?

Pour en savoir plus sur l'instruction SELECT, cliquez ici.

Si vous n'avez jamais eu affaire à des bases de données, je vous recommande le cours Data Types in SQL. Dans ce cours, vous apprendrez à connaître les types de données courants dans SQL Server, MySQL, Oracle et PostgreSQL. Si vous êtes venu ici à la recherche d'informations sur la création de tables, le cours très complet The Basics of Creating Tables in SQL vous enseigne les éléments de base de la création de tables dans MySQL, SQL Server, Oracle et PostgreSQL. Enfin, vous pouvez lire le cours SQL pour les débutants dans l'article Pourquoi suivre le cours "SQL pour les débutants" - la raison pour laquelle ce cours en ligne a été créé, la philosophie qui le sous-tend et son contenu.

Types de données numériques

Maintenant que la date de préparation de chaque produit alimentaire figure dans la table, supposons que nous voulions inclure une colonne pour enregistrer le nombre de jours pendant lesquels un produit alimentaire peut être vendu avant sa date d'expiration. Il s'agit d'un nombre ; jusqu'à présent, nous n'avons pas inclus de colonnes numériques dans la table. foods.

Dans les bases de données SQL, il existe plusieurs types de données pour les données numériques. Il faut analyser quel type de nombre nous avons pour savoir comment procéder.

Si les valeurs que vous souhaitez stocker dans la colonne sont des nombres sans décimales, le type de données à utiliser est INTEGER. Des exemples de valeurs entières sont 10, 1, 1234, 302123, 0, et même des nombres négatifs comme -10 et -90. La règle est simple : tout nombre sans décimales est une valeur valide à stocker en tant que type de données INTEGER. Incluons la colonne valid_days comme type de données INTEGER:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER
);

Supposons que nous voulions maintenant inclure dans le tableau une colonne pour stocker le prix de chaque produit alimentaire. Nous créons une colonne appelée price. Cette colonne aura des valeurs numériques avec des décimales, nous utiliserons donc le type de données NUMERIC. Ce type de données accepte les nombres décimaux avec un nombre quelconque de chiffres après la virgule. Ensuite, la création de la table foods ressemble à ce qui suit :

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER,
	price			NUMERIC(6,2)
);

Dans l'instruction CREATE TABLE ci-dessus, nous utilisons le type de données NUMERIC(6,2) pour stocker les prix d'une longueur maximale de 6 chiffres, dont 2 après la virgule. Par exemple, 10.25, 1.3, et 1234.56 sont des valeurs valables pour NUMERIC(6,2).

Le type de données booléen

Un autre type de données important est BOOLEAN. Ce type de données est utilisé pour représenter ou stocker dans une table l'une des deux seules valeurs possibles : TRUE ou FALSE.

Supposons que nous voulions identifier les produits alimentaires qui sont certifiés biologiques. Nous pouvons inclure une colonne nommée is_organic_certified du type de données BOOLEAN. Comme vous pouvez l'imaginer, la valeur TRUE dans la colonne is_organic_certified indique que l'article alimentaire est certifié biologique. La nouvelle version de l'instruction CREATE TABLE est la suivante :

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_on			DATE,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

À ce stade, nous disposons d'une table avec plusieurs colonnes. Créons un nouvel enregistrement en utilisant INSERT comme nous l'avons fait précédemment :

INSERT INTO foods VALUES ('Apple Pie','Dessert','11/07/2022',3,3.78, True);

Et encore une fois, nous faisons un SELECT pour voir les données dans le tableau.

SELECT food_name, food_category, prepared_on,
       valid_days, price, is_organic_certified
FROM foods;
Quel type de données choisir pour une colonne lors de la création d'une table en SQL ?

Avant de conclure cette section, je voudrais vous recommander deux articles sur les types de données numériques. Le premier, "Understanding Numerical Data Types in SQL", traite des différents types de données numériques disponibles dans les bases de données SQL. Le second est "Numeric vs. Decimal Data Types in SQL" avec une explication intéressante des différences entre les types de données SQL NUMERIC et DECIMAL.

Types de données liés à la date et à l'heure

Nous avons déjà introduit le type de données DATE pour stocker une valeur de date unique dans une table SQL. Dans cette section, nous présentons deux autres types de données liés aux valeurs de date et d'heure.

Le premier est TIMESTAMP pour stocker un point dans le temps avec la date et l'heure. Par exemple, nous pouvons stocker la date et l'heure de naissance d'une personne comme '1998-03-03 11:23:15' dans une colonne du type de données TIMESTAMP.

Essayons ceci avec notre tableau foods. Supposons que nous voulions stocker non seulement la date de préparation de l'aliment, mais aussi l'heure, car l'heure précise peut avoir de l'importance pour la péremption des aliments dans certains cas. Alors, l'instruction CREATE TABLE devient :

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Lorsque nous enregistrons un nouvel enregistrement dans la table foodsla valeur de prepared_at doit suivre un format tel que '2022-11-03 11:30:45'. Cela dit, nous n'avons pas besoin de stocker les secondes car ce niveau de détail n'est pas nécessaire pour la péremption des aliments. Nous pouvons donc omettre les secondes et utiliser des valeurs du type '2022-11-03 11:30'. La colonne TIMESTAMP acceptera cette valeur et stockera '2022-11-03 11:30:00' dans la base de données.

Un autre type de données lié à la date et à l'heure est INTERVAL, utilisé pour représenter une période de temps. Par exemple, la valeur '11:30' du type INTERVAL représente une période de 11 heures et 30 minutes, et la valeur '1:20:35.145' représente 1 heure, 20 minutes, 35 secondes et 145 millisecondes.

Ce ne sont pas les seuls formats valables pour les valeurs INTERVAL. Il existe de nombreux formats différents pour spécifier une valeur de type INTERVAL en fonction des unités de temps (jours, heures, minutes ou secondes) que l'on souhaite inclure.

Appliquons ce type de données à notre table foods. Supposons que nous ayons une période d'expiration pour chaque article alimentaire : 8 heures pour une salade, 24 heures pour une purée de pommes de terre, etc. Pour stocker cette information, nous incluons la colonne expiration_period du type de données INTERVAL. L'instruction CREATE TABLE modifiée ressemble à ceci :

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN,
	expiration_period		INTERVAL
);

Je vous recommande l'article "Àquoi sert SQL ?", qui explique pourquoi les compétences en matière de données comme SQL sont si importantes. Il existe également un article intéressant intitulé "An Overview of MySQL Data Types" qui explique les types de données les plus importants disponibles dans MySQL.

Apprenez les types de données SQL et créez vos propres tables

Nous avons couvert les principaux types de données SQL dans cet article. Nous avons commencé par les types de données textuelles, puis nous avons abordé les types de données numériques et nous avons terminé par des types de données plus spécifiques comme BOOLEAN, INTERVAL et TIMESTAMP.

J'aimerais également vous suggérer quelques articles supplémentaires. Le premier est "Qu'est-ce que SQL ?" où vous trouverez des réponses à des questions de haut niveau comme " Qu'est-ce que SQL ? " ou " Pourquoi devrais-je l'apprendre ? " Le second est "Syntaxe SQL" pour ceux qui commencent le processus d'apprentissage de SQL. En informatique, la syntaxe des langages est l'une des principales raisons d'un apprentissage frustrant, il est donc important de prendre un bon départ avec la syntaxe SQL.

Il existe d'autres sujets importants liés aux types de données que nous n'avons pas abordés dans le cadre de cet article. Par exemple, il existe une technique appelée casting qui consiste à changer le type de données d'une donnée donnée en un autre type de données valide.

SQL est un langage facile à apprendre. Toutefois, il existe de nombreux concepts ou techniques - comme le casting - à maîtriser pour tirer parti de toute la puissance du langage. Continuez à apprendre SQL, pratiquez SQL, investissez dans vos compétences et investissez en vous-même !