Pourquoi les types de données sont essentiels
Une table, c’est une structure… mais chaque colonne doit aussi savoir quel genre de valeur elle accepte.
C’est exactement le rôle des types de données.
Imaginez que chaque colonne est une boîte. Une boîte “TEXT” accepte des mots, une boîte “INTEGER” accepte des nombres entiers,
une boîte “DATE” accepte des dates. Si vous mettez une mauvaise chose dans la mauvaise boîte, vous créez des bugs et des données incohérentes.
Un type de données définit la nature d’une valeur stockée dans une colonne
(texte, nombre, date, etc.) et influence les contrôles, les comparaisons et les tri.
À la fin, vous saurez choisir rapidement le bon type pour une colonne, et éviter les pièges classiques (dates en texte, nombres stockés en texte, etc.).
Les types les plus utilisés (à connaître en priorité)
Il existe beaucoup de variantes selon le moteur (SQLite, MySQL, PostgreSQL…).
Pour débuter, retenez surtout ces grandes familles :
🔤
TEXT
Indispensable
Pour : noms, prénoms, emails, villes, descriptions, catégories…
Exemple : nom TEXT, email TEXT
nom TEXT NOT NULL
🔢
INTEGER
Indispensable
Pour : âges, quantités, nombres de pages, identifiants, année…
Exemple : age INTEGER, stock INTEGER
stock INTEGER DEFAULT 0
💶
REAL / DECIMAL
Très courant
Pour : prix, notes, mesures (ex : 12.5).
Exemple : prix REAL
prix REAL NOT NULL
📅
DATE / DATETIME
Très utile
Pour : date d’inscription, date de naissance, date/heure de commande…
Exemple : date_inscription DATE
date_inscription DATE
Mettre un nombre (prix, quantité, année) dans une colonne TEXT “par facilité” est une mauvaise habitude.
Vous aurez ensuite des tris absurdes (ex : 100 avant 20) et des comparaisons incohérentes.
Comment choisir le bon type (méthode simple)
Pour débuter, posez-vous ces questions dans l’ordre. C’est volontairement “mécanique” : ça évite les hésitations.
1
Est-ce que c’est du texte (mots, phrases) ?
Oui → TEXT
Exemples : nom, prénom, email, ville, catégorie, description.
2
Est-ce que c’est un nombre entier (sans virgule) ?
Oui → INTEGER
Exemples : stock, âge, année, nombre de pages, identifiant.
3
Est-ce que c’est un nombre avec virgule ?
Oui → REAL (ou DECIMAL selon le SGBD)
Exemples : prix, notes, mesures (poids, taille).
4
Est-ce que c’est une date (ou date + heure) ?
Oui → DATE ou DATETIME
Exemples : date d’inscription, date/heure de commande.
Si vous hésitez entre TEXT et un type numérique : demandez-vous si vous allez faire des calculs,
des comparaisons numériques, des tris numériques. Si oui, utilisez un type numérique.
Exemple concret : table “produits” bien typée
On reprend un exemple réaliste (e-commerce / restaurant) et on choisit un type cohérent pour chaque colonne.
CREATE TABLE produits (
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
description TEXT,
prix REAL NOT NULL,
stock INTEGER DEFAULT 0,
actif BOOLEAN DEFAULT TRUE,
date_creation DATE
);
🧠
Pourquoi “prix” en REAL ?
Parce qu’un prix peut avoir des décimales (ex : 12.50).
Et vous pourrez faire des calculs (total commande, TVA, etc.).
📦
Pourquoi “stock” en INTEGER ?
Parce que le stock est une quantité entière.
En plus, on met une valeur par défaut : 0.
✅
Pourquoi “actif” en BOOLEAN ?
Pour activer/désactiver un produit sans le supprimer.
Et “TRUE” par défaut pour les nouveaux produits.
📅
Pourquoi “date_creation” ?
Parce qu’une date sert souvent au tri, à l’historique, aux statistiques.
Ne stockez pas une date en texte “au hasard” (ex : “12/01/2025”).
Cas fréquents : email, téléphone, code postal…
Certains champs ressemblent à des nombres, mais ne doivent pas être traités comme des nombres.
Voici les décisions les plus “pro” à adopter dès le début.
✉️
Email
Type conseillé : TEXT
Bonne pratique : UNIQUE (si un email = un compte).
email TEXT UNIQUE
📞
Téléphone
Type conseillé : TEXT
Pourquoi ? Parce qu’il peut contenir +, des espaces, et des zéros au début.
telephone TEXT
🏷️
Code postal
Type conseillé : TEXT
Parce que ce n’est pas un nombre pour calculer. Et certains pays ont des lettres.
code_postal TEXT
🔖
Statut / catégorie
Type conseillé : TEXT
Ex : “en_attente”, “valide”, “annule”.
statut TEXT DEFAULT 'en_attente'
Un code postal “06700” stocké en INTEGER deviendra “6700”.
Vous perdez l’information. C’est une raison majeure d’utiliser TEXT pour certains “codes”.
Erreurs courantes et comment les éviter
❌
Mettre des nombres dans TEXT
Symptôme : tri incohérent (100 avant 20), comparaisons étranges.
Solution : utilisez INTEGER ou REAL selon le cas.
❌
Mettre des dates “à la main” en texte
Symptôme : impossible de filtrer facilement par date, formats différents (12/01/2025 vs 2025-01-12).
Solution : stockez une DATE (ou un format standard) et gardez un format cohérent.
❌
Choisir un type “au hasard”
Symptôme : vous modifiez la table souvent, ou vous contournez en mettant tout en texte.
Solution : appliquez la méthode simple du chapitre (texte vs entier vs décimal vs date).
Quand “quelque chose ne marche pas” (tri, calcul, filtre), vérifiez d’abord le type de la colonne.
Dans beaucoup de cas, le problème vient d’une colonne en TEXT alors qu’elle devrait être numérique.
Exercice pratique : typer correctement 3 tables
Dans votre base exercices.db, créez 3 tables en respectant les types. Prenez 10 minutes et faites-le “propre”.
1
Table “utilisateurs”
- id (clé primaire)
- nom (obligatoire)
- email (unique)
- telephone (texte)
- date_inscription (date)
- actif (booléen, true par défaut)
2
Table “commandes”
- id (clé primaire)
- total (décimal)
- date_commande (date/heure)
- statut (texte : “en_attente”, “valide”, “annule”)
3
Table “avis”
- id (clé primaire)
- note (entier, de 1 à 5)
- commentaire (texte)
- date_avis (date)
CREATE TABLE utilisateurs (
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
email TEXT UNIQUE,
telephone TEXT,
date_inscription DATE,
actif BOOLEAN DEFAULT TRUE
);
Vérification des connaissances
Question 1
Pourquoi éviter de stocker un prix en TEXT ?
- Tri incohérent (texte ≠ nombre)
- Calculs difficiles ou incorrects
- Comparaisons “bizarres”
Question 2
Téléphone : INTEGER ou TEXT ? Pourquoi ?
TEXT (peut contenir +, espaces, zéros initiaux)
- Ce n’est pas une valeur à additionner
Question 3
Quel type pour une quantité de stock ?
INTEGER (nombre entier)
DEFAULT 0 est une bonne pratique
Vous avez maintenant appris :
- Ce qu’est un type de données et pourquoi c’est crucial
- Les types les plus utilisés : TEXT, INTEGER, REAL, DATE/DATETIME, BOOLEAN
- Une méthode simple pour choisir le bon type
- Des décisions “pro” pour les champs piégeux (téléphone, code postal)
- Les erreurs classiques et comment les éviter
- Un exercice de création de tables en respectant les types
Dans le prochain chapitre, vous allez enfin insérer des données dans vos tables avec INSERT.