Aller au contenu
Vers le MPD

MLD → MPD (SQL)

Le MPD traduit le MLD en ordres CREATE TABLE pour un SGBD précis, avec les types de colonnes, les contraintes et les index. C'est à ce niveau que le modèle devient une base qui fonctionne.

  • MPD
  • CREATE TABLE
  • types
  • index
  • DDL

Syntaxe

Modèle
CREATE TABLE nom_table (  colonne TYPE [NOT NULL] [UNIQUE] [CHECK (condition)],  …,  PRIMARY KEY (colonnes),  FOREIGN KEY (colonne) REFERENCES autre_table (colonne));CREATE INDEX nom_index ON nom_table (colonne);

Exemple

Exemple concret
-- MLD : client(num_client PK, nom, email)--       commande(num_commande PK, date_commande, num_client FK → client)CREATE TABLE client (  num_client INTEGER PRIMARY KEY,  nom        TEXT NOT NULL,  email      TEXT UNIQUE);CREATE TABLE commande (  num_commande  INTEGER PRIMARY KEY,  date_commande TEXT NOT NULL,  -- date ISO 'AAAA-MM-JJ' en SQLite  num_client    INTEGER NOT NULL REFERENCES client (num_client));CREATE INDEX idx_commande_client ON commande (num_client);-- Résultat : 2 tables et 1 index. Retrouver les commandes d'un client,-- seul ou par jointure, passe par l'index (EXPLAIN QUERY PLAN affiche-- SEARCH commande USING INDEX idx_commande_client) au lieu de-- parcourir toute la table commande.

À retenir

  1. Les types dépendent du SGBD : SQLite, le moteur du playground, a des types souples (INTEGER, TEXT, REAL) ; PostgreSQL distingue VARCHAR, NUMERIC, DATE, TIMESTAMPTZ…
  2. Créez les tables parentes avant celles qui les référencent, et supprimez-les dans l'ordre inverse.
  3. Indexez les clés étrangères : la clé primaire est indexée automatiquement, la clé étrangère non, alors qu'elle sert à chaque jointure.
  4. Piège : stocker des montants en virgule flottante (REAL). 0.1 + 0.2 ne vaut pas exactement 0.3 ; utilisez NUMERIC(10,2) en PostgreSQL, ou des centimes entiers en SQLite.

Voir aussi