Le modèle relationnel

Découvre comment les bases de données relationnelles organisent les données avant d’écrire ta première requête. Comprends pourquoi les organisations conservent leurs données partagées dans une base de données plutôt que dans une feuille de calcul, quel est le rôle d’un système de gestion de bases de données et quelle est la place de SQL. Lis des tables, des lignes et des colonnes, choisis des types de données adaptés et traite les valeurs manquantes (NULL) en évitant les pièges habituels. Utilise des clés primaires et étrangères pour identifier les lignes et relier les tables, reconnais les associations un-à-plusieurs et plusieurs-à-plusieurs, et lis un schéma de base de données et son diagramme pour trouver où chaque information est stockée.

DébutantUnité 1 sur 6 de la formation Formation : SQL : requêtes SELECT, jointures et agrégation

Ce que tu vas apprendre

  1. Décrire pourquoi les organisations conservent leurs données partagées dans des bases de données relationnelles, le rôle d’un système de gestion de bases de données et la façon dont SQL permet de l’utiliser.
    • Expliquer pourquoi les organisations utilisent des bases de données
      Distinguer les données, une base de données et un système de gestion de bases de données, et expliquer ce qu’une base de données relationnelle fait mieux qu’une feuille de calcul partagée ou des fichiers séparés.
    • Reconnaître les systèmes de bases de données et le rôle de SQL
      Nommer les systèmes de bases de données relationnelles courants, décrire comment les applications s’y connectent et expliquer ce qu’est SQL et comment ses instructions sont regroupées.
  2. Utiliser le vocabulaire des tables, des lignes et des colonnes pour lire correctement des données et expliquer les règles qui rendent une table relationnelle.
    • Décrire les éléments d’une table
      Identifier les tables, les lignes, les colonnes et les valeurs dans des données d’exemple, et associer les termes courants à leurs noms relationnels formels.
    • Expliquer les règles qui rendent une table relationnelle
      Appliquer les règles du modèle relationnel concernant les lignes, les colonnes et les valeurs, et reconnaître les différences de comportement entre les tables SQL et les feuilles de calcul.
  3. Associer chaque colonne à un type de données adapté, éviter les erreurs courantes de type avec les montants, les codes et les dates, et utiliser NULL correctement.
    • Reconnaître les principaux types de données SQL
      Identifier les types courants pour les nombres, le texte, les dates et les booléens, lire leurs paramètres de taille et de précision et connaître les différences entre les systèmes de bases de données.
    • Choisir un type de données adapté à des données réelles
      Choisir des types adaptés aux montants, aux quantités, aux codes, aux dates et aux noms en se demandant comment les valeurs seront utilisées, et éviter les erreurs dues à des types inadaptés.
    • Utiliser NULL correctement
      Expliquer ce que signifie NULL, le distinguer de zéro et de la chaîne vide, et prévoir son comportement dans les comparaisons, les calculs et les contraintes.
  4. Utiliser les clés primaires pour identifier chaque ligne, les clés étrangères pour relier les tables et reconnaître les associations un-à-plusieurs, un-à-un et plusieurs-à-plusieurs qu’elles créent.
    • Identifier les clés candidates et la clé primaire
      Déterminer quelles colonnes ou combinaisons de colonnes identifient chaque ligne de façon unique et expliquer les règles que doit respecter une clé primaire.
    • Choisir entre clé naturelle et clé de substitution
      Comparer les identifiants du monde réel à ceux générés par le système, déterminer lesquels font de bonnes clés primaires et protéger les identifiants naturels par des contraintes d’unicité.
    • Relier des tables par des clés étrangères
      Expliquer comment une clé étrangère fait référence à une ligne d’une autre table, ce que protège l’intégrité référentielle et ce qui se produit lorsque les lignes référencées sont modifiées ou supprimées.
    • Reconnaître les associations un-à-plusieurs, un-à-un et plusieurs-à-plusieurs
      Déterminer combien de lignes de chaque côté d’un lien peuvent être associées et montrer comment les clés étrangères et les tables d’association représentent chaque type d’association.
  5. Lire un schéma présenté sous forme de définitions de tables ou de diagramme et l’utiliser avec des données d’exemple pour trouver où les informations sont stockées et comment les tables sont reliées.
    • Lire un schéma et les définitions de ses tables
      Distinguer un schéma des données qu’il décrit, lire la notation d’un schéma et les instructions CREATE TABLE, et interpréter les contraintes qu’elles déclarent.
    • Lire un diagramme de schéma
      Interpréter les boîtes, les marques de clés, les lignes de liaison et les symboles en patte d’oie d’un diagramme de schéma, et formuler chaque association représentée.
    • Répondre à des questions à l’aide d’un schéma et de données d’exemple
      Localiser le stockage de chaque information, suivre les clés entre les tables à la main et utiliser les contraintes du schéma pour déterminer quelles données sont autorisées.

Modèle relationnel : cours

5 chapitres

1

Le rôle d’une base de données

Une boutique peut commencer avec une feuille de calcul, mais les données partagées soulèvent vite des questions plus complexes : quelles coordonnées des clients sont à jour, qui peut les modifier et que se passe-t-il lorsqu’un paiement est interrompu à mi-parcours ? Un système de base de données apporte un cadre commun à ces questions. Distingue les informations stockées du logiciel qui les gère, puis découvre comment les applications utilisent SQL pour demander et modifier des données. Les mêmes principes servent à une petite application sur téléphone et au système de rapport d’une grande entreprise.

1.1 Des informations partagées et des modifications fiables

Un nom de client, une date de commande et un prix sont des données : des faits enregistrés. Une base de données est un ensemble organisé de données liées. Un système de gestion de bases de données, ou SGBD, est le logiciel qui stocke et gère cet ensemble. PostgreSQL est un SGBD ; la base store d’une boutique est un ensemble qu’il gère.

Stocker chaque information à sa place

Supposons qu’une feuille de calcul répète le numéro de téléphone de Maria Garcia pour chacune de ses 14 ventes. Un changement de numéro nécessite 14 modifications. Une cellule oubliée laisse des enregistrements contradictoires. Dans une base relationnelle, customers contient les coordonnées de Maria une seule fois, sous customer_id 1. Chaque vente enregistre cet identifiant. Mettre à jour son numéro dans une seule ligne client permet aux recherches ultérieures de trouver un seul numéro à jour.

Une base de données relationnelle organise les informations en tables. « Relationnel » vient de relation, le nom mathématique d’une table. E. F. Codd a présenté le modèle en 1970. Sa séparation centrale est utile : les utilisateurs décrivent les données voulues au moyen de tables et de valeurs ; le SGBD se charge de les trouver sur disque.

Règles et accès partagé

Une table possède des colonnes nommées, des types de données et des contraintes. Une contrainte est une règle vérifiée par le SGBD, comme « une commande doit faire référence à un client existant ». Ces vérifications protègent les données partagées lorsque plusieurs applications utilisent la même base. Le contrôle des types varie : PostgreSQL rejette un texte comme 'twelve' dans une colonne de prix numérique, tandis que les tables SQLite ordinaires ont des types souples.

Un SGBD gère aussi les utilisateurs simultanés, les autorisations, les sauvegardes et la restauration. Deux membres du personnel peuvent travailler sur des données partagées sans échanger des copies distinctes d’une feuille de calcul. Les autorisations peuvent permettre à un utilisateur chargé des rapports de lire les ventes tout en limitant les personnes qui peuvent les modifier. Un processus de sauvegarde et de restauration aide à récupérer les données après une panne.

Garder un ensemble de modifications groupées

Une transaction traite plusieurs modifications comme une seule unité : elles sont toutes enregistrées ou aucune ne l’est. Transférer 200 € entre des comptes nécessite de les soustraire du compte courant et de les ajouter au compte d’épargne. Si une panne interrompt le transfert avant sa fin, le SGBD peut annuler la transaction inachevée. Enregistrer uniquement la soustraction laisserait un solde incorrect.

Une feuille de calcul reste utile pour les petits calculs et les mises en page souples. Une base de données fournit une structure définie pour les enregistrements partagés et des règles. Une feuille Excel a une limite fixe de 1 048 576 lignes ; les bases de données gèrent couramment des ensembles bien plus grands, dans les limites du stockage, du matériel et du produit utilisé.

Différentes données et différentes tâches

Les données structurées s’inscrivent dans des colonnes nommées communes à chaque ligne. Les données semi-structurées, comme les documents JSON, peuvent avoir des champs différents d’un enregistrement à l’autre. Les données non structurées, comme l’audio ou les courriels en texte libre, n’ont pas cette structure tabulaire fixe. Les organisations combinent souvent des bases relationnelles avec des bases de documents, des systèmes clé-valeur ou des systèmes de stockage de fichiers.

La charge de travail compte aussi. Un système à charge transactionnelle, aussi appelé OLTP, enregistre les événements quotidiens par de nombreuses lectures et écritures de petite taille : une commande, un paiement, un changement d’adresse. Un système à charge analytique, ou OLAP, lit de nombreux enregistrements stockés pour répondre à des questions comme « Comment les ventes mensuelles ont-elles évolué par région ? » Les deux peuvent utiliser des tables et des clés relationnelles.

Points clés

  • Une base de données contient des données liées ; un SGBD les gère.
  • Les données relationnelles sont organisées en tables, avec des règles vérifiées par le SGBD.
  • Une transaction enregistre ou annule ensemble un groupe de modifications.
  • Les coordonnées partagées d’un client peuvent être mises à jour à un seul endroit et retrouvées grâce à un identifiant.
  • Les tâches transactionnelles enregistrent des événements ; les tâches analytiques synthétisent les données stockées.

1.2 SQL, les produits de bases de données et les applications

SQL est un langage de requête structuré. PostgreSQL, MySQL, SQLite, Microsoft SQL Server et Oracle Database sont des produits qui l’utilisent. SQL Server est un SGBD, et non un autre nom pour SQL lui-même.

Comment une application accède aux données

Dans une architecture client-serveur, un programme serveur gère la base de données. Un client, comme un site web, un outil de rapport ou un éditeur de requêtes, envoie des demandes à ce serveur. PostgreSQL, MySQL, SQL Server et Oracle fonctionnent couramment ainsi. Des outils comme psql, pgAdmin, DBeaver et SQL Server Management Studio permettent d’examiner les bases de données et d’envoyer des demandes.

Un moteur embarqué fonctionne dans une application. SQLite utilise une bibliothèque et un fichier de base de données ordinaire, comme store.db, sans serveur de base de données distinct. Il est courant dans les téléphones, les navigateurs et les applications de bureau. Avec un service cloud géré, comme Azure SQL Database, Amazon RDS ou Google Cloud SQL, un fournisseur exploite les serveurs de base de données. « Géré » indique qui exploite le service ; cela ne remplace pas les tables et les clés par un autre modèle.

Une installation de SGBD peut gérer plusieurs bases de données, comme store et payroll. Une connexion sélectionne la base à utiliser, sous réserve des autorisations.

Indiquer le résultat voulu

SQL est déclaratif : il décrit le résultat demandé tandis que le SGBD choisit comment l’obtenir. Lis cette instruction :

SELECT first_name, city
FROM customers
WHERE state = 'TX';

Elle demande les prénoms et les villes des lignes de clients dont l’État est TX. Elle ne dit rien de la page du disque à lire en premier. Les mots-clés en majuscules facilitent la lecture de l’instruction ; select et SELECT ont le même sens. Un point-virgule termine normalement une instruction.

Reconnaître le rôle de l’instruction
GroupeRôleExemples
Définition de données, LDDDéfinir ou modifier la structureCREATE TABLE, ALTER TABLE, DROP TABLE
Manipulation de données, LMDLire ou modifier les lignesSELECT, INSERT, UPDATE, DELETE
Contrôle des donnéesGérer les autorisationsGRANT, REVOKE
Contrôle des transactionsEnregistrer ou annuler une transactionCOMMIT, ROLLBACK

Certains ouvrages placent SELECT dans un groupe distinct, le langage de requête de données. La distinction utile est le rôle réel de l’instruction : ajouter une colonne modifie la structure ; ajouter un client modifie les données.

SQL est devenu une norme ANSI en 1986 et est normalisé au niveau international sous la référence ISO/IEC 9075. Les produits ajoutent leurs propres dialectes. Une limite de dix lignes s’écrit LIMIT 10 dans SQLite, PostgreSQL et MySQL, TOP 10 dans SQL Server ou FETCH FIRST 10 ROWS ONLY en SQL standard et dans Oracle.

Lire le texte et les autres objets de base de données

Les littéraux textuels utilisent des apostrophes : 'TX'. Le SQL standard utilise des guillemets doubles pour les identifiants, comme les noms de colonnes. Une apostrophe à l’intérieur du texte est doublée : 'O''Brien' représente O'Brien.

Une vue est une requête enregistrée utilisée comme une table ; une vue ordinaire ne possède aucune ligne stockée en propre. Un index est une structure de recherche qui peut aider à trouver rapidement des lignes. La plupart des systèmes indexent automatiquement les clés primaires. Les procédures stockées et les fonctions sont du code enregistré qui peut être exécuté par son nom.

Points clés

  • SQL décrit un résultat voulu ; le SGBD choisit comment l’obtenir.
  • Les systèmes client-serveur reçoivent les demandes par un serveur ; SQLite est embarqué dans une application.
  • Le LDD modifie la structure, tandis que le LMD lit ou modifie les lignes.
  • Les apostrophes délimitent le texte ; une apostrophe à l’intérieur du texte est doublée.
  • Une vue enregistre une requête ; un index accélère les recherches.
  • Les dialectes SQL partagent les principes relationnels, mais diffèrent sur certains points de syntaxe.
2

Lire correctement une table

Une table donne une structure claire à chaque type d’enregistrement : les lignes décrivent des éléments individuels et les colonnes décrivent leurs propriétés. Lis cette structure avant d’interpréter une valeur. Distingue ensuite les règles logiques de la table de la disposition d’une feuille de calcul : la position n’identifie pas un enregistrement, une liste de numéros de téléphone contient plusieurs valeurs et une ligne de total n’a pas le même sens qu’une vente. Ces distinctions facilitent grandement la suite du travail sur les clés et les schémas.

2.1 Lignes, colonnes et valeurs

Une table stocke des informations sur un type d’éléments. Chaque ligne de customers décrit un client ; chaque colonne contient une propriété. Leur intersection contient une valeur.

Lire un enregistrement sur toute sa ligne

Voici une sélection de colonnes de clients :

customer_idfirst_namelast_namecitystatezip_code
1MariaGarciaAustinTX78701
2JamesWilsonDenverCO80202
3AishaJohnsonBostonMA02108
4WeiChenSeattleWA98101

Trouve customer_id 4, puis lis city : la ville de Wei est Seattle. Pour trouver qui habite à Denver, lis le nom sur la ligne de Denver : James Wilson. Une ligne voisine décrit un autre client.

La table complète comporte huit colonnes : customer_id, first_name, last_name, email, phone, city, state et zip_code. Le numéro de téléphone de James est NULL : la valeur est manquante, mais sa ligne possède toujours la colonne de téléphone.

Associer les termes
Terme courantTerme relationnel formelAutre terme courant
TableRelationAucun
LigneN-upletEnregistrement
ColonneAttributChamp

Un n-uplet est une ligne entière, et non une cellule. Un attribut désigne une propriété commune à toutes les lignes. « Enregistrement 4 » peut désigner un identifiant ou une position à l’affichage ; vérifie lequel, car les positions peuvent changer.

Compter les éléments de la table

Le degré compte les colonnes ; la cardinalité d’une table compte les lignes. La table complète a pour degré 8 et pour cardinalité 4. L’affichage ci-dessus montre six colonnes sans changer le degré de la table.

Ajouter un client porte la cardinalité à 5 ; le degré reste égal à 8. Ajouter birth_date porte le degré à 9 et donne à chaque ligne un emplacement pour cette valeur, même lorsqu’elle est manquante. Un nouveau client ajoute une ligne, et non une colonne.

La cardinalité d’une association, comme un-à-plusieurs, décrit les liens autorisés plutôt que le nombre de lignes d’une table.

Lire les noms qualifiés

Les noms de colonnes sont uniques dans une table. orders.customer_id et customers.customer_id distinguent des colonnes de même nom dans des tables différentes : le point sépare les noms de la table et de la colonne.

La notation snake_case utilise des mots en minuscules séparés par des tirets bas, comme dans zip_code. En SQL, les noms contenant des espaces doivent être placés entre guillemets. Les noms de tables au singulier ou au pluriel conviennent tous deux ; applique une convention cohérente.

Points clés

  • Une ligne décrit un élément ; une colonne décrit une propriété.
  • Relation, n-uplet et attribut désignent respectivement une table, une ligne et une colonne.
  • Le degré compte les colonnes ; la cardinalité d’une table compte les lignes.
  • Un nom qualifié par la table indique à quelle table appartient une colonne.

2.2 Les règles derrière la grille

Une table relationnelle possède une structure logique qui dépasse son apparence rectangulaire. Dans le modèle formel, c’est un ensemble de lignes. Un ensemble ne contient pas de doublons et n’a pas d’ordre. Les colonnes sont identifiées par leur nom : déplacer une colonne à l’affichage ne change donc pas l’information qu’elle représente.

L’identité ne vient pas de la position

Un SGBD peut renvoyer les lignes dans un ordre différent après des mises à jour, des suppressions ou un changement dans sa façon de lire le stockage. « La troisième ligne » n’est pas un moyen durable d’identifier un client. customer_id 3 identifie toujours Aisha, même lorsque sa ligne apparaît en premier. Une requête qui exige un ordre précis le demande avec ORDER BY.

Les tables SQL diffèrent des relations formelles : sans clé primaire ou autre contrainte d’unicité adaptée, elles peuvent contenir des lignes identiques. Deux copies de ('Coffee mug', 12.50) ne comportent aucune valeur permettant de les distinguer dans ces colonnes. Une clé primaire donne à chaque ligne un identifiant unique et empêche les lignes entièrement identiques.

Une colonne, un domaine

Un domaine est l’ensemble des valeurs autorisées dans une colonne. Une quantité a un type entier et peut aussi nécessiter une règle imposant qu’elle soit positive. Un code d’État est du texte, mais toute valeur textuelle n’est pas un code d’État valide. Les types de données et les contraintes décrivent les valeurs autorisées au SGBD.

Toutes les lignes partagent les mêmes colonnes. Une commande ne peut pas recevoir une colonne supplémentaire pour un mot de cadeau qui lui soit propre. La table peut avoir une colonne gift_note pour chaque commande, avec NULL lorsqu’aucun mot n’a été enregistré. Les informations facultatives ont elles aussi un emplacement défini.

Séparer les valeurs individuelles

Une valeur atomique est une seule valeur pour l’usage de la colonne. Une cellule de téléphone contenant « 512-555-0147, 512-555-0199 » contient une liste de deux numéros. Il devient difficile de trouver, de vérifier ou de supprimer un seul numéro. Une table customer_phones peut donner à chaque numéro de téléphone sa propre ligne, avec customer_id pour indiquer à qui il appartient.

Atomique ne signifie pas que toute valeur textuelle doit être divisée en ses plus petits éléments. Un nom de ville peut contenir plusieurs mots et rester une seule valeur de ville. La question est de savoir si la cellule stocke une seule information du type représenté par la colonne ou un ensemble qui devrait être traité séparément.

Examiner avec un regard critique un export de feuille de calcul

Une feuille de ventes peut comporter un en-tête répété au milieu, une ligne en bas portant la mention « TOTAL » et un prix écrit « 12,50 (promotion) ». Ces choix de présentation sont utiles à une personne, mais ils mélangent différents types de contenu dans les mêmes colonnes.

Pour la lire comme une table relationnelle :

  1. Traite les noms de colonnes comme l’en-tête, et non comme des enregistrements de vente.
  2. Consacre chaque ligne de données à une vente ; calcule le total à partir de ces lignes.
  3. Stocke le prix numérique séparément d’une note sur la promotion.
  4. Donne une clé à chaque vente pour que sa ligne puisse être identifiée.

Une ligne de total mêlée aux ventes pourrait être comptée comme une vente supplémentaire ou ajoutée une nouvelle fois au total. Une note mélangée à un prix numérique empêche les opérations numériques ordinaires.

Tables logiques et stockage physique

Une table est la vue logique de l’utilisateur. Le SGBD peut stocker ses données dans des fichiers, des pages et des index organisés pour un accès efficace. L’indépendance des données signifie que des modifications de cette organisation physique n’imposent pas de changer les noms des tables, le sens des colonnes ou les requêtes utilisées par les applications.

Points clés

  • Une relation formelle a des lignes distinctes et sans ordre ; SQL a besoin de contraintes pour empêcher les doublons.
  • L’ordre des lignes doit être demandé avec ORDER BY.
  • Le domaine d’une colonne décrit les valeurs qu’elle autorise.
  • Chaque cellule contient une seule valeur pour l’usage de sa colonne.
  • Toutes les lignes ont les mêmes colonnes, y compris des emplacements pour les valeurs manquantes.
3

Choisir les types et interpréter les données manquantes

Le type d’une colonne influence ce qui peut être stocké, l’ordre de tri des valeurs et les calculs qui ont un sens. Des chiffres peuvent représenter un nombre d’éléments ou un code ; ces usages demandent des types différents. Les montants doivent être stockés exactement, tandis que les mesures peuvent souvent utiliser des valeurs approchées. Les informations manquantes nécessitent un traitement particulier avec NULL. Découvre ces choix et les différences importantes entre produits, notamment le stockage souple de SQLite et la gestion des comparaisons inconnues par SQL.

3.1 Les principaux types de données SQL

Un type de données indique au SGBD quel genre de valeur contient une colonne et comment la traiter. L’addition numérique, la comparaison de textes et le classement des dates sont des opérations différentes. Un nom de type familier peut aussi se comporter différemment selon le produit de base de données.

Nombres entiers, exacts et approchés
CatégorieTypes courantsUsage adapté
Nombres entiersINTEGER, SMALLINT, BIGINTComptages, quantités et identifiants entiers
Décimaux exactsDECIMAL(p, s), NUMERIC(p, s)Montants et autres valeurs décimales exactes
Nombres approchésREAL, FLOAT, DOUBLE PRECISIONMesures pour lesquelles des écarts d’arrondi sont acceptables

Dans PostgreSQL, MySQL et SQL Server, INTEGER va de −2 147 483 648 à 2 147 483 647. BIGINT atteint 9 223 372 036 854 775 807 ; le stockage des entiers de SQLite peut aussi atteindre cette plage.

Pour les décimaux, la précision est le nombre total de chiffres et l’échelle est le nombre de chiffres après la virgule. DECIMAL(8, 2) laisse six chiffres avant la virgule : son maximum est de 999 999,99. Le prix 12,50 convient ; 1 234 567,00 ne convient pas. PostgreSQL, MySQL, SQL Server et Oracle stockent les décimaux exactement. SQLite accepte cette déclaration mais n’impose ni sa précision ni son échelle, et peut stocker les fractions en virgule flottante binaire.

La virgule flottante donne une approximation de nombreuses fractions décimales. En double précision, l’addition de 0,1 et de 0,2 donne 0,30000000000000004. SQLite traite ces littéraux décimaux comme des nombres à virgule flottante. PostgreSQL traite les littéraux décimaux écrits sans précision de type comme des nombres exacts : le même calcul écrit peut donc y être exact ; des valeurs explicitement déclarées en double précision montrent l’approximation.

Texte, dates et indicateurs

CHAR(n) est un texte de longueur fixe ; PostgreSQL et SQL Server complètent les valeurs plus courtes avec des espaces. VARCHAR(n) accepte des longueurs variables jusqu’à une limite. SQLite ignore les deux paramètres de longueur et ne complète pas les valeurs. TEXT contient du texte long dans SQLite, PostgreSQL et MySQL. SQL Server utilise VARCHAR(MAX) ou NVARCHAR(MAX) pour cet usage ; son ancien type TEXT est obsolète.

Un DATE contient une date du calendrier, un TIME une heure et un TIMESTAMP du SQL standard une date et une heure. Écris les dates dans l’ordre année-mois-jour, comme '2026-03-02', pour éviter de confondre le 2 mars et le 3 février. Les dates stockées dans un type date ont un format interne ; l’application choisit leur format d’affichage. SQLite n’a pas de type date dédié et stocke couramment les dates sous forme de texte ISO. SQL Server utilise DATETIME2 pour une date et une heure : son TIMESTAMP désigne ROWVERSION, un compteur de version binaire.

Un BOOLEAN représente TRUE ou FALSE, ou NULL lorsque la valeur manque. PostgreSQL possède un type booléen ; SQL Server utilise BIT, MySQL traite BOOLEAN comme un petit entier et SQLite stocke ces indicateurs sous forme de 1 et 0. Les types binaires comme BLOB ou BYTEA de PostgreSQL stockent des octets, notamment de petites images. Les fichiers plus volumineux sont souvent stockés séparément, avec un chemin ou une URL dans une table.

L’affinité de type de SQLite

Dans les tables SQLite ordinaires, un type déclaré est une préférence appelée affinité de type. Une colonne INTEGER convertit '42' en nombre 42, mais peut conserver 'abc' comme texte. Une table SQLite STRICT rejette un texte qui ne peut pas devenir un entier valide.

Points clés

  • Les types entiers contiennent des nombres entiers ; les décimaux exacts et la virgule flottante répondent à des besoins différents.
  • La précision compte tous les chiffres ; l’échelle compte les chiffres après la virgule.
  • Une date ISO sous forme de texte suit l’ordre année-mois-jour.
  • Les longueurs de texte, le stockage des booléens et les types de date diffèrent selon les dialectes.
  • L’affinité de SQLite est souple ; les tables STRICT imposent les types qu’elles prennent en charge.
  • Dans SQL Server, TIMESTAMP représente une version de ligne, et non une date et une heure.

3.2 Choisir un type selon l’usage de la valeur

Pars du sens d’une valeur et de l’usage qui en sera fait. Un code postal américain contient des chiffres, mais personne n’additionne des codes postaux pour obtenir un total qui a un sens. Une quantité contient aussi des chiffres, et additionner des quantités est utile. L’apparence seule guide mal le choix d’un type.

Poser cinq questions
  1. Quelles sont les valeurs courantes et quelles valeurs extrêmes doivent pouvoir être stockées ?
  2. Les valeurs serviront-elles à des calculs ?
  3. Doivent-elles être exactes ou une approximation est-elle acceptable ?
  4. Comment doivent-elles être triées et comparées ?
  5. Quelle taille convient aux valeurs futures réalistes ?
Montants et mesures

Les montants doivent être exacts. Dans PostgreSQL, MySQL et SQL Server, un prix peut utiliser DECIMAL(8, 2). Trois articles à 12,50 € coûtent exactement 37,50 €. Le stockage en virgule flottante binaire peut laisser de minuscules erreurs après des additions répétées, ce qui rend les comparaisons exactes peu fiables. Dans SQLite, déclarer DECIMAL ne fournit pas de stockage décimal exact ; utilise des centimes entiers pour les montants exacts : 12,50 € est ainsi stocké sous la forme 1 250.

Une mesure comme un poids peut utiliser REAL lorsque de petits écarts d’arrondi sont acceptables. Choisis l’unité comme élément du sens de la colonne : weight_lb indique les livres dans son nom. Un type numérique seul n’enregistre pas cette unité.

La devise doit aussi être précisée. Si une table mélange des devises, ajoute currency_code, avec des codes comme USD, EUR ou JPY. Le nombre de décimales varie selon la devise et les montants en devises différentes doivent être convertis avant de pouvoir être additionnés.

Les codes et les noms sont du texte

Utilise du texte pour les codes postaux américains, les numéros de téléphone, les numéros de compte et les codes de stock. Le code postal de Boston '02108' perd son zéro initial lorsqu’il est converti en entier. VARCHAR(10) peut aussi contenir un code ZIP+4, comme '02108-1234'. Les numéros de téléphone peuvent contenir un signe plus, des espaces et des tirets. Ces caractères font partie de la représentation d’un identifiant et ne sont pas des signes arithmétiques.

Prévois assez de place pour les noms et les adresses réels. « Christopher Montgomery » comporte 22 caractères : VARCHAR(10) est donc trop court. PostgreSQL et SQL Server le rejettent ; MySQL le rejette en mode strict et peut le tronquer sinon. SQLite le stocke, car les longueurs de texte déclarées sont ignorées. Un champ de longueur variable suffisamment grand évite de rejeter des noms courants sans réserver sa longueur maximale pour chaque ligne.

Le tri révèle un mauvais choix

Le tri de texte compare les caractères. Des nombres stockés sous forme de texte peuvent apparaître dans l’ordre '1', '10', '2', '25', '3'. Une colonne numérique trie ces valeurs selon leur ordre numérique. Choisir le texte pour chaque champ reporte les vérifications et les conversions sur les calculs ultérieurs.

Les dates présentent un piège similaire. Les dates américaines sous forme de texte placent '12/01/2025' après '03/02/2026' dans l’ordre textuel, bien que décembre 2025 soit antérieur. Utilise un type date ou, dans SQLite, du texte ISO mis en forme de façon cohérente afin de préserver l’ordre chronologique.

Examiner ensemble les types d’un produit

Un produit peut utiliser product_id INTEGER, sku VARCHAR(20), name VARCHAR(100), price DECIMAL(8, 2), weight_lb REAL, in_stock BOOLEAN et added_on DATE. Chaque type répond à un usage : identification, stockage d’un code, nom, montant exact, mesure, indicateur ou date. Dans SQLite, stocke le prix en centimes entiers et la date sous forme de texte ISO.

Points clés

  • Choisis les types selon le sens, les calculs, l’exactitude, le tri et une taille réaliste.
  • Stocke les codes sous forme de texte pour conserver les zéros initiaux et la ponctuation.
  • Utilise un type décimal exact pour les montants lorsque le système le permet et des centimes entiers dans SQLite.
  • Un montant numérique nécessite une devise et une mesure nécessite une unité.
  • Le stockage sous forme de texte entraîne un tri textuel, même lorsque tous les caractères sont des chiffres.

3.3 NULL et les résultats inconnus

NULL marque une valeur manquante. Il diffère de zéro, de la chaîne vide '' et du texte 'NULL'. Une remise connue de 0 signifie qu’il n’y a pas de remise ; une remise NULL signifie que le montant n’est pas enregistré. Une colonne qui autorise NULL accepte les données manquantes, tandis que NOT NULL impose une valeur.

Une valeur manquante peut avoir plusieurs sens

Aucun numéro de téléphone n’est enregistré pour James Wilson. La commande 102 n’a pas de date d’expédition parce qu’elle n’a pas encore été expédiée. Un client qui est une entreprise peut ne pas avoir de nom de famille applicable. Tous ces cas peuvent être représentés par NULL, mais NULL n’indique pas la raison applicable. Un dictionnaire de données devrait préciser le sens pour chaque colonne.

Une chaîne vide est une valeur textuelle présente dans PostgreSQL et SQLite. Oracle traite actuellement la chaîne vide comme NULL. Les outils de requête peuvent afficher les deux sous forme d’une cellule qui semble vide : l’apparence seule ne permet donc pas de les distinguer.

Les comparaisons peuvent être inconnues

Les comparaisons SQL ont trois résultats possibles : TRUE, FALSE et UNKNOWN. Une comparaison faisant intervenir NULL, y compris NULL = NULL, vaut UNKNOWN. On ne sait pas si deux informations manquantes ont la même valeur.

Une clause WHERE ne conserve que les résultats TRUE. Lis ces conditions :

  • phone IS NULL trouve les numéros de téléphone manquants.
  • phone IS NOT NULL trouve les numéros de téléphone enregistrés.
  • phone = NULL donne UNKNOWN et ne trouve aucune ligne.

La négation d’une comparaison ne récupère pas une valeur manquante. Ajoute Daniel Brown, dont l’État vaut NULL, aux quatre clients de la boutique. La condition state <> 'TX' conserve CO, MA et WA : trois lignes. Daniel est exclu car la comparaison portant sur son État vaut UNKNOWN. Pour inclure aussi les États manquants, la condition est state <> 'TX' OR state IS NULL.

Combiner les conditions avec soin

Considère que UNKNOWN signifie « pourrait être TRUE ou FALSE ». Un résultat n’est déterminé que si les deux possibilités donnent le même résultat.

ExpressionRésultatRaison
TRUE AND UNKNOWNUNKNOWNLa seconde partie détermine si les deux sont vraies.
FALSE AND UNKNOWNFALSEUne partie fausse suffit déjà à rendre AND faux.
TRUE OR UNKNOWNTRUEUne partie vraie suffit déjà à rendre OR vrai.
FALSE OR UNKNOWNUNKNOWNLa seconde partie détermine le résultat de OR.
NOT UNKNOWNUNKNOWNLa négation ne peut pas fournir l’information manquante.
Calculs et synthèses

Un calcul arithmétique ordinaire avec NULL donne NULL : 5 + NULL vaut NULL. Le prix d’une ligne multiplié par une quantité manquante est lui aussi manquant, et non égal à zéro. Concaténer du texte avec || et NULL donne NULL dans PostgreSQL et SQLite ; la concaténation d’Oracle traite NULL comme une chaîne vide.

Les fonctions de synthèse ignorent généralement les entrées NULL. Avec cinq clients, dont James et Daniel sans numéro de téléphone, COUNT(*) compte les cinq lignes. COUNT(phone) compte les trois numéros enregistrés. La moyenne de 4, NULL et 2 est de 3, car la somme des deux nombres connus est divisée par deux ; traiter NULL comme zéro donnerait à tort 2.

Utilise NOT NULL pour les informations qui doivent être présentes, comme une date de commande. Cette contrainte n’impose pas un nombre positif ni un texte non vide : ce sont des règles distinctes. Les clés primaires exigent un identifiant non NULL ; les tables SQLite ordinaires comportent une exception historique pour certaines déclarations de clé primaire, donc NOT NULL explicite y est important.

Points clés

  • NULL marque une information manquante ; 0 et la chaîne vide ont des sens différents.
  • Teste les valeurs manquantes avec IS NULL ou IS NOT NULL.
  • Les comparaisons avec NULL produisent UNKNOWN ; WHERE ne conserve que TRUE.
  • AND, OR et NOT doivent tenir compte de UNKNOWN.
  • Un calcul arithmétique ordinaire avec NULL produit NULL.
  • COUNT(*) compte les lignes ; COUNT(column) compte les entrées non NULL.
  • Documente pourquoi NULL est autorisé dans chaque colonne.
4

Identifier et relier les enregistrements

Les clés répondent à deux questions différentes : « De quelle ligne s’agit-il ? » et « À quelle ligne liée fait-elle référence ? » Une clé primaire donne à une table un identifiant principal, tandis qu’une clé étrangère porte une référence. Évalue les identifiants possibles en tenant compte des données futures, et pas seulement d’un petit échantillon. Lis ensuite les liens dans les deux sens, en déterminant aussi si un lien est facultatif. Les clés composites et les tables d’association étendent ces principes aux enregistrements identifiés par des combinaisons et aux associations plusieurs-à-plusieurs.

4.1 Clés candidates et clés primaires

Une clé identifie une ligne au moyen de ses valeurs. Les noms peuvent se répéter ; les identifiants de client distinguent les enregistrements afin de pouvoir les lire, les modifier ou les relier.

Vérifier l’unicité et la minimalité

Une super-clé est une colonne ou une combinaison de colonnes qui identifie une ligne de façon unique. Une clé candidate est une super-clé minimale : retirer une colonne quelconque fait perdre cette garantie. Choisis une clé candidate comme clé primaire ; les autres sont des clés alternatives.

Supposons que employee_id, ssn et email soient chacun obligatoires et uniques. Chacun est une clé candidate. (employee_id, department) est une super-clé, mais pas une clé candidate : employee_id identifie l’employé à lui seul. Un nom de famille répété échoue au test d’unicité.

TermeTest
Super-cléLa combinaison identifie-t-elle une ligne ?
Clé candidateEst-elle unique sans colonne superflue ?
Clé primaireQuelle clé candidate est l’identifiant principal ?
Clé alternativeQuelle autre clé candidate reste disponible ?

Quatre clients portant des noms de famille différents ne suffisent pas à établir une clé : un cinquième peut partager un nom. L’unicité doit être vérifiée pour toutes les données futures autorisées. Une répétition réfute une clé proposée ; un échantillon sans répétition nécessite tout de même une règle métier qui la justifie.

Lire la déclaration

Une table possède au maximum une clé primaire. Ses valeurs sont uniques et ses colonnes doivent être non NULL. Des valeurs stables évitent de modifier les références à répétition. Cherche PRIMARY KEY : ni le nom d’une colonne ni sa position ne la déclarent comme clé primaire.

Si le client 1 existe, un autre client avec la clé 1 est rejeté. Une clé omise nécessite une valeur par défaut ou générée. Dans SQLite, INTEGER PRIMARY KEY génère un entier lorsque la valeur est omise ou vaut NULL. Certaines autres déclarations de clé primaire dans les tables SQLite ordinaires autorisent historiquement NULL ; un NOT NULL explicite, une table STRICT ou la forme de clé primaire entière comble cette lacune.

Lire une clé composite

Dans enrollments(student_id, course_id, term, grade), un étudiant peut suivre plusieurs cours et suivre à nouveau un cours lors d’une autre période. (student_id, course_id, term) identifie une inscription : c’est une clé primaire composite, et non trois clés primaires distinctes.

Les éléments individuels peuvent se répéter ; la combinaison complète ne le peut pas. La plupart des SGBD créent un index sur la clé primaire pour les recherches, mais la clé ne garantit pas l’ordre des résultats d’une requête.

Points clés

  • Une clé candidate est une super-clé minimale.
  • Une clé candidate est la clé primaire ; les autres sont des clés alternatives.
  • L’unicité d’une clé doit être vérifiée pour les données futures autorisées.
  • Une clé primaire est unique, non NULL et peut couvrir plusieurs colonnes.
  • C’est la déclaration qui établit la clé, et non son nom ou sa position.

4.2 Identifiants naturels et générés

Une clé naturelle provient de données du monde réel, comme le VIN d’un véhicule, l’ISBN d’une édition de livre ou un code d’État. Une clé de substitution existe uniquement pour identifier une ligne, souvent sous la forme d’un entier généré ou d’un UUID.

Choisir un identifiant durable

Privilégie des valeurs uniques, présentes, stables, compactes et pouvant être communiquées sans risque. Les noms se répètent ; les numéros de téléphone et les adresses électroniques changent ou sont partagés. Les numéros de sécurité sociale américains sont sensibles et certains clients n’en ont pas ; les utiliser dans les tables qui y font référence diffuse ces informations.

Un customer_id généré permet à Maria de conserver l’identifiant 1 lorsque ses coordonnées changent. Un state_code naturel, comme TX, peut bien convenir car il est compact, normalisé et utile dans les enregistrements d’adresses.

Protéger séparément les identifiants métier

Une même personne peut s’inscrire deux fois et recevoir deux identifiants de substitution. Les identifiants distinguent les lignes ; ils ne détectent pas les personnes en double.

Si l’adresse électronique doit identifier chaque compte, utilise NOT NULL UNIQUE. UNIQUE seul autorise plusieurs NULL dans PostgreSQL, SQLite et MySQL. SQL Server autorise normalement un seul NULL dans une contrainte d’unicité portant sur une colonne. La présence et l’unicité sont deux règles distinctes.

L’adresse électronique obligatoire et unique est une clé alternative. La modifier laisse inchangé le numéro de client de substitution dans les commandes existantes. Modifier une clé primaire référencée exige aussi que les références des lignes enfants restent cohérentes.

Reconnaître la syntaxe des clés générées
SystèmeForme courante pour un entier généré
SQL standard, PostgreSQL, OracleGENERATED ALWAYS AS IDENTITY
MySQLAUTO_INCREMENT
SQL ServerIDENTITY(1,1)
SQLiteINTEGER PRIMARY KEY

PostgreSQL possède aussi l’ancienne forme SERIAL. Les suppressions, les insertions échouées et les opérations annulées peuvent laisser des trous. Les identifiants 1, 2 et 4 désignent trois lignes, et non quatre. Renuméroter pour combler les trous peut rompre des références.

Reconnaître les UUID

Un UUID est un identifiant de 128 bits, généralement écrit sur 36 caractères avec des tirets : 7c9e6679-7425-40de-944b-e07fc1f90ae7. Des ordinateurs peuvent les générer indépendamment avec un très faible risque de collision, ce qui est utile lorsque des enregistrements de plusieurs endroits doivent être combinés.

Les UUID occupent plus d’espace et sont plus difficiles à lire que de petits entiers. Choisis selon la façon dont les enregistrements sont créés et référencés. Dans les deux cas, une clé est un identifiant : sa valeur maximale n’est pas un nombre de lignes et son ordre ne reflète pas nécessairement le moment des événements.

Points clés

  • Les clés naturelles proviennent d’identifiants du monde réel ; les clés de substitution servent à identifier les lignes.
  • Privilégie des clés primaires stables, compactes, présentes et pouvant être communiquées sans risque.
  • Une clé de substitution n’empêche pas les doublons d’enregistrements du monde réel.
  • NOT NULL UNIQUE peut protéger un identifiant alternatif obligatoire.
  • Les trous dans les identifiants générés sont normaux ; les identifiants ne sont pas des nombres de lignes.
  • Les UUID permettent de générer indépendamment des identifiants avec un très faible risque de collision.

4.3 Clés étrangères et références valides

Une clé étrangère est une colonne ou un groupe de colonnes qui fait référence à une clé primaire ou à une autre clé unique appropriée. La table qui porte la référence est la table enfant ; celle vers laquelle elle pointe est la table parente. Lorsqu’une contrainte est contrôlée, une clé étrangère non NULL doit correspondre à une clé parente existante.

Suivre une valeur entre les tables
order_idcustomer_idorder_dateshipped_date
10112026-03-022026-03-04
10222026-03-05NULL
10312026-03-092026-03-10

orders.customer_id fait référence à customers.customer_id. La commande 102 pointe vers le client 2, James Wilson. Les commandes 101 et 103 pointent toutes deux vers le client 1, Maria Garcia. Les répétitions sont autorisées dans la clé étrangère ; la clé parente référencée est unique.

Cette règle est l’intégrité référentielle. Une commande pour le client 99 est rejetée si le client 99 n’existe pas. Sinon, elle serait orpheline : une ligne enfant sans parent correspondant. Un nom seul ne crée aucune contrainte. Une clé étrangère nommée placed_by peut tout de même faire référence à customer_id ; c’est la référence déclarée qui crée le lien, avec des types correspondants pour les colonnes de clé.

Facultatif ou obligatoire

Un coupon_id qui autorise NULL peut valoir NULL lorsqu’une commande n’a pas de coupon. Un customer_id déclaré NOT NULL impose que chaque commande ait une référence à un client, et la clé étrangère impose que ce client existe. Ces deux contraintes agissent ensemble : l’une exige une valeur et l’autre vérifie la référence.

Les clés étrangères ne sont pas obligées de relier des tables distinctes. Dans employees(employee_id, name, manager_id), manager_id peut faire référence à employee_id dans la même table. La référence au responsable de la personne à la direction générale peut être NULL.

Une règle est nécessaire lorsque le parent change
ActionEffet lorsqu’un parent référencé est supprimé
NO ACTION ou RESTRICTRefuse la suppression tant que des références subsistent, selon le moment où la contrainte est vérifiée
CASCADESupprime aussi les lignes enfants qui font référence au parent
SET NULLConserve les lignes enfants et efface leur référence ; la colonne doit autoriser NULL

Avec l’action par défaut, le client 1 ne peut pas être supprimé tant que les commandes 101 et 103 font référence à ce client. Une suppression en cascade d’une commande vers ses lignes peut avoir un sens, car ces lignes appartiennent à cette commande. ON UPDATE précise le comportement correspondant lorsqu’une clé parente change. La cascade ne signifie pas que la suppression d’un enfant supprime son parent.

Références composites et contrôle

Si une ligne de commande est identifiée par (order_id, product_id), une expédition qui fait référence à cette ligne a besoin des deux colonnes. La combinaison doit correspondre à une ligne existante. Faire correspondre séparément une commande et un produit ne suffit pas : ce produit peut ne jamais avoir figuré dans cette commande. Une référence composite obligatoire déclare toutes ses colonnes NOT NULL.

PostgreSQL, SQL Server, Oracle et le moteur InnoDB habituel de MySQL contrôlent les clés étrangères déclarées. Dans SQLite, active et vérifie le contrôle des clés étrangères pour chaque connexion avec PRAGMA foreign_keys = ON; avant de t’y fier. Une contrainte déclarée mais désactivée ne peut pas protéger les lignes. Les clés étrangères ne combinent pas non plus les résultats de requêtes à elles seules ; une requête doit suivre explicitement le lien, généralement par une jointure.

Points clés

  • La valeur non NULL d’une clé étrangère doit correspondre à une clé référencée existante.
  • Les valeurs d’une clé étrangère peuvent se répéter ; celles d’une clé parente sont uniques.
  • NOT NULL rend le lien obligatoire.
  • Les actions référentielles déterminent ce qui arrive aux lignes enfants lorsqu’un parent change.
  • Une référence composite doit correspondre à la combinaison complète de la clé parente.
  • Le contrôle des clés étrangères de SQLite doit être activé pour chaque connexion.

4.4 Lire les cardinalités dans les deux sens

Pour identifier une association, pose deux questions : « Pour une ligne ici, combien de lignes là-bas peuvent être liées ? », puis la question inverse. Tiens compte du minimum comme du maximum. L’échantillon actuel montre ce qui s’est produit ; les contraintes décrivent ce qui est autorisé.

Un client, plusieurs commandes

Un client peut passer zéro ou plusieurs commandes. Chaque commande de la boutique appartient à exactement un client, car orders.customer_id est une clé étrangère non NULL. C’est une association un-à-plusieurs. La clé étrangère se trouve dans orders, du côté plusieurs : chaque commande stocke une référence à un client.

Maria a les commandes 101 et 103 ; James a la commande 102. Aisha et Wei n’en ont aucune. Leur absence de orders est valide. Une clé étrangère impose un parent pour chaque enfant, mais n’impose pas que chaque parent ait un enfant.

Une association un-à-un exige aussi l’unicité

Dans user_profiles(user_id, bio, photo_url), supposons que user_id soit à la fois la clé primaire et une clé étrangère vers users. Chaque profil fait référence à un utilisateur et un utilisateur peut avoir au plus un profil, car la clé du profil ne peut pas se répéter. Un utilisateur peut ne pas encore avoir de profil.

Une clé étrangère sans unicité autoriserait plusieurs profils pour le même utilisateur, ce qui donnerait une association un-à-plusieurs. La contrainte d’unicité change le maximum. Ces tables de profils distinctes permettent de séparer des informations facultatives ou sensibles de l’enregistrement principal de l’utilisateur.

Une association plusieurs-à-plusieurs utilise une table de paires

Une commande peut contenir plusieurs produits et un produit peut apparaître dans plusieurs commandes. Une table d’association, aussi appelée table de liaison, enregistre chaque paire :

order_idproduct_idquantityunit_price
10111212,50
1011218,99
10213134,00
10311412,50

order_id fait référence à orders ; product_id fait référence à products. La clé primaire composite (order_id, product_id) autorise le même produit dans différentes commandes, mais empêche qu’une même paire apparaisse deux fois. Deux liens un-à-plusieurs mettent en œuvre l’association plusieurs-à-plusieurs.

quantity et unit_price appartiennent à la paire. Ils décrivent la quantité de ce produit vendue dans cette commande et le prix facturé à ce moment-là. Le prix actuel d’un produit peut changer plus tard ; il ne doit pas modifier le prix facturé à l’époque.

Pour la commande 101, les deux montants de ligne correspondent à deux mugs à 12,50 dollars américains, soit 25,00 dollars américains, et à un chargeur à 8,99 dollars américains. Ensemble, ils coûtent 33,99 dollars américains. La quantité indique combien de mugs ont été achetés ; stocker deux lignes identiques pour les mugs entrerait en conflit avec la clé choisie pour cette table.

Éviter les listes et les emplacements fixes

Une cellule product_ids contenant '11,12' cache plusieurs références dans une seule valeur textuelle. Des colonnes comme product1, product2 et product3 imposent une limite fixe et laissent des emplacements inutilisés. Une table d’association ajoute une ligne pour chaque paire supplémentaire et permet au SGBD de vérifier chaque référence séparément.

Une association réflexive utilise le même principe dans une seule table : plusieurs employés peuvent faire référence au même responsable par manager_id. Le responsable est lui aussi une ligne d’employé. Lis chaque lien comme un rôle afin de distinguer l’identifiant de l’employé de la référence à son responsable.

Points clés

  • Lis le minimum et le maximum autorisés dans chaque sens.
  • Une association un-à-plusieurs stocke la clé étrangère du côté plusieurs.
  • Une clé étrangère unique limite une association à au plus un enfant par parent.
  • Une table d’association représente les liens plusieurs-à-plusieurs par des lignes de paires.
  • Des informations comme la quantité et le prix de vente peuvent appartenir à une paire.
  • Une référence à la même table relie des rôles au sein de cette table.
5

Lire un schéma et suivre ses liens

Un schéma consigne la structure qui donne leur sens aux tables : types de colonnes, identifiants, références et contraintes. Un diagramme rend ces liens visibles, tandis qu’une définition de table énonce précisément les règles. Utilise les deux formes pour trouver le chemin d’une question à sa réponse, puis utilise les lignes réelles pour obtenir les valeurs. Distingue la structure des données actuelles : savoir que les commandes font référence aux clients ne t’indique pas quels clients ont passé commande aujourd’hui.

5.1 Structure, données actuelles et contraintes

Un schéma décrit les tables, les colonnes, les types de données et les contraintes. Une instance correspond aux données stockées à un instant donné. Ajouter une commande modifie l’instance ; ajouter une colonne modifie le schéma. Le schéma indique ce qui peut être stocké, tandis que les lignes indiquent ce qui est stocké actuellement.

Lire une description abrégée

customers(customer_id, first_name, last_name, email, phone, city, state, zip_code) présente une table et ses colonnes. Les notes peuvent souligner les clés primaires ou les marquer PK, et marquer les références FK. Par exemple, orders(order_id PK, customer_id FK → customers, order_date, shipped_date) identifie la clé principale et le lien vers le client.

Lire une définition complète de table
CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  customer_id INTEGER NOT NULL REFERENCES customers (customer_id),
  order_date DATE NOT NULL,
  shipped_date DATE
);

Lis une colonne à la fois. order_id est la clé primaire entière. customer_id est obligatoire et doit faire référence à un client. order_date est obligatoire. shipped_date peut être NULL. Cette définition donne la structure autorisée, et non une liste des commandes existantes.

Les contraintes répondent à différentes questions :

ContrainteCe qu’elle vérifie
PRIMARY KEYUn identifiant unique de ligne, éventuellement composite
NOT NULLUne valeur est présente
UNIQUELes valeurs non NULL répétées sont interdites ; le traitement de NULL varie
REFERENCESUne référence correspond à une clé parente
CHECKUne condition ne doit pas être FALSE
DEFAULTFournit une valeur lorsqu’elle est omise

Une valeur par défaut ne remplace pas une valeur invalide fournie. Si status a pour valeur DEFAULT 'pending', omettre le statut fournit 'pending' ; une valeur fournie doit toujours respecter les autres règles de la colonne.

Combiner les règles d’une ligne de commande
CREATE TABLE order_items (
  order_id INTEGER NOT NULL REFERENCES orders (order_id),
  product_id INTEGER NOT NULL REFERENCES products (product_id),
  quantity INTEGER NOT NULL CHECK (quantity > 0),
  unit_price DECIMAL(8, 2) NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

La clé primaire en bas utilise deux colonnes. Une seconde ligne pour la même commande et le même produit est rejetée. Une quantité de 0 ne satisfait pas la vérification. Une quantité manquante ne satisfait pas NOT NULL : la vérification seule autoriserait NULL, car NULL > 0 vaut UNKNOWN et non FALSE. Un NOT NULL explicite sur les deux parties de la clé évite aussi l’exception historique de SQLite qui autorise NULL dans les clés composites. Dans SQLite, utilise des centimes entiers pour un unit_price exact ; la déclaration décimale seule ne fournit pas un stockage exact.

Trouver le schéma et ses significations

Dans l’interface de SQLite, .schema orders affiche la définition ; dans psql de PostgreSQL, \d orders la décrit. Les vues INFORMATION_SCHEMA répertorient les métadonnées de structure dans PostgreSQL, MySQL et SQL Server. SQLite répertorie les objets dans sqlite_schema et les outils graphiques montrent les tables et les colonnes en arborescence.

« Schéma » désigne aussi un espace de noms dans des systèmes comme PostgreSQL et SQL Server. sales.orders désigne la table des commandes dans le schéma des ventes. Un dictionnaire de données fournit les significations que la structure ne peut pas exprimer, comme la devise du prix ou le fait qu’une date d’expédition manquante signifie « non expédié ». Pour voir les lignes, une requête comme SELECT * FROM orders; lit l’instance actuelle.

Points clés

  • Un schéma est une structure ; une instance correspond aux données à un instant donné.
  • Lis ensemble le type d’une colonne et toutes ses contraintes.
  • Un nombre positif obligatoire nécessite à la fois NOT NULL et une vérification de valeur positive.
  • Une clé primaire composite est déclarée sur l’ensemble de la combinaison.
  • Un dictionnaire de données consigne des significations et des unités que le schéma ne précise pas.

5.2 Lire les extrémités d’une ligne de schéma

Un diagramme de schéma représente chaque table par une boîte. Le titre nomme la table ; le contenu liste les colonnes et souvent les types. PK marque les clés primaires et FK les clés étrangères. Les lignes d’association indiquent à quelle clé parente chaque clé étrangère fait référence.

Identifier d’abord le type de ligne

Certains diagrammes utilisent une flèche allant d’une clé étrangère à sa clé référencée. Une flèche de orders.customer_id vers customers.customer_id décrit la direction de la référence. D’autres outils utilisent des symboles aux extrémités pour décrire combien de lignes peuvent être liées. Vérifie la légende du diagramme : la direction d’une flèche et la cardinalité d’une association sont des informations différentes.

Lire les symboles en patte d’oie

Dans la notation en patte d’oie, une barre signifie un, un cercle signifie zéro et une patte à trois branches signifie plusieurs. Chaque extrémité de ligne indique un minimum et un maximum. Le symbole le plus proche de la table donne le maximum ; l’autre donne le minimum.

Symboles à l’extrémitéNombre de lignes autorisé à cette extrémité
Barre et barreExactement un
Cercle et barreZéro ou un
Barre et patte d’oieUn ou plusieurs
Cercle et patte d’oieZéro ou plusieurs

Lorsque tu pars d’une table, regarde les symboles à côté de l’autre table. Ils décrivent combien de lignes de cette autre table peuvent correspondre à ta ligne de départ.

Examiner les clients et les commandes

La ligne de la boutique porte les symboles « exactement un » à côté de customers et les symboles « zéro ou plusieurs » à côté de orders.

  1. Pars d’un client. Regarde l’extrémité des commandes : le client peut avoir zéro ou plusieurs commandes.
  2. Pars d’une commande. Regarde l’extrémité des clients : la commande appartient à exactement un client.
  3. Vérifie la définition : la clé étrangère non NULL se trouve dans orders, qui est donc du côté plusieurs, et chaque commande nécessite un client valide.

La patte d’oie est à côté de la table qui contient la clé étrangère dont les valeurs se répètent. Lire l’extrémité proche en partant de cette même table inverse le sens. Une référence au client qui autorise NULL changerait l’extrémité des clients en « zéro ou un » ; elle ne limiterait pas chaque client à une commande.

Reconnaître une table d’association

La boutique possède des liens un-à-plusieurs de orders vers order_items et de products vers order_items. Les deux extrémités « plusieurs » se rejoignent à order_items. Ses deux clés étrangères forment la clé primaire. Cette structure permet à une commande de contenir plusieurs produits et à un produit d’apparaître dans plusieurs commandes.

Le diagramme décrit les liens autorisés, et non les nombres actuels. Il permet à Maria d’avoir plusieurs commandes et à Aisha de n’en avoir aucune. Pour savoir combien chacune en a réellement, lis les lignes. Un minimum de un du parent vers l’enfant peut exprimer une règle métier supplémentaire ; une clé étrangère seule n’impose pas qu’un parent ait des enfants.

Reconnaître les styles de diagrammes apparentés

Un diagramme entité-association créé pendant la conception peut montrer les entités de l’activité avant que les tables existent. Les diagrammes de style Chen utilisent des ovales pour les attributs et des losanges pour les associations. Un diagramme de schéma montre les tables réelles et leurs clés déclarées. Les deux aident à communiquer la structure, mais leurs symboles doivent être lus selon leur propre légende.

Points clés

  • Un diagramme de schéma montre les tables et les liens de clés déclarés.
  • À chaque extrémité d’une ligne, lis le minimum et le maximum à l’aide de la légende.
  • L’extrémité opposée décrit les lignes liées à une ligne de départ.
  • L’extrémité plusieurs d’un lien un-à-plusieurs contient la clé étrangère dont les valeurs se répètent.
  • Deux extrémités plusieurs qui se rejoignent à une table peuvent révéler une table d’association.
  • Un diagramme indique les liens autorisés ; les lignes donnent les nombres réels.

5.3 Trouver les informations en suivant les clés

Localise chaque information demandée et suis les clés qui la relient à l’enregistrement de départ. Les noms peuvent se répéter ou changer ; fais plutôt correspondre les valeurs des clés.

Trouver le client d’une commande

« Où habite le client qui a passé la commande 102 ? » suit ce chemin :

  1. Trouve la commande 102 à l’aide de orders.order_id.
  2. Lis son customer_id : 2.
  3. Trouve le client 2 à l’aide de customers.customer_id.
  4. Lis customers.city : Denver.

Le numéro de commande 102 n’est pas l’identifiant du client. Les jointures SQL automatisent ces correspondances de clés ; les positions à l’affichage ne relient pas les enregistrements.

Trouver les produits et un total historique

La commande 101 possède les lignes order_items suivantes. Suis chaque product_id jusqu’à products pour trouver son nom :

product_idquantityunit_priceNom du produit
11212,50Mug
1218,99Chargeur de téléphone

Utilise le prix enregistré sur la ligne pour calculer le montant facturé :

  • Deux mugs à 12,50 dollars américains coûtent 25,00 dollars américains.
  • Un chargeur à 8,99 dollars américains coûte 8,99 dollars américains.
  • Total : 33,99 dollars américains.

Le prix actuel d’un produit pourrait donner un coût erroné pour une ancienne commande. La commande 102 contient une lampe à 34,00 dollars américains ; la commande 103 contient quatre mugs à 12,50 dollars américains, soit un total de 50,00 dollars américains.

Interpréter les valeurs manquantes et les règles

La date d’expédition de la commande 102 est NULL, documenté ici comme « non expédiée ». Teste-la avec IS NULL, et non avec une égalité à NULL.

Lis chaque contrainte pertinente lorsque tu évalues une modification :

  • Une ligne pour la commande 104 est rejetée si cette commande n’existe pas.
  • Une autre ligne avec la clé (101, 11) est rejetée car la paire existe déjà.
  • Une quantité de 0 ne satisfait pas la vérification de quantité positive.
  • Le comportement par défaut de la clé étrangère bloque la suppression du produit 11 tant que des lignes y font référence.

Une clé inutilisée ne rend pas une ligne valide si sa référence est manquante.

Identifier les nouvelles lignes

Lorsqu’un client existant achète deux produits existants différents, cela ajoute une ligne orders et deux lignes order_items. Le client et les produits existent déjà. Proposer un nouveau produit ajoute une ligne products, sans nécessiter de commande.

Points clés

  • Localise chaque information demandée avant de suivre le chemin de clés.
  • Fais correspondre les valeurs de clés étrangères aux clés référencées, et non aux noms ou aux positions des lignes.
  • Utilise le prix de la ligne de vente pour calculer les totaux historiques des commandes.
  • Vérifie chaque contrainte applicable lorsque tu évalues une modification proposée.
  • Un nouvel événement ajoute des lignes aux tables dont il crée les informations.

Modèle relationnel : exemples

5 Leçons Interactives

1

Des enregistrements partagés aux requêtes à la base de données

12 étapes
Découvre comment un SGBD permet d’utiliser des enregistrements liés, puis suis une requête depuis une application jusqu’à la base de données.
  1. 1
    IntroductionQui s’occupe des informations partagées ?

    Les équipes de vente, d’assistance et de direction d’une boutique utilisent les mêmes enregistrements de clients. Une base de données contient ces informations partagées et un logiciel appelé SGBD les gère.

    Découvre comment un système de base de données partage ces informations, maintient la cohérence des modifications grâce à une transaction et répond aux demandes des applications.

  2. 2
    ExplicationDistinguer l’ensemble de données du logiciel

    Les données sont des faits enregistrés. Une base de données est un ensemble organisé de données liées ; un SGBD est le logiciel qui le gère.

    Les clients et les commandes de la boutique sont des données. PostgreSQL les stocke, vérifie les règles et répond aux demandes.

  3. 3
    ExempleMettre à jour un seul numéro de téléphone

    Le numéro de téléphone de Maria apparaît sur 14 ventes dans une feuille de calcul. Une modification oubliée laisse des copies contradictoires.

    Stocke son numéro une seule fois sous customer_id 1 et fais-y référence depuis les ventes. Un changement de numéro ne nécessite alors qu’une mise à jour ; chaque vente conserve ses propres informations.

  4. 4
    AnalogieGarder deux modifications groupées

    Un transfert soustrait un montant du compte courant et l’ajoute au compte d’épargne. Enregistrer uniquement la soustraction laisserait des soldes incorrects.

    Une transaction enregistre les deux modifications ensemble ou les annule toutes deux, même si elles concernent plusieurs lignes ou tables.

  5. 5
    DéfiChoisir la protection

    Une réservation réduit le nombre de places disponibles, mais l’enregistrement de son paiement échoue. Les deux modifications appartiennent à une seule transaction. Que doit-il rester après l’annulation de cette transaction ?

    ---reveal---

    Aucune des deux modifications ne doit subsister. Annuler la réduction du nombre de places rétablit la disponibilité précédente et aucun enregistrement de paiement issu de cette transaction échouée n’est conservé. Ne garder que la modification des places laisserait une réservation partielle.

  6. 6
    LienReconnaître la charge de travail

    Passer une commande est une tâche transactionnelle : quelques lectures et écritures rapides. Comparer les ventes mensuelles par région est une tâche analytique : elle synthétise de nombreux enregistrements historiques.

    Une base de données de ventes peut servir aux deux activités.

  7. 7
    ExplicationSuivre la requête de l’application

    Les clients envoient des requêtes à un serveur de base de données, comme avec PostgreSQL ou SQL Server. SQLite fonctionne comme une bibliothèque dans l’application, sans serveur distinct.

    Un fournisseur de service cloud géré exploite les serveurs pour ses utilisateurs ; les tables et les requêtes restent utilisées.

  8. 8
    ExempleLire une requête déclarative

    SELECT first_name, city FROM customers WHERE state = 'TX'; demande deux colonnes pour les clients de TX.

    SQL est déclaratif : il indique le résultat et laisse au SGBD le choix des étapes pour l’obtenir. SQL est le langage ; PostgreSQL est un produit qui l’interprète.

  9. 9
    ConseilComprendre le rôle de l’instruction

    ALTER TABLE modifie la structure ; INSERT ajoute une ligne ; GRANT gère une autorisation ; COMMIT enregistre une transaction.

    Le texte utilise des apostrophes : 'TX'. Double une apostrophe interne : 'O''Brien'. Un point-virgule termine normalement une instruction.

  10. 10
    DéfiDistinguer structure et données

    Une boutique ajoute une colonne delivery_note, puis la remplit pour une commande. Ces deux opérations modifient-elles des lignes ?

    ---reveal---

    Ajouter la colonne modifie la structure : c’est de la définition de données. La remplir modifie les données stockées : c’est de la manipulation de données.

  11. 11
    DéfiRéunir les éléments

    Un site web envoie du SQL à un serveur PostgreSQL pour enregistrer un achat. Un responsable lit plus tard une vue ordinaire des ventes. La vue contient-elle une autre copie stockée de toutes ces lignes d’achat ?

    ---reveal---

    Non. Une vue ordinaire enregistre une requête qui lit les données sous-jacentes ; elle ne stocke pas ses propres lignes de résultat séparées. PostgreSQL reste le SGBD qui gère les enregistrements d’achats, tandis que le site web et l’outil de rapport sont des clients.

  12. 12
    RécapitulatifUn ensemble partagé aux responsabilités claires

    Une base de données contient des informations ; un SGBD gère le stockage, les règles, l’accès et la restauration. Les transactions maintiennent les modifications groupées.

    Les requêtes SQL concernent la structure, les lignes, les autorisations ou le contrôle des transactions. Identifie leur rôle avant d’en lire les détails.

2

Comprendre le sens d’une table

10 étapes
Localise une information, compte les éléments de la table et distingue les règles relationnelles de la disposition à l’affichage.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionCommencer par ce que représente une ligne
  2. 2
    ExempleTrouver la ville d’un client
  3. 3
    ExplicationUtiliser les noms formels
  4. 4
    DéfiPrévoir deux types d’ajouts
  5. 5
    Point cléIdentifier les enregistrements sans leur position
  6. 6
    AnalogieGarder une valeur pour chaque propriété
  7. 7
    ExplicationAssocier un type à son domaine
  8. 8
    DéfiInterpréter un export de feuille de calcul
  9. 9
    DéfiVérifier un nouvel enregistrement et ses valeurs
  10. 10
    RécapitulatifLire la structure avant les valeurs
3

Choisir le stockage et raisonner avec NULL

15 étapes
Applique les choix de types aux données métier et prévois l’effet des valeurs manquantes sur les comparaisons et les calculs.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDeux choix pour chaque colonne
  2. 2
    ExplicationDistinguer les familles de types numériques
  3. 3
    ConseilRemarquer les différences entre produits
  4. 4
    DéfiVérifier la plage d’un type décimal
  5. 5
    LienReconnaître les dates et les indicateurs
  6. 6
    ExplicationChoisir selon l’usage de la valeur
  7. 7
    ExempleStocker les montants exactement
  8. 8
    DéfiCorriger le type d’un code et d’une quantité
  9. 9
    ExplicationLire ce qui manque
  10. 10
    ExempleSuivre une comparaison inconnue
  11. 11
    Point cléUtiliser le test de valeur manquante
  12. 12
    DéfiCombiner le connu et l’inconnu
  13. 13
    ExempleCompter ce qui est présent
  14. 14
    DéfiVérifier l’interprétation d’un rapport
  15. 15
    RécapitulatifLaisser le sens guider le stockage
4

Construire des liens fiables à partir des clés

18 étapes
Évalue les identifiants, suis les clés étrangères et lis les associations un-à-plusieurs, un-à-un et plusieurs-à-plusieurs.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionL’identification précède le lien
  2. 2
    ExplicationVérifier l’unicité et la minimalité
  3. 3
    DéfiExaminer une inscription future
  4. 4
    ConseilDéclarer une seule clé primaire
  5. 5
    ExplicationChoisir un identifiant stable
  6. 6
    Point cléConserver une règle métier distincte
  7. 7
    DéfiInterpréter un trou sans renuméroter
  8. 8
    ExempleSuivre la référence d’une commande
  9. 9
    ExplicationRéférences obligatoires et facultatives
  10. 10
    DéfiLire une règle de suppression
  11. 11
    LienVérifier la référence complète
  12. 12
    ExplicationLire une association un-à-plusieurs dans les deux sens
  13. 13
    ExempleLimiter un lien à un
  14. 14
    ExempleReprésenter chaque paire commande-produit
  15. 15
    Point cléStocker une information sur la paire
  16. 16
    DéfiChoisir un lien pour une nouvelle situation
  17. 17
    DéfiCombiner identification et références
  18. 18
    RécapitulatifLes clés remplissent ensemble différents rôles
5

Lire un schéma pour répondre à une question

14 étapes
Lis les définitions et les extrémités des diagrammes, puis suis les enregistrements et détermine si les modifications proposées sont valides.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDistinguer le plan des enregistrements
  2. 2
    ExempleLire une définition de commande
  3. 3
    Point cléCombiner une vérification et une valeur obligatoire
  4. 4
    DéfiClasser deux modifications
  5. 5
    ConseilTrouver les règles complètes
  6. 6
    ExplicationLire la légende d’un diagramme
  7. 7
    ExemplePartir d’une ligne et regarder l’autre extrémité
  8. 8
    DéfiPrévoir un lien facultatif
  9. 9
    LienRepérer une table de paires
  10. 10
    ExempleSuivre la commande 102 jusqu’à sa ville
  11. 11
    ExempleCalculer à partir des lignes de vente
  12. 12
    DéfiÉvaluer une ligne proposée
  13. 13
    DéfiRelier les données, les règles et le sens
  14. 14
    RécapitulatifUtiliser chaque source pour ses propres informations

Modèle relationnel : QCM

50 Questions Pratiques en 5 séries

Série 1 : Lire les enregistrements, les types et les liens simples10 Questions Pratiques

Question 1 sur 10

Dans PostgreSQL, combien de chiffres peuvent apparaître avant la virgule dans une valeur DECIMAL(7, 2) ?
  1. 2
  2. 7
  3. 5
  4. 9
Afficher la réponseMasquer la réponse
Réponse : C
La précision compte tous les chiffres ; l’échelle en réserve deux après la virgule. Ainsi, 7 − 2 en laisse 5 avant la virgule. Choisir 7 revient à confondre la précision totale avec la limite de la partie entière.

Question 2 sur 10

Une réservation enregistre l’attribution d’une place et l’enregistrement du paiement correspondant. Quelle fonction de la base de données garantit que les deux modifications sont soit enregistrées ensemble, soit annulées ensemble ?
  1. Une contrainte d’unicité
  2. Une définition de table
  3. Une transaction
  4. Une vue enregistrée
Afficher la réponseMasquer la réponse
Réponse : C
Une transaction enregistre les deux modifications ensemble ou les annule toutes deux, ce qui maintient la cohérence entre la place et le paiement. Une contrainte d’unicité empêche les valeurs en double ; elle ne peut pas regrouper les modifications.

Question 3 sur 10

Une table comporte 6 colonnes nommées et 18 lignes. Après l’ajout de deux lignes, quels sont son degré et sa cardinalité ?
  1. Degré 20, cardinalité 6
  2. Degré 6, cardinalité 18
  3. Degré 8, cardinalité 20
  4. Degré 6, cardinalité 20
Afficher la réponseMasquer la réponse
Réponse : D
Aucune colonne n’a été ajoutée, donc le degré reste égal à 6 ; 18 + 2 donne une cardinalité de 20. Inverser ces nombres revient à confondre le nombre de propriétés et le nombre d’enregistrements.

Question 4 sur 10

Une table de matériel enregistre l’équipement 46 avec l’entrée de téléphone « 212-555-0108, 212-555-0116 ». Le personnel doit vérifier chaque numéro séparément. Comment organiser les données téléphoniques ?
  1. Garder une cellule de texte et augmenter sa longueur.
  2. Utiliser des lignes de téléphone liées, une par numéro.
  3. Ajouter une seconde ligne de matériel avec la même clé.
  4. Utiliser un type numérique plus grand pour les deux numéros.
Afficher la réponseMasquer la réponse
Réponse : B
Des lignes de téléphone liées donnent à chaque numéro sa propre valeur associée à l’équipement 46. Une cellule plus longue contient toujours une liste à analyser ; copier la ligne de matériel confond un équipement avec ses multiples numéros.

Question 5 sur 10

Les règles de l’entreprise exigent que badge_number soit présent et unique. Les services se répètent. Pourquoi (badge_number, service) est-il une super-clé mais pas une clé candidate ?
  1. Une valeur de service peut apparaître dans plusieurs lignes.
  2. Une clé primaire doit toujours contenir deux colonnes.
  3. Les numéros de badge pourraient cesser d’être uniques.
  4. Retirer le service laisse toujours une clé unique.
Afficher la réponseMasquer la réponse
Réponse : D
Retirer le service laisse badge_number, qui est unique : la paire n’est donc pas minimale. Les services répétés ne remettent pas en cause l’unicité de la paire ; c’est la colonne superflue qui l’empêche d’être candidate.

Question 6 sur 10

Un code d’entrepôt peut être « 0047 » ou « 47-A ». Il est comparé à des étiquettes et ne sert jamais à des calculs. Quel type préserve le mieux ces valeurs ?
  1. Un type textuel de longueur variable
  2. Un type numérique entier
  3. Un type numérique décimal exact
  4. Un type numérique à virgule flottante approché
Afficher la réponseMasquer la réponse
Réponse : A
Le texte conserve 0047 et 47-A comme identifiants. Un entier perd les zéros initiaux et ne peut pas représenter la lettre et le tiret. Choisis un type selon l’usage de la valeur.

Question 7 sur 10

Quatre lignes ont pour valeurs de région 'NE', 'SW', NULL et 'NW'. Combien de lignes satisfont WHERE region <> 'NE' ?
  1. 3
  2. 2
  3. 4
  4. 1
Afficher la réponseMasquer la réponse
Réponse : B
Seuls SW et NW satisfont la condition : 2 lignes. NE donne FALSE ; NULL donne UNKNOWN. Compter trois lignes inclut à tort UNKNOWN, alors que WHERE ne conserve que TRUE.

Question 8 sur 10

Tickets possède une clé étrangère event_id contrôlée et non NULL vers Events. Les événements 12 et 19 existent. Deux billets font déjà référence à l’événement 12. Que se passe-t-il pour un troisième billet faisant référence à l’événement 12 ?
  1. Il est accepté car le parent existe.
  2. Il est rejeté car event_id se répète.
  3. Il crée une autre ligne pour l’événement 12.
  4. Il modifie un billet existant pour l’événement 12.
Afficher la réponseMasquer la réponse
Réponse : A
L’événement 12 existe, donc la référence du billet est valide. La répétition d’une valeur de clé étrangère est autorisée sauf si une règle d’unicité distincte l’interdit ; l’unicité de la clé parente ne l’interdit pas.

Question 9 sur 10

Un développeur décrit les lignes nécessaires à un rapport et laisse PostgreSQL choisir comment les trouver. Quelle propriété de SQL cela illustre-t-il ?
  1. C’est un langage déclaratif.
  2. C’est un moteur de données.
  3. C’est un format de fichier.
  4. C’est une base de données.
Afficher la réponseMasquer la réponse
Réponse : A
Le SQL déclaratif indique le résultat ; le SGBD choisit les étapes pour l’obtenir. Un moteur embarqué décrit où le logiciel fonctionne, et non comment un langage exprime une demande.

Question 10 sur 10

Lis quantity INTEGER CHECK (quantity > 0) et status TEXT DEFAULT 'new'. Aucune des deux colonnes n’a NOT NULL. Une nouvelle ligne fournit la quantité NULL et omet le statut. Que stocke-t-on ?
  1. La ligne est rejetée par la vérification de quantité.
  2. La quantité devient 0 ; le statut devient 'new'.
  3. La quantité reste NULL ; le statut reste NULL.
  4. La quantité reste NULL ; le statut devient 'new'.
Afficher la réponseMasquer la réponse
Réponse : D
La vérification de quantité vaut UNKNOWN pour NULL, donc elle est satisfaite ; le statut omis reçoit new. Une vérification de valeur positive rejette FALSE, et non UNKNOWN : elle n’exige pas de valeur et ne convertit pas NULL en zéro.
Série 2 : Appliquer les règles dans une petite base de données10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une application utilise une vue ordinaire nommée open_jobs et un index sur jobs.job_id. Quel est le rôle de chacun ?
  1. La vue contient des lignes copiées ; l’index modifie le schéma.
  2. La vue enregistre une requête ; l’index aide à localiser les lignes.
  3. La vue accorde l’accès ; l’index fournit les valeurs manquantes.
  4. La vue stocke la table ; l’index enregistre une requête.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Une entreprise lit plusieurs années de lignes de factures pour comparer le chiffre d’affaires annuel par région. De quel type de charge de travail s’agit-il ?
  1. Une charge transactionnelle
  2. Une charge embarquée
  3. Une charge analytique
  4. Une charge de définition de données
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un rapport affiche l’élément 8 avant l’élément 3. Une exécution ultérieure affiche l’élément 3 en premier, sans qu’aucune valeur ait changé. Qu’est-ce qui explique ce changement ?
  1. L’ordre de sortie n’est pas précisé s’il n’est pas demandé.
  2. Le premier élément est devenu la clé primaire.
  3. Les positions des colonnes identifient désormais d’autres éléments.
  4. La table a nécessairement perdu une règle d’unicité.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Chaque lecteur d’une bibliothèque peut emprunter plusieurs livres et chaque livre peut être emprunté par plusieurs lecteurs au fil du temps. Quelle structure représente un emprunt ?
  1. Une ligne contenant les références du lecteur et du livre, ainsi que la date d’emprunt
  2. Une ligne de lecteur contenant une liste séparée par des virgules de tous les livres empruntés
  3. Une ligne de livre contenant une liste séparée par des virgules de tous les lecteurs précédents
  4. Une ligne de lecteur avec des colonnes de référence fixes book_1, book_2 et book_3
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Une table contient actuellement les identifiants générés 2, 5 et 8. Combien de lignes contient-elle ?
  1. 8 lignes
  2. 3 lignes
  3. 5 lignes
  4. 6 lignes
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un diagramme porte les symboles « exactement un » à côté de Departments et « zéro ou plusieurs » à côté de Employees. En partant d’un service, combien d’employés peuvent être liés ?
  1. Exactement un employé
  2. Un ou plusieurs employés
  3. Zéro ou un employé
  4. Zéro ou plusieurs employés
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Cinq relevés de contrôle sont 6, NULL, 12, NULL et 9. Que valent COUNT(*) et AVG(reading) ?
  1. 5 et 5,4
  2. 3 et 9
  3. 5 et 9
  4. 3 et 5,4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une table SQLite ordinaire déclare le libellé VARCHAR(4). Une ligne fournit le texte « Saison ». Que fait SQLite ?
  1. Il stocke seulement les quatre premières lettres.
  2. Il complète le mot avec deux espaces.
  3. Il rejette la ligne pour longueur excessive.
  4. Il stocke le mot complet de six lettres.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Orders contient la commande 620 avec account_id 14. Accounts contient le compte 14 à Phoenix et le compte 620 à Tulsa. Le account_id de la commande référence Accounts.account_id. Où se trouve le compte de la commande 620 ?
  1. À Tulsa, en faisant correspondre les deux identifiants 620
  2. À Phoenix, en suivant account_id 14
  3. Dans l’une ou l’autre ville, car les deux identifiants existent
  4. Dans aucune des deux villes, car les noms de clés diffèrent
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un atelier autorise une inscription par membre, séance et date. Les membres peuvent assister à différentes séances à une même date et suivre à nouveau une séance à une date ultérieure. Une séance peut accueillir plusieurs membres. Quelle combinaison identifie une inscription ?
  1. member_id et session_id
  2. member_id et la date
  3. member_id, session_id et la date
  4. session_id et la date
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 3 : Choisir les types et suivre les enregistrements liés10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

À l’extrémité parente d’un diagramme, un cercle et une barre indiquent zéro ou un. L’extrémité enfant indique zéro ou plusieurs. Quelle référence enfant correspond à ces symboles ?
  1. Une clé étrangère obligatoire sans règle d’unicité
  2. Une clé étrangère obligatoire qui est aussi unique
  3. Une clé étrangère autorisant NULL qui est aussi unique
  4. Une clé étrangère autorisant NULL sans règle d’unicité
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Une application SQLite doit stocker exactement des montants en euros et centimes de 7,35 et 2,80. Quel choix de stockage conserve l’exactitude des montants ?
  1. Valeurs REAL 7,35 et 2,80
  2. Valeurs DECIMAL 7,35 et 2,80
  3. Centimes INTEGER 735 et 280
  4. Montants TEXT utilisés directement dans les calculs
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

La facture 75 comporte deux lignes : article 6, quantité 3, prix unitaire facturé 4,20 ; article 8, quantité 2, prix unitaire facturé 6,50. Leurs prix actuels au catalogue sont de 4,80 et 6,00. Quel était le total facturé ?
  1. 25,60
  2. 26,40
  3. 27,40
  4. 24,60
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Dans PostgreSQL, une expédition a un delay_days NULL et le statut 'urgent'. Quel est le résultat de (delay_days > 2) OR (status = 'urgent') et WHERE conserve-t-il la ligne ?
  1. UNKNOWN ; la ligne est exclue
  2. TRUE ; la ligne est conservée
  3. FALSE ; la ligne est exclue
  4. UNKNOWN ; la ligne est conservée
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Une table reçoit tracking_note comme nouvelle colonne pour chaque livraison. Quelle propriété change directement ?
  1. Son degré
  2. Son nombre de lignes
  3. Son index
  4. Sa clé primaire
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une table d’adhésion utilise un member_id généré comme clé primaire. L’adresse électronique doit être présente et identifier au plus un compte. Quelle déclaration supplémentaire impose les deux règles sur l’adresse électronique dans PostgreSQL ?
  1. email TEXT PRIMARY KEY
  2. email TEXT NOT NULL
  3. email TEXT UNIQUE
  4. email TEXT NOT NULL UNIQUE
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un service répète le numéro de téléphone actuel de chaque fournisseur sur chaque ligne d’expédition. Lors des mises à jour, le personnel oublie certaines copies. Quelle modification corrige cette incohérence ?
  1. Donner à chaque expédition un identifiant plus grand.
  2. Trier les expéditions par numéro de téléphone du fournisseur.
  3. Stocker les téléphones en nombres plutôt qu’en texte.
  4. Stocker une fois les coordonnées du fournisseur et y faire référence.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Profiles.user_id est à la fois la clé primaire de Profiles et une clé étrangère vers Users.user_id. Aucune règle n’impose à un utilisateur d’avoir un profil. Qu’est-ce que cela autorise ?
  1. Plusieurs profils par utilisateur ; un utilisateur par profil
  2. Un ou plusieurs profils par utilisateur ; un utilisateur par profil
  3. Zéro ou un profil par utilisateur ; un utilisateur par profil
  4. Un profil par utilisateur ; plusieurs utilisateurs par profil
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une nouvelle ligne de facture est ajoutée sans modifier les colonnes ni les contraintes. Qu’est-ce qui a changé ?
  1. Le schéma, mais pas l’instance
  2. L’instance, mais pas le schéma
  3. Le schéma et l’instance
  4. Ni le schéma ni l’instance
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

StockRows a pour clé primaire (warehouse_id, item_id) et contient les lignes (4, 7) et (5, 9). Reservations possède une clé étrangère composite obligatoire et contrôlée vers StockRows. Une réservation pour (4, 9) est-elle autorisée ?
  1. Non ; la paire référencée complète est absente.
  2. Oui ; l’entrepôt 4 et l’article 9 apparaissent tous deux.
  3. Oui ; chaque élément de clé est unique individuellement.
  4. Non ; toutes les paires existantes devraient contenir l’entrepôt 4.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 4 : Lire les contraintes et expliquer leurs conséquences10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une table de ventes contient des lignes de vente et une ligne en bas nommée « TOTAL », qui contient la somme de leurs montants. Pourquoi cette ligne pose-t-elle problème lorsque la colonne des montants est additionnée à nouveau ?
  1. Elle transforme le montant de chaque vente en texte.
  2. Elle impose la même clé à toutes les lignes de vente.
  3. Elle change le nombre de colonnes de chaque vente.
  4. Elle ajoute un total comme s’il s’agissait d’une autre vente.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Deux prix sont de 30 USD et 30 EUR. Pourquoi ne peut-on pas les additionner directement pour obtenir un total monétaire qui a un sens ?
  1. Ils nécessitent des clés primaires distinctes.
  2. Leurs longueurs de texte sont égales.
  3. Leurs devises sont différentes.
  4. Leurs valeurs n’ont pas d’échelle.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une liste de cours permet à chaque apprenant de suivre plusieurs cours, y compris le même cours pendant différentes périodes. Chaque cours accueille plusieurs apprenants. Quelle ligne de liaison et quelle clé respectent ces règles ?
  1. Références à l’apprenant et au cours ; clé learner_id
  2. Références à l’apprenant et au cours ; clé (learner_id, course_id)
  3. Apprenant, cours et période ; clé (learner_id, course_id, période)
  4. Apprenant, cours et période ; clé (course_id, période)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une table comporte 9 colonnes et 24 lignes. Trois lignes sont supprimées, puis deux colonnes sont ajoutées. Quels sont son degré et sa cardinalité ?
  1. Degré 11, cardinalité 21
  2. Degré 6, cardinalité 26
  3. Degré 9, cardinalité 23
  4. Degré 21, cardinalité 11
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un diagramme montre Orders et Products liés chacun un-à-plusieurs à Lines. Lines a pour clé primaire (order_id, product_id) et les deux éléments sont des clés étrangères. Que montre cela entre les commandes et les produits ?
  1. Un-à-un, car chaque paire est unique
  2. Plusieurs-à-plusieurs, par la table Lines
  3. Un-à-plusieurs, avec Products comme parent
  4. Plusieurs-à-un, avec Orders comme enfant
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Passes autorise un laissez-passer actif par personne et par casier. person_id et locker_id sont tous deux obligatoires et individuellement uniques. La clé primaire est person_id. Comment faut-il classer locker_id ?
  1. Une clé étrangère uniquement
  2. Une super-clé non minimale
  3. Une seconde clé primaire
  4. Une clé candidate alternative
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un schéma déclare un prix DECIMAL(8, 2). Quelle information supplémentaire faut-il pour interpréter un prix stocké de 45,00 comme un montant réel ?
  1. L’adresse physique de la page sur disque
  2. Le nombre d’index sur la table
  3. La position affichée de la ligne
  4. La devise utilisée par la colonne
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un site web et un outil de rapport se connectent tous deux à un serveur PostgreSQL qui gère des bases de données de boutique et de paie. Quelle description distingue correctement ces éléments ?
  1. PostgreSQL est un client ; la boutique et la paie sont des dialectes SQL.
  2. Le site web est SQL ; PostgreSQL et la paie sont des bases de données.
  3. PostgreSQL est le SGBD ; la boutique et la paie sont des bases de données.
  4. L’outil de rapport est le SGBD ; PostgreSQL est ses données stockées.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Deux tables SQLite ordinaires déclarent le montant DECIMAL(6, 2) et le libellé VARCHAR(3). Des lignes fournissent le montant 1 234 567,89 et le libellé « Été ». Qu’imposent ces seules déclarations ?
  1. La précision du montant et la longueur du libellé
  2. Ni la précision du montant ni la longueur du libellé
  3. La précision du montant, mais pas la longueur du libellé
  4. La longueur du libellé, mais pas la précision du montant
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

De nombreuses anciennes factures font référence à un identifiant de client. Les clients changent souvent d’adresse électronique et l’entreprise exige que ces adresses restent uniques et présentes. Quelle organisation répond le mieux à ces règles ?
  1. Identifiant de substitution stable ; adresse déclarée NOT NULL UNIQUE
  2. Adresse comme clé primaire ; identifiant généré sans règle d’unicité
  3. Téléphone comme clé primaire ; adresse stockée sans contrainte
  4. Adresse comme clé primaire ; nouvelle ligne client après chaque changement
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 5 : Résoudre des cas de données manquantes et de contraintes liées10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un SGBD reconstruit un index et réorganise les pages stockées. Les applications utilisent toujours les mêmes noms de tables et de colonnes pour demander des données inchangées. Quel principe cela illustre-t-il ?
  1. L’indépendance des données
  2. La cardinalité de jointure
  3. Les transactions atomiques
  4. Les clés composites de ligne
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Scans utilise la clé primaire (batch_id, page_no). La paire (18, 4) existe. Les numéros de lot et de page peuvent se répéter séparément. Quelle ligne proposée est rejetée précisément parce qu’elle duplique cette clé ?
  1. lot 18, page 5, nouvelle image
  2. lot 19, page 4, nouvelle image
  3. lot 18, page 4, image différente
  4. lot 19, page 5, image différente
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un service de prêts doit empêcher qu’un paiement fasse référence à un prêt inexistant, même lorsque plusieurs applications écrivent des données. Où cette règle partagée doit-elle être appliquée ?
  1. Dans les en-têtes de colonnes de chaque rapport
  2. Dans une contrainte de référence contrôlée par la base
  3. Dans le texte du libellé affiché pour le prêt
  4. Dans l’ordre d’affichage des lignes de paiement
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Que signifie un cercle suivi d’une barre à l’extrémité d’un diagramme en patte d’oie ?
  1. Zéro ou une ligne
  2. Exactement une ligne
  3. Zéro ou plusieurs lignes
  4. Une ou plusieurs lignes
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

La vente 810 appartient au client existant 26. Un nouvel achat du même client comprend trois produits existants différents, avec une ligne par produit. Combien de nouvelles lignes faut-il dans Clients, Sales et SaleLines ?
  1. 1 client, 1 vente, 3 lignes
  2. 0 client, 3 ventes, 3 lignes
  3. 0 client, 1 vente, 1 ligne
  4. 0 client, 1 vente, 3 lignes
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Au départ, Orders.customer_id est une clé étrangère non NULL vers Customers, sans règle d’unicité. Les clients peuvent n’avoir aucune commande. L’ajout de UNIQUE à Orders.customer_id laisse les autres règles inchangées. Comment l’association change-t-elle ?
  1. Les clients passent de plusieurs commandes à exactement une ; chaque commande garde un client.
  2. Les clients passent de zéro ou plusieurs commandes à zéro ou une ; chaque commande garde un client.
  3. Les clients gardent zéro ou plusieurs commandes ; chaque commande peut avoir zéro ou un client.
  4. Les clients passent de zéro ou plusieurs commandes à zéro ou une ; chaque commande peut avoir zéro ou un client.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une connexion SQLite a désactivé le contrôle des clés étrangères. Une référence déclarée est présente, mais une ligne orpheline est acceptée. Que faut-il changer pour que les écritures futures puissent se fier à cette contrainte ?
  1. Transformer l’identifiant parent en colonne de texte.
  2. Trier les lignes enfants par leur clé étrangère.
  3. Activer les clés étrangères seulement dans la requête de rapport.
  4. Activer les clés étrangères pour la connexion avant les écritures.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Six comptes ont pour valeurs de ville 'Miami', NULL, 'Dallas', 'Miami', NULL et 'Boise'. Combien satisfont WHERE NOT (city = 'Miami') OR city IS NULL ?
  1. 2
  2. 3
  3. 6
  4. 4
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une table SQLite définit a INTEGER NOT NULL, b INTEGER NOT NULL, PRIMARY KEY (a, b) et q INTEGER NOT NULL CHECK (q > 0). Aucune ligne n’existe. Quelle ligne proposée respecte toutes ces contraintes ?
  1. a = 2, b = NULL, q = 3
  2. a = 2, b = 5, q = 0
  3. a = 2, b = 5, q = 3
  4. a = 2, b = 5, q = NULL
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Le projet 31 possède les tâches 7 et 9 par une clé étrangère project_id qui autorise NULL et utilise ON DELETE SET NULL. La note 4 fait référence à la tâche 7 par une clé étrangère contrôlée utilisant ON DELETE CASCADE. Après la suppression du projet 31, la tâche 7 est supprimée. Que reste-t-il de la tâche 9 et de la note 4 ?
  1. La tâche 9 reste avec project_id NULL ; la note 4 est supprimée.
  2. La tâche 9 reste avec project_id 31 ; la note 4 est supprimée.
  3. La tâche 9 est supprimée ; la note 4 reste liée à la tâche 7.
  4. La tâche 9 reste avec project_id NULL ; la note 4 reste présente.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Tu bloques sur ton propre exercice ? Aide aux Devoirs

Mots-Clés

76 Mots-Clés, chacun avec sa définition

A

Action référentielle
Une action référentielle précise comment une clé étrangère traite la suppression d’un parent référencé ou la modification de sa clé, par exemple en la bloquant ou en la propageant en cascade.
ON DELETE SET NULL conserve les lignes enfants mais efface leur référence au parent ; cette référence doit donc autoriser NULL.
Affinité de type
L’affinité de type de SQLite est une préférence pour le type de stockage d’une colonne : des conversions sont tentées tout en autorisant une certaine souplesse pour les valeurs stockées.
Une colonne entière SQLite ordinaire peut conserver abc comme texte lorsque la conversion en entier échoue.
Architecture client-serveur
Dans une architecture client-serveur, des clients envoient des demandes à un serveur qui gère et renvoie les données.
Un site web et un outil de rapport peuvent tous deux se connecter au même serveur PostgreSQL par un réseau.
Association facultative
Une association facultative autorise l’absence d’un lien, souvent représentée par une clé étrangère qui autorise NULL et un minimum de zéro à l’extrémité parente.
Une commande sans coupon peut conserver coupon_id à NULL tandis que d’autres commandes font référence à des coupons existants.
Association plusieurs-à-plusieurs
Une association plusieurs-à-plusieurs permet aux lignes de chaque côté d’être liées à plusieurs lignes de l’autre côté ; elle est représentée par une table de paires.
Une commande contient plusieurs produits et un produit peut apparaître dans de nombreuses commandes différentes.
Association réflexive
Une association réflexive relie des rôles au sein d’une table en faisant référence à une clé de cette même table par une clé étrangère.
Le manager_id d’un employé pointe vers une autre ligne d’employé, avec NULL pour une personne qui n’a pas de responsable.
Association un-à-plusieurs
Une association un-à-plusieurs permet de lier un parent à plusieurs enfants, chacun portant une clé étrangère vers son parent.
La référence au responsable d’un employé peut se répéter, car plusieurs employés peuvent partager un même responsable.
Association un-à-un
Une association un-à-un autorise au plus une ligne correspondante de chaque côté ; elle est couramment imposée par une clé étrangère qui est aussi unique.
Un profil peut utiliser user_id à la fois comme clé primaire et comme clé étrangère, ce qui empêche un second profil pour un même utilisateur.

B

Base de données
Une base de données est un ensemble organisé de données liées qui peuvent être recherchées, mises à jour et partagées.
La base de données d’une boutique conserve ensemble les enregistrements des clients, des produits et des commandes pour plusieurs applications.
Base de données relationnelle
Une base de données relationnelle utilise des tables : les colonnes décrivent des propriétés et les lignes décrivent des enregistrements.
Une boutique conserve les commandes dans une table et utilise des identifiants de client pour faire référence à une table de clients distincte.

C

Cardinalité d’une association
La cardinalité d’une association décrit combien de lignes de chaque côté d’un lien peuvent être associées à une ligne de l’autre côté.
Un client peut avoir plusieurs commandes, tandis que chaque commande de la boutique doit faire référence à exactement un client.
Cardinalité d’une table
La cardinalité d’une table est le nombre de lignes qu’elle contient actuellement ; elle change lorsque des enregistrements sont ajoutés ou supprimés.
Une table de clients d’une boutique qui contient actuellement quatre enregistrements a une cardinalité de quatre.
Cascade
Une cascade propage la suppression d’un parent ou la modification de sa clé aux lignes enfants qui y font référence, selon l’action déclarée pour la clé étrangère.
La suppression d’une commande peut se propager en cascade à ses lignes de commande, car ces lignes enfants appartiennent à cette commande.
Centimes entiers
Les centimes entiers représentent un montant par un nombre entier de centimes de la devise, ce qui permet un stockage exact pour les monnaies utilisant des centimes.
Un prix SQLite de 12,50 € peut être stocké sous la forme de 1 250 centimes et affiché en euros.
Charge analytique (OLAP)
Une charge analytique synthétise de nombreux enregistrements stockés pour comparer des totaux ou des tendances.
Un rapport mensuel compare les ventes entre régions en lisant les enregistrements stockés de nombreux achats.
Charge transactionnelle (OLTP)
Une charge transactionnelle enregistre les événements quotidiens par des lectures et écritures de petite taille.
Un système de billetterie enregistre chaque réservation et chaque paiement à mesure que les clients achètent des places au cours de la journée.
Chemin de clés
Un chemin de clés est une suite de références déclarées que l’on suit entre les tables pour relier un enregistrement de départ aux informations nécessaires à une réponse.
Pour trouver la ville d’une commande, suis son customer_id jusqu’à une ligne de client et lis la ville de cette ligne.
Clé alternative
Une clé alternative est une clé candidate qui n’a pas été choisie comme clé primaire ; elle est couramment protégée en combinant l’obligation de présence et l’unicité des valeurs.
L’adresse électronique obligatoire et unique d’un compte peut rester une clé alternative à côté d’un account_id généré.
Clé candidate
Une clé candidate est une super-clé minimale : ses valeurs identifient une ligne de façon unique et retirer l’un quelconque de ses éléments ferait perdre cette garantie.
Une adresse électronique d’employé obligatoire et unique peut être une clé candidate même lorsque employee_id devient la clé primaire.
Clé composite
Une clé composite identifie les lignes par une combinaison de colonnes dont les valeurs complètes doivent être uniques, même si les éléments individuels se répètent.
L’étudiant, le cours et la période identifient ensemble une inscription lorsqu’un étudiant peut suivre à nouveau un cours plus tard.
Clé de substitution
Une clé de substitution est un identifiant introduit uniquement pour distinguer les lignes d’une base de données, comme un entier généré sans signification métier.
Un customer_id reste fixe lorsque le client change d’adresse électronique, de numéro de téléphone ou de nom de famille.
Clé étrangère
Une clé étrangère est une colonne ou une combinaison de colonnes dont les références non NULL doivent correspondre à une clé primaire parente existante ou à une clé unique appropriée.
Plusieurs lignes de commande peuvent contenir customer_id 1, chacune faisant référence au même enregistrement de client unique.
Clé naturelle
Une clé naturelle utilise un identifiant issu de l’objet réel enregistré, comme un numéro d’identification de véhicule ou un code d’État.
Une table d’États peut utiliser un state_code à deux lettres comme clé primaire lisible dans les enregistrements d’adresses.
Clé primaire
Une clé primaire est la clé candidate choisie comme identifiant principal des lignes d’une table ; ses valeurs sont uniques et non NULL, et elle peut comporter plusieurs colonnes.
La table des clients utilise customer_id comme clé primaire afin que les commandes puissent faire référence à un client précis.
Code de devise
Un code de devise est une notation normalisée à trois lettres qui identifie la devise d’un montant, comme USD, EUR ou JPY.
Deux lignes contenant toutes deux 20 peuvent représenter des montants différents si l’une porte le code USD et l’autre EUR.
Code numérique
Un code numérique est un identifiant écrit avec des chiffres et servant à désigner un élément ; les zéros initiaux et d’autres aspects de sa présentation peuvent donc avoir un sens.
Le code postal américain 02108 doit être stocké sous forme de texte pour conserver le zéro initial lors de sa lecture.
Colonne (attribut ou champ)
Une colonne (attribut ou champ) est une propriété nommée et dotée d’un type, commune à chaque ligne.
La colonne city contient une valeur de ville, ou NULL lorsque cela est autorisé, pour chaque enregistrement de client.
Contrainte
Une contrainte est une règle déclarée qui limite les données autorisées, par exemple l’unicité, les valeurs obligatoires ou les références valides entre tables.
Une contrainte de quantité positive rejette une ligne de commande de zéro unité, même si zéro est un entier.
Contrainte CHECK
Une contrainte CHECK rejette une ligne si sa condition vaut FALSE, mais un résultat UNKNOWN provenant de NULL ne rejette pas à lui seul la ligne.
Une quantité positive obligatoire utilise NOT NULL avec CHECK (quantity > 0) pour couvrir les deux règles.

D

Degré
Le degré d’une table est son nombre de colonnes, une propriété de sa structure.
Ajouter la date de naissance d’un client comme nouvelle colonne augmente le degré de la table des clients.
Diagramme de schéma
Un diagramme de schéma présente les tables existantes, leurs colonnes et leurs liens de clés sous forme de boîtes et de lignes, en montrant souvent les nombres autorisés dans les associations.
Une ligne relie orders.customer_id à la clé du client, rendant visible la référence des commandes vers les clients.
Diagramme entité-association
Un diagramme entité-association représente les entités et les associations de l’activité pendant la conception ; elles peuvent ensuite être traduites en tables.
Les diagrammes de style Chen peuvent représenter les attributs par des ovales et les associations par des losanges plutôt que par des boîtes de tables.
Dialecte SQL
Un dialecte SQL est l’ensemble de la syntaxe, des types et des fonctions supplémentaires de SQL pris en charge par un produit.
SQLite utilise LIMIT 10 pour limiter un résultat, tandis que SQL Server utilise couramment TOP 10.
Dictionnaire de données
Un dictionnaire de données documente les significations des colonnes, les unités et les règles métier que les types et les contraintes d’une table n’expriment pas entièrement.
La documentation explique si un shipped_date NULL signifie que la commande n’a pas été expédiée ou que la date a été perdue.
Domaine
Un domaine est l’ensemble des valeurs autorisées pour une colonne, décrit par son type de données et ses éventuelles restrictions supplémentaires.
Un domaine de quantité peut imposer des nombres entiers supérieurs à zéro, excluant ainsi les quantités de stock négatives.
Données
Les données sont des faits enregistrés, comme des noms, des dates ou des montants.
Un service de livraison enregistre comme données le poids, la destination et la date d’expédition d’un colis.
Données structurées
Les données structurées partagent des champs définis et nommés, même lorsque certaines valeurs manquent.
Chaque ligne de commande possède les mêmes colonnes, notamment une date d’expédition qui peut être NULL avant l’expédition.

É

Échelle
L’échelle de DECIMAL(p, s) est s, le nombre de chiffres après la virgule, qui détermine sa précision fractionnaire.
Une échelle de deux fournit deux décimales, comme nécessaire pour les prix exprimés en euros et centimes.

F

Format de date ISO
Le format de date ISO écrit une date du calendrier dans l’ordre année-mois-jour, ce qui donne une représentation sans ambiguïté comme 2026-03-02.
Des dates textuelles ISO cohérentes dans SQLite se trient dans l’ordre chronologique, contrairement aux dates affichées au format américain qui place le mois en premier.

I

Identifiant généré
Un identifiant généré est une valeur de clé fournie automatiquement par la base de données, avec une syntaxe qui varie selon les produits.
Dans SQLite, INTEGER PRIMARY KEY fournit un entier lorsqu’une nouvelle ligne omet l’identifiant.
Indépendance des données
L’indépendance des données sépare la structure logique des tables utilisée par les applications de l’organisation physique des données stockées par le SGBD.
Le SGBD peut réorganiser les pages sur disque pendant que les applications continuent à faire référence aux mêmes colonnes nommées.
Index
Un index est une structure de recherche qui aide un SGBD à trouver les lignes correspondantes.
Un index de clé primaire aide le système à localiser un enregistrement de client dans une table qui en contient des millions.
Instance de base de données
Une instance de base de données, au sens qui distingue le schéma des données, est l’ensemble des valeurs stockées à un instant précis.
Ajouter une nouvelle commande modifie l’instance actuelle tout en laissant inchangée la définition de sa table.
Intégrité référentielle
L’intégrité référentielle est la règle selon laquelle les références non NULL contrôlées des clés étrangères correspondent à des lignes parentes existantes, ce qui maintient la validité des liens.
Une contrainte contrôlée entre commandes et clients rejette une commande pour le client 99 lorsque ce client est absent.
IS NULL
IS NULL est le test SQL qui renvoie vrai lorsqu’une entrée est manquante, ce qui permet de trouver ces lignes sans comparaison d’égalité.
La condition phone IS NULL identifie les clients dont les numéros de téléphone n’ont pas été enregistrés.

J

Jointure
Une jointure combine des données liées en faisant correspondre des valeurs entre des tables, ce qui automatise le suivi des clés effectué lors d’une recherche manuelle.
Une recherche de client fait correspondre orders.customer_id à customers.customer_id pour atteindre la bonne ville.

L

Langage de définition de données (LDD)
Les instructions du LDD créent, modifient ou suppriment des structures de base de données, comme les tables.
Ajouter une colonne de date de livraison modifie la structure et relève donc de la définition de données.
Langage de manipulation de données (LMD)
Les instructions du LMD lisent ou modifient les lignes stockées, notamment par insertion, mise à jour et suppression.
Enregistrer une nouvelle commande ajoute des données ; cela ne crée pas de colonne supplémentaire et ne change pas la structure de la table.
Ligne (n-uplet ou enregistrement)
Une ligne (n-uplet ou enregistrement) contient les entrées d’un élément pour toutes les colonnes de la table.
Dans une table de clients, la ligne d’un client nommé Wei Chen contient son identifiant, son nom, sa ville et les autres propriétés du client.
Ligne de commande
Une ligne de commande est un enregistrement d’un produit dans une commande, qui contient des informations sur la paire comme la quantité et le prix unitaire facturé.
Deux mugs dans une commande peuvent être représentés par une ligne de quantité 2 et le prix enregistré par mug.
Ligne orpheline
Une ligne orpheline est un enregistrement enfant dont la référence non NULL n’a pas de parent correspondant, ce qui laisse son association supposée sans correspondance.
Une commande faisant référence à un client supprimé serait orpheline si aucune contrainte contrôlée ne l’empêchait.
Logique à trois valeurs
La logique à trois valeurs combine les résultats TRUE, FALSE et UNKNOWN et tient compte des conditions qui font intervenir des valeurs manquantes dans la base de données.
TRUE OR UNKNOWN vaut TRUE, car la condition vraie suffit déjà à satisfaire la condition OR combinée.

M

Montant de la ligne
Le montant de la ligne est le coût des unités d’une ligne de commande, calculé à partir de sa quantité et du prix unitaire enregistré pour cette vente.
Deux mugs à 12,50 dollars américains contribuent à hauteur de 25,00 dollars américains au total de la commande avant l’ajout des autres lignes.
Moteur de base de données embarqué
Un moteur de base de données embarqué fonctionne dans une application sous forme de bibliothèque, sans serveur distinct.
Une application de bureau peut utiliser SQLite pour lire et modifier un fichier de base de données local contenant ses enregistrements.

N

NOT NULL
NOT NULL est une contrainte qui impose la présence d’une entrée dans une colonne et rejette NULL, sans vérifier elle-même que la valeur est positive ou que le texte est non vide.
Une date de commande peut être obligatoire tandis qu’une date d’expédition peut rester NULL jusqu’à l’expédition.
Notation en patte d’oie (crow’s foot)
La notation en patte d’oie marque les extrémités des associations avec des cercles, des barres et des pattes à trois branches pour indiquer les nombres minimal et maximal de lignes liées.
Un cercle et une patte à côté des commandes permettent à un client d’avoir zéro ou plusieurs lignes de commande liées.
NULL
NULL est le marqueur d’une valeur manquante dans une base de données, qui peut être inconnue, pas encore disponible ou non applicable à cet enregistrement.
La date d’expédition d’une commande peut être NULL parce qu’elle n’a pas été expédiée, tandis que sa date de commande est enregistrée.

P

Précision
La précision de DECIMAL(p, s) est p, le nombre total de chiffres disponibles pour les parties entière et fractionnaire d’une valeur.
Dans DECIMAL(8, 2), huit chiffres au total laissent de la place pour six avant la virgule et deux après.

S

Schéma de base de données
Un schéma de base de données décrit la structure des tables, des colonnes, des types de données, des clés et des contraintes qui déterminent les enregistrements autorisés.
Ajouter une colonne d’instructions de livraison modifie le schéma, même avant qu’une instruction soit stockée.
SQL
SQL est le langage déclaratif standard des bases de données relationnelles, avec des dialectes propres aux produits.
Un outil de rapport envoie une requête SQL à PostgreSQL pour extraire les enregistrements de clients dont il a besoin.
Super-clé
Une super-clé est une colonne ou un ensemble de colonnes dont les valeurs combinées identifient chaque ligne de façon unique, même si cet ensemble comprend des colonnes superflues.
Si employee_id est unique, l’associer au service identifie toujours l’employé, mais ajoute une colonne superflue.
Système de gestion de bases de données (SGBD)
Un SGBD est un logiciel qui gère les bases de données, applique les règles et contrôle l’accès.
Lorsque PostgreSQL gère la base de données d’une boutique, le logiciel est distinct des enregistrements de clients qui y sont stockés.

T

Table (relation)
Une table (relation) contient des informations sur un type d’éléments dans des colonnes nommées et des lignes individuelles.
La table des produits enregistre chaque article proposé par la boutique à l’aide de colonnes comme le nom et le prix.
Table d’association
Une table d’association enregistre des paires au moyen de clés étrangères vers deux tables, en utilisant souvent leur combinaison comme clé primaire.
Chaque ligne order_items relie une commande à un produit et enregistre la quantité et le prix unitaire facturé.
Table parente et table enfant
Une table parente fournit une clé référencée ; une table enfant stocke la clé étrangère qui pointe vers ce parent, éventuellement plusieurs fois.
La table des clients est la table parente et celle des commandes est la table enfant lorsque chaque commande stocke l’identifiant de son client.
Transaction
Une transaction regroupe des modifications afin qu’elles soient toutes enregistrées ensemble ou toutes annulées.
Un transfert soustrait de l’argent d’un compte et l’ajoute à un autre dans une même transaction.
Type à virgule flottante
Un type à virgule flottante stocke des nombres binaires approchés, ce qui permet une large plage numérique tout en introduisant de petits écarts d’arrondi décimal.
Une température mesurée peut utiliser un type à virgule flottante lorsque de minuscules erreurs de représentation sont acceptables.
Type booléen
Un type booléen représente des informations vraies ou fausses, avec NULL disponible pour les informations manquantes sauf si une contrainte l’interdit.
Un indicateur in_stock enregistre si un article est disponible ; sa forme exacte de stockage varie selon le SGBD.
Type caractère
Un type caractère stocke du texte, comme des noms ou des codes ; sa longueur et son comportement lors des comparaisons dépendent de sa déclaration et du système de base de données.
Un code produit comme MUG-11-BLU doit être stocké sous forme de texte, car c’est un identifiant, et non une quantité.
Type décimal exact
Un type décimal exact stocke des montants en base dix sans approximation binaire dans les systèmes qui le prennent en charge, comme PostgreSQL.
Un prix PostgreSQL déclaré DECIMAL(8, 2) stocke des montants exacts en euros et centimes dans sa plage.
Type entier
Un type entier stocke des nombres entiers dans une plage prise en charge, ce qui le rend adapté aux comptages, aux quantités et à de nombreux identifiants générés.
La quantité de lampes dans une commande est un nombre entier, contrairement à leur poids mesuré.

U

UNKNOWN
UNKNOWN est la troisième valeur de vérité de SQL, produite lorsqu’une comparaison dépend d’une information manquante et ne peut être établie comme vraie ou fausse.
state <> 'TX' vaut UNKNOWN pour un client dont l’État est NULL, donc WHERE exclut cette ligne.
UUID
Un UUID est un identifiant de 128 bits généralement écrit sur 36 caractères, qui permet une génération indépendante avec un très faible risque de collision.
Des appareils distincts peuvent générer des UUID avant que leurs nouveaux enregistrements soient combinés dans une base de données.

V

Valeur atomique
Une valeur atomique est une seule valeur pour l’usage d’une colonne, plutôt qu’une liste de valeurs distinctes qui doivent être traitées séparément.
Un champ de téléphone contenant deux numéros séparés par une virgule contient une liste là où une seule valeur de téléphone est attendue.
Valeur par défaut
Une valeur par défaut est fournie lorsqu’une nouvelle ligne omet la valeur d’une colonne, les autres contraintes continuant à régir la valeur stockée.
Une colonne de statut avec DEFAULT 'pending' enregistre le statut « pending » (« en attente ») lorsque la nouvelle ligne ne le précise pas.
Vue
Une vue est une requête enregistrée utilisée comme une table ; une vue ordinaire ne possède pas ses propres lignes de résultat stockées.
Une vue des ventes peut présenter certaines colonnes de commande tandis que les enregistrements sous-jacents restent dans leurs tables.

À propos de cette unité

Par StudeliSignaler une erreur

Crée ton propre Matériel d'Étude

Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.

Commencer