diff --git a/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.lo1 b/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.lo1 new file mode 100644 index 0000000..d45a909 Binary files /dev/null and b/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.lo1 differ diff --git a/src/slides/B1/db/01_modèle_de_données.md b/src/slides/B1/db/01_modèle_de_données.md index 03dadb3..64ea04e 100644 --- a/src/slides/B1/db/01_modèle_de_données.md +++ b/src/slides/B1/db/01_modèle_de_données.md @@ -43,6 +43,7 @@ C'est une représentation **abstraite** : on ignore les données individuelles e - **MCD** : Modèle Conceptuel de Données - **MLD** : Modèle Logique de Données - **MPD** : Modèle Physique de Données + - **LDD** : Langage de définition de données --- #### Dictionnaire de données @@ -83,6 +84,12 @@ C'est une représentation **abstraite** : on ignore les données individuelles e --- +#### LDD - Langage de définition de données + +- Il s'agit de la création des tables sous forme de commandes SQL + +--- + ## Merise en détails --- @@ -344,10 +351,9 @@ section { Il faut se baser sur la cardinalité de chaque association. -Cas possibles (x vaut 0 ou 1) : +2 cas possibles (x vaut 0 ou 1) : - (x, n) - (x, 1) : Many to One / One to Many - (x, n) - (x, n) : Many to Many -- Associations réflexives --- @@ -358,7 +364,8 @@ Cas possibles (x vaut 0 ou 1) : !!! - La clé étrangère est la clé primaire de la table côté **Many** -- L'héritage entre dans ce cas : + - Elle vient servir de référence à un enregistrement +- L'**héritage** entre dans ce cas : - On considère qu'une entité spécialisée peut spécialiser exactement 1 entité générique (1,1) - Une entité générique peut être spécialisée par n entités spécialisées (0,n) - On est dans une relation (0,n) - (1,1) @@ -433,8 +440,8 @@ On crée une **table de jointure** qui va relier toutes les tables ##### Cas particuliers -- (0, 1) - (1, 1) : On utilisera une clé étrangère - - comme relation Many to One où n = 1 +- (0, 1) - (1, 1) : On utilisera une **clé étrangère** + - Comme si c'était une relation Many to One où n = 1 - (1, 1) - (1, 1) : Ce type de relation n'a pas de sens - Si cela arrive c'est que vous avez découpé en deux entités ce qui aurait dû n'en faire qu'une @@ -448,4 +455,84 @@ On crée une **table de jointure** qui va relier toutes les tables --- -## MPD - Modèle Physique de données \ No newline at end of file +## MPD - Modèle Physique de données + +--- + +- Dernière étape : ajoute les détails techniques pour implémenter le modèle dans le SGBD +- Détails techniques : + - Types de données + - Taille des colonnes + - Contraintes d'intégrité + - Clés étrangères + +- C'est à ce stade qu'on va tenir compte des spécificités de chaque SGBD + +--- + +![mpd height:600px](images/mpd.png) + +--- + +## LDD - Langage de Définition de Données + +--- + +```sql +CREATE TABLE IF NOT EXISTS "louer" ( + "id_location" UUID NOT NULL, + "identifiant_conducteur" UUID NOT NULL UNIQUE, + "identifiant_vehicule" UUID NOT NULL, + "debut" DATE NOT NULL, + "fin" DATE NOT NULL, + PRIMARY KEY("id_location") +); + +CREATE TABLE IF NOT EXISTS "conducteur" ( + "identifiant_conducteur" UUID NOT NULL UNIQUE, + "nom" VARCHAR(255) NOT NULL, + "prenom" VARCHAR(255) NOT NULL, + "numero_de_telephone" VARCHAR(255) NOT NULL, + "numero_de_permis_de_conduire" VARCHAR(255) NOT NULL, + PRIMARY KEY("identifiant_conducteur") +); + +CREATE TABLE IF NOT EXISTS "vehicule" ( + "identifiant_vehicule" UUID NOT NULL UNIQUE, + "immatriculation" VARCHAR(255) NOT NULL, + "kilometrage" INTEGER NOT NULL, + "prix_journalier" DOUBLE PRECISION NOT NULL, + "identifiant_modele" UUID NOT NULL, + PRIMARY KEY("identifiant_vehicule") +); +``` +--- +```sql +CREATE TABLE IF NOT EXISTS "modele" ( + "identifiant_modele" UUID NOT NULL UNIQUE, + "marque" VARCHAR(255) NOT NULL, + "modele" VARCHAR(255) NOT NULL, + "nombre_de_places" SMALLINT NOT NULL, + PRIMARY KEY("identifiant_modele") +); +CREATE TABLE IF NOT EXISTS "utilitaire" ( + "id_utilitaire" UUID NOT NULL UNIQUE, + "volume" DOUBLE PRECISION NOT NULL, + PRIMARY KEY("id_utilitaire") +) INHERITS ("modele"); + +CREATE TABLE IF NOT EXISTS "vehicule_de_tourisme" ( + "id_vehicule_de_tourisme" UUID NOT NULL UNIQUE, + PRIMARY KEY("id_vehicule_de_tourisme") +) INHERITS ("modele"); + +ALTER TABLE "louer" +ADD FOREIGN KEY("identifiant_conducteur") REFERENCES "conducteur"("identifiant_conducteur") +ON UPDATE NO ACTION ON DELETE NO ACTION; +ALTER TABLE "louer" +ADD FOREIGN KEY("identifiant_vehicule") REFERENCES "vehicule"("identifiant_vehicule") +ON UPDATE NO ACTION ON DELETE NO ACTION; +ALTER TABLE "modele" +ADD FOREIGN KEY("identifiant_modele") REFERENCES "vehicule"("identifiant_modele") +ON UPDATE NO ACTION ON DELETE NO ACTION; +``` diff --git a/src/slides/B1/db/images/mpd.png b/src/slides/B1/db/images/mpd.png new file mode 100644 index 0000000..5c56be5 Binary files /dev/null and b/src/slides/B1/db/images/mpd.png differ