Schémas de table : entre autres, nom et type de chaque colonne.
{ "table1": "Users" }
- : 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.
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 :
{ "cstr": "UNIQUE(A,B)", "vals": "(0,1), (0,0)" }
{ "cstr": "UNIQUE(A,B)", "vals": "(0,1), (0,1)" }
{ "cstr": "CHECK(A != B)", "vals": "(0,0)" }
💡 Elles s'écrivent après la liste des 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 .
- : incrémente automatiquement la clef primaire.
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.
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.
💡 En fonction des besoins, il est possible d'ajouter plus ou moins de détails.
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 :
Les colonnes sont formattées comme suit :
La clef étrangère est reliée à la clef primaire référencée.
- 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.
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.