9
td1
medina5 edited this page 2025-09-28 09:01:01 +02:00

Travaux dirigés

Schéma entités-relations (ER Diagram)

Le schéma entité-relation est l'étape préparatoire à la réalisation d'une base de données. Il modélise sous forme graphique un problème réel.

Exercice 1. Association

Une association est constituée d'adhérent. Un "marché" biologique est mis en place à destination de ces adhérents. Différents produits sont vendus. Les produits sont organisés en familles. Les adhérent viennent acheter des produits. Un ticket de caisse est édité.

Amélioration 1 : Les différents produits sont achetés chez des fournisseurs.

Amélioration 2 : Un même produit peut être approvisionné chez plusieurs fournisseurs.


Exercice 2. Société de transport

Une société de transport possède une flotte de camion et plusieurs entrepots.

Cette société embauche des chauffeurs.

Les camions sont utilisés pour effectuer des transports entre les entrepôts. Les camions sont affectés aux chauffeurs au jour le jour.

erDiagram
    SOCIETE ||--o{ ENTREPOT : possede
    SOCIETE ||--o{ CAMION : possede
    SOCIETE ||--o{ CHAUFFEUR : embauche

    CAMION ||--o{ TRANSPORT : effectue
    ENTREPOT ||--o{ TRANSPORT : départ
    ENTREPOT ||--o{ TRANSPORT : arrivée
    CHAUFFEUR ||--o{ TRANSPORT : conduit


    SOCIETE {
        int id
        string nom
    }

    ENTREPOT {
        int id
        string ville
    }

    CAMION {
        string immatriculation
        string modele
    }

    CHAUFFEUR {
        text nom
    }

    TRANSPORT {
        int id
        date jour
        int chauffeur
        int camion
        int entrepot_depart
        int entrepot_arrivee
    }

Amélioration 1 : La nature du permis limite les camions que le chauffeur peut conduire.

Amélioration 2 : Suvant l'age et le permis des visites médicales périodiques sont nécessaires.


create table entrepot (
  id integer primary key,
  ville text
);

create table societe (
  id integer primary key,
  nom text
);

create table chauffeur (
  id integer primary key,
  nom text
);

create table camion (
  immatriculation text primary key,
  marque text,
  permis text,
  foreign key (permis) references permis(categorie)
);

create table permis (
  categorie text primary key,
  poids numeric
);


create table transport (
  id integer primary key,
  jour text,
  depart integer,
  arrivee integer,
  chauffeur integer,
  camion text,
  foreign key (depart) references entrepot(id),
  foreign key (arrivee) references entrepot(id),
  foreign key (chauffeur) references chauffeur(id),
  foreign key (camion) references camion(immatriculation),
  check (arrivee <> depart)
);

Insertion des données

Je ne spécifie pas les colonnes. Je dois mettre toutes les valeurs dans l'ordre des colonnes

insert into societe values (1, 'UPS');

Je spécifie uniquement la colonne nom. la colonne id qui est integer primary key est automatiquement incrémentée : 1, 2, 3, ...

insert into chauffeur (nom) values ('Albert');

Insérer 2 lignes en une seule requête

insert into chauffeur (nom) values
  ('Samia'),
  ('Samy');

Supprimer un enregistrement

delete from chauffeur where id = 5;
insert into permis (categorie, poids) values
  ('B', 3.5),
  ('C', 32),
  ('CE', 44);

insert into entrepot values
  (1, 'Saint Dié'),
  (2, 'Paris'),
  (3, 'Lyon'),
  (4, 'Marseille');

insert into camion (immatriculation, marque) values
  ('AA123BB', 'Volvo'),
  ('ZZ342VD', 'Renault'),
  ('SP457MP', 'Mercedes'),
  ('XQ876YE', 'Volvo');

-- modification de table
-- ajouter une colonne pour le permis
alter table camion
  add column permis text;

update camion set permis = 'B'
 where immatriculation  = 'ZZ342VD';

update camion set permis = 'C'
 where immatriculation  = 'SP457MP';

update camion set permis = 'CE'
 where immatriculation  = 'AA123BB';

update camion set permis = 'CE'
 where immatriculation  = 'XQ876YE';

-- 1 = Saint Dié
-- 3 = Lyon
-- 2 = Samia
insert into transport (id, jour, depart, arrivee,
  chauffeur, camion)
values (1, '2025-09-19', 1, 3, 2, 'SP457MP')

insert into transport (id, jour, depart, arrivee,
  chauffeur, camion)
values (50, '2030-09-19', 100, 30, 20, 'XXXXXXX')

drop table camion ;

Activer le contrôle des liens

pragma foreign_keys = ON;

insert into camion (immatriculation, marque, permis)
  values ('DF244JG', 'Mercedes', 'Z');

Supprimer une table

drop table transport ;