Deux machines, une seule étiquette
Le service informatique d'une entreprise note son parc d'ordinateurs dans un tableur. Deux portables ont reçu la même étiquette, PC-014.
Une panne est signalée sur PC-014. Le technicien se rend chez la mauvaise personne et remplace la mauvaise machine.
Une base de données empêche cette erreur. Elle refuse la seconde étiquette PC-014 avant que le mal ne soit fait.
À la fin de cette leçon
Remarque
Je peux créer des tables avec des clés dans une base de données relationnelle.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Table | des lignes et des colonnes qui décrivent une seule sorte de chose | |
| Type de donnée | la sorte de valeur qu'une colonne accepte | INT |
| Clé primaire | la colonne qui identifie chaque ligne, sans doublon possible | id |
| Clé étrangère | une colonne qui désigne une ligne d'une autre table | service_id |
| Contrainte | une règle que la base vérifie à chaque changement | NOT NULL |
| NULL | la marque d'une valeur manquante |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une table décrit une seule sorte de chose
Une base relationnelle range ses données dans des tables. Une table décrit une seule sorte de chose : des clients, des produits ou des commandes.
Chaque colonne a un type de donnée. La base refuse du texte dans une colonne de nombres.
Avant tout, dites au terminal comment se connecter. Ces deux Runs servent pour toute la leçon.
Accepter le certificat du serveur
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un nom court pour la boutique
alias sql='mariadb -h db -u student -pstudent shop -t -e'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Les colonnes de la table products
sql "DESCRIBE products"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : choisir un type
| Fait à ranger | Type | Pourquoi |
|---|---|---|
| Un nombre d'articles | INT | Des nombres entiers seulement |
| Un prix en euros | DECIMAL(8,2) | Les centimes exacts, sans erreur d'arrondi |
| Le nom d'une ville | VARCHAR(40) | Du texte de 40 caractères au plus |
| Un jour d'achat | DATE | La base sait compter les jours entre deux dates |
| Machine hors service ou non | BOOLEAN | Seulement oui ou non |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une clé primaire identifie chaque ligne
Une clé primaire est une colonne dont la valeur est différente dans chaque ligne. Elle ne peut jamais être NULL.
C'est souvent un numéro que la base compte seule : AUTO_INCREMENT. La base refuse une seconde ligne avec la même clé.
Une clé peut aussi réunir deux colonnes. C'est alors le couple qui doit être unique.
Une clé faite de deux colonnes
sql "DESCRIBE order_items"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent qu'un nom ou un courriel fait une bonne clé primaire. Les noms se répètent et les gens changent de courriel. Prenez un numéro compté par la base. Gardez le courriel dans une colonne UNIQUE à côté.
Une clé étrangère désigne une autre table
Un ordinateur appartient à un service. La table des ordinateurs ne recopie pas la description du service. Elle garde son numéro.
Cette colonne est une clé étrangère. La base vérifie que ce numéro existe dans la table des services.
On ne peut donc pas affecter une machine à un service qui n'existe pas.
Construisez deux tables à vous
Le laboratoire vous laisse créer toute base dont le nom commence par student_. Vous allez créer student_parc pour un petit parc informatique.
La base de la boutique reste intacte. Lancez ces Runs dans l'ordre. Un Run qui finit par une erreur fait partie de la leçon.
Créer votre base
sql "CREATE DATABASE IF NOT EXISTS student_parc"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un nom court pour elle
alias parc='mariadb -h db -u student -pstudent student_parc -t -e'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Repartir de zéro : supprimer les deux tables
parc "DROP TABLE IF EXISTS ordinateurs, services"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer la table services
parc "CREATE TABLE services (id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(40) NOT NULL UNIQUE, etage INT NOT NULL DEFAULT 0)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer la table ordinateurs
parc "CREATE TABLE ordinateurs (id INT AUTO_INCREMENT PRIMARY KEY, etiquette VARCHAR(10) NOT NULL UNIQUE, service_id INT NOT NULL, prix DECIMAL(8,2) NOT NULL, achete_le DATE NOT NULL, FOREIGN KEY (service_id) REFERENCES services(id))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter deux services
parc "INSERT INTO services (nom, etage) VALUES ('Comptabilite', 2), ('Juridique', 3)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une machine pour le service 9
parc "INSERT INTO ordinateurs (etiquette, service_id, prix, achete_le) VALUES ('PC-001', 9, 899.00, '2026-03-02')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter Juridique une seconde fois
parc "INSERT INTO services (nom) VALUES ('Juridique')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Essayer de supprimer la table services
parc "DROP TABLE services"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin
Donnez un utilisateur à chaque machine. Créez dans student_parc une table utilisateurs avec un numéro en clé primaire, un nom et un numéro de badge UNIQUE.
Ajoutez ensuite à ordinateurs une colonne utilisateur_id avec ALTER TABLE, et une clé étrangère vers utilisateurs. Prouvez que chaque règle fonctionne avec une ligne qui l'enfreint.