Super-héros relationnels-objets
[30 minutes]
Question
Transformer le modèle UML en modèle relationnel-objet. On utilisera les OID et le nested model.
Solution
-- Figurine
Type typeFigurine : <designation, prix>
-- Véhicule
Type typeVehicule : hérite de typeFigurine <type, nb_places>
Vehicule de typeVehicule (#designation)
-- Repaire
Type typeRepaire : hérite de typeFigurine <emplacement_geographique, capacite>
Repaire de typeRepaire (#designation)
-- Membre
Type typeMembre : <nom, couleur>
Type listeMembres : collection de typeMembre
-- References vers Repaire
Type refRepaire : <fkRepaire =>o Repaire>
Type listeRefRepaires : collection de refRepaire
-- References vers Vehicule
Type refVehicule : <fkVehicule =>o Vehicule>
Type listeRefVehicules : collection de refVehicule
-- Personnage
Type typePersonnage : hérite de Figurine <identite_secrete, genre, mentor =>o Personnage, membres:listeMembres, repaires:listeRefRepaires, vehicules:listeRefVehicules>
Personnage de typePersonnage(#designation)
Remarque :
Les types non précisés sont ceux du diagramme UML.
Remarque : Héritage
L'héritage est exclusif et la classe mère est abstraite, on choisit un héritage par les classes filles.
Remarque : Alternatives pour les associations
Pour l'association N:M entre Repaire et Personne, on peut choisir d'imbriquer une collection de références vers Personnage dans la relation Repaire ; ou choisir une relation Abrite avec des références vers Repaire et Personnage.
Pour l'association 1:N entre Véhicule et Personne, on peut choisir plus classiquement une référence depuis Vehicule vers Personnage.
Mais les requêtes demandées ci-après sont plus simples à écrire avec les choix faits ici.
Question
Donner, en SQL, la liste de tous les personnages qui sont basés au repaire "La Ratcave".
Solution
SELECT p.designation, p.identite_secrete
FROM Personnage p, TABLE(p.repaires) r
WHERE r.designation = 'La Ratcave' ;
Question
Donner, en SQL, la couleur des torses des personnages habitant la "GARVEL Tower", pilotant des véhicules aquatiques et ayant comme mentor Superman.
Solution
SELECT m.couleur
FROM Personnage p, TABLE(p.vehicules) v, TABLE(p.repaires) r, TABLE(p.membres) m
WHERE r.designation = 'GARVEL Tower'
AND p.mentor.designation = 'Superman'
AND m.nom = 'torse'
AND v.type = 'aquatique' ;