On souhaite gérer les vols d'une agence de voyage. Plusieurs Compagnies aériennes (Air France, EasyJet...) proposent des vols. Une compagnie est identifiée par un code IATA et possède un nom.
Un Vol est défini par un numéro unique, une heure de départ et une durée. Attention : un vol est opéré par une seule compagnie, mais part d'un Aéroport précis et arrive dans un autre Aéroport. Chaque aéroport a un trigramme (CDG, ORY), un nom et une superficie.
Il faut savoir que les aéroports desservent des Villes. Un aéroport peut desservir plusieurs villes (ex: Orly dessert Paris et Wissous) et une ville peut être desservie par plusieurs aéroports. Une ville a un nom et un nombre d'habitants.
Enfin, un vol peut comporter des Escales. Une escale se fait dans un aéroport donné, avec une heure d'arrivée et une heure de redépart. Un même vol peut avoir plusieurs escales, et un aéroport accueille plein d'escales.
Escale (#num_vol, #trigramme_escale, heure_arr, heure_redep) // Table N:N avec attributs
#2 Festival de MusiqueN:N Multiple
Nous gérons un grand festival. Des groupes de musique viennent jouer. Un groupe a un nom, un style musical principal et une date de création. Chaque groupe est composé de plusieurs Membres (Musiciens). Un membre a un nom, un prénom et joue d'un Instrument. Attention, un membre peut jouer de plusieurs instruments, et un instrument est joué par pleins de membres. De plus, un musicien peut faire partie de plusieurs groupes (projets parallèles).
Les groupes se produisent lors de Concerts. Un concert a lieu à une date précise, dans une Salle spécifique du festival (Main Stage, Chapiteau...). Une salle a une capacité et un nom. Un concert peut voir défiler plusieurs groupes (une soirée à thème), et un groupe joue évidemment plusieurs concerts. Pour chaque participation d'un groupe à un concert, on veut noter l'heure de passage et la durée du set.
Instrument (id_instru, nom) Salle (id_salle, nom, capacite) Membre (id_membre, nom, prenom) Groupe (id_groupe, nom, style, date_crea)
Jouer_Instru (#id_membre, #id_instru) // Qui joue de quoi Appartenir (#id_membre, #id_groupe, role) // Qui est dans quel groupe
Une clinique souhaite numériser ses dossiers. Les Patients (SSN, Nom, Adresse) viennent consulter des Médecins (Matricule, Spécialité, Tarif).
Lors d'une consultation, le médecin rédige une Ordonnance unique. Cette ordonnance est datée. Sur une même ordonnance, le médecin peut prescrire plusieurs Médicaments.
Un médicament est défini par un code barre et un libellé. Pour chaque médicament prescrit sur une ordonnance, on doit préciser la posologie (ex: "3 fois par jour") et la durée du traitement.
Par ailleurs, les patients sont hébergés dans des Chambres. Une chambre a un numéro et un étage. Un patient occupe une seule chambre à la fois, mais une chambre peut accueillir plusieurs patients (chambre double). On doit savoir depuis quelle date le patient est dans la chambre.
Prescrire (#num_ordo, #code_barre, posologie, duree) // Lien N:N entre Ordonnance et Medicament
#4 Amazon-Like (Logistique)Gestion Stocks
Une plateforme de vente en ligne gère des Clients(id, email, solde). Les clients passent des Commandes. Une commande a une date, un statut et une adresse de livraison. Une commande contient plusieurs Produits. Pour chaque produit dans une commande, on note la quantité achetée et le prix au moment de l'achat (car le prix change !).
Les produits (ref, nom, description) sont stockés dans des Entrepôts. Un entrepôt a une localisation. Attention : un même produit peut être stocké dans plusieurs entrepôts différents (ex: iPhone à Paris et à Lyon), et on doit connaître la quantité de stock disponible pour ce produit dans chaque entrepôt.
Enfin, les produits sont fournis par des Fournisseurs. Un produit vient d'un seul fournisseur principal.
On gère une école. Il y a des Elèves (id, nom, promo). Ils suivent des Cours(Maths, Info, Elec...). Un cours est défini par un code et un nombre de crédits ECTS.
A la fin du semestre, un élève obtient une note pour un cours.
Les cours sont enseignés par des Professeurs. Un cours peut être enseigné par plusieurs profs (plusieurs groupes), et un prof enseigne plusieurs matières. On veut savoir combien d'heures chaque prof a fait pour chaque matière.
Les cours ont lieu dans des Salles de classe. Pour simplifier, on considère qu'un cours est affecté principalement à une salle spécifique (ex: le labo d'élec).
Enfin, chaque élève appartient à une Association(BDE, JE, Sport...). Un élève ne peut être que dans une seule asso principale, mais une asso a plein de membres.
Table -> Serveur : Une table est gérée par un seul serveur (c'est son rang). Un serveur gère plusieurs tables.
Commande -> Table : Une commande est liée à une seule table. Une table peut passer plusieurs commandes (entrée, puis plat...).
ContenuCmd : Une commande contient plusieurs plats. Un plat peut être dans plusieurs commandes. L'attribut "cuisson" (saignant, à point) dépend du plat DANS la commande.
Livre -> Auteur : Simplification ici : Un livre est écrit par UN SEUL auteur (FK dans Livre).
Exemplaire -> Livre : Un livre (Harry Potter) a plusieurs exemplaires physiques sur les étagères. Un exemplaire correspond à un seul livre.
Emprunt : C'est l'Exemplaire qui est emprunté, pas le Livre abstrait ! Un abonné emprunte un exemplaire à une date donnée.
#9 Analyse Championnat Foot
Stade (id_stade, nom, ville)
Equipe (id_team, nom, #id_stade)
Joueur (id_joueur, nom, #id_team)
Match (id_match, date, #id_team_domicile, #id_team_exterieur, score)
Equipe -> Stade : Une équipe a UN stade attitré (Stade résident). Un stade peut héberger plusieurs équipes (ou une seule).
Joueur -> Equipe : Un joueur joue pour une seule équipe.
Match (Double FK) : C'est le piège ! Un match oppose DEUX équipes. Il y a donc deux clés étrangères pointant vers la table Equipe (Domicile et Extérieur).