Schémas de table : entre autres, nom et type de chaque colonne.
  • : identifiant.
  • : nom.
  • : type des données stockées.
  • : si peut contenir .
  • : valeur par défaut (si vide).
  • : partie de la clé primaire (cf suite).
  • : si générée (cf suite).
  • PostgreSQL :
  • MySQL :
Opérations sur les tables :
  • : créer une table ;
  • : modifier une table ;
  • : supprimer les entrées d'une table ;
  • : supprimer une table.
  • : nom de la colonne ;
  • : type des données stockées.
  • : ne pas recréer la table si existe déjà.
    • ⚠ table pas nécessairement vide !
    • ⚠ les schémas peuvent être différents !
  • 💡 : créer et remplir une table à partir d'entrées :
    • ⚠ Préférez + (permet d'indiquer les contraintes).
  • 💡 Obtenir le code SQL de création de tables existantes (SQLite) :

  • Supprimer une table :
  • Supprimer les entrées :
n'existe pas sur SQLite.
  • pose problème si schémas différents.
  • puis pour s'assurer du schémas.
  • : renomme une colonne.
  • : ajoute une colonne.
  • : supprime une colonne.
  • : renommer une table.
⚠ Modifier le schéma d'une table existante est dangereux si requêtes SQL déjà écrites. 💡 Certains SGBD supportent des clauses .
Problème : On veut garantir la validité des données stockées dans les tables :
  • Numéro de téléphone
  • Adresses e-mail
  • ...
💡 L'assurance de la structure des données est un des avantages majeurs de SQL.
⚠ Sur SQLite, afin d'activer les contraintes, les doivent se terminer par
  • ⚠ Ne marche pas avec les .
  • : valeur par défaut si non renseignée lors d'un .
  • ⚠ La colonne peut contenir plusieurs valeurs .
  • : doit être vraie.
  • : valeur (re-)calculée à partir des autres colonnes.
    • : valeur stockée et non-recalculée sur demande.

💡 Les contraintes de tables sont des contraintes sur plusieurs colonnes :



💡 Elles s'écrivent après la liste des colonnes.
Problème : on veut récupérer une entrée à partir d'un identifiant...
  • ... mais parcourir entièrement la table est coûteux O(N).
Solution : les index (contrainte de colonne ou de table).
  • permet de rapidement trouver les entrées associées à un identifiant ≤O(log2(N)).
  • comme un "annuaire".
💡 Les SGBD créent automatiquement un index sur les colonnes .
  • Clef primaire : un index , encore plus rapide, un seul par table.
    • : incrémente automatiquement la clef primaire.
      • ⚠ que sur .
Motivation : une vente est effectuée par un vendeur auprès d'un client.
  • Table
  • Table
  • Table : met en relation et (, , , etc.)
Problématique : dans , comment représenter et ?
Solution : les contraintes de clefs étrangères (FK)
  • : référence la colonne (doit être ) de la table
  • ⚠ Les FK sont une contrainte (garanti l'existence de la PK), pas une optimisation.
  • 💡 En contrainte de table : .
  • 💡 Si les colonnes référencées ne sont pas spécifiées, la clef primaire est utilisée.
  • pour activer la vérification des clefs étrangères sur SQLite.
  • 💡 La clef étrangère peut être nulle (sauf si contrainte ).
Problématique : difficile de se représenter les relations entre de nombreuses tables.

Solution : diagramme UML pour représenter visuellement les tables et leurs relations.

+------------+   +-----------+
|   Vente    |   |   Client  |
+------------+   +-----------+
| ID_C: INT  |-->| ID  : INT |
| ID_V: INT  |   | Nom: TEXT |
| Date: Date |   +-----------+
+------------+
        
Les tables sont représentées par un cadre en 3 parties :
  • le nom de la table ;
  • les colonnes ;
  • les contraintes de table ;

Les colonnes sont formattées comme suit :
  • clefs primaires
  • clefs étrangères
  • unique.

La clef étrangère est reliée à la clef primaire référencée.
💡 En fonction des besoins, il est possible d'ajouter plus ou moins de détails.
Problème : que faire lorsqu'une clef primaire référencée est modifiée/supprimée ?
  • C'est à vous de le définir via et :
    • : empêche la modification/suppression si référencée.
    • : applique la modification/suppression à la clef étrangère.
    • : la clef étrangère devient (ou ).
💡 Certains SGBD permettent de modifier les contraintes de colonnes et de tables :

⚠ Modifier le schéma et contraintes d'une table existante/non-vide est dangereux.