G. Salzano / Ph Chochois
Modèle relationnel – Objet
Dans ce TD, nous allons nous appuyer sur le cas fonctionnel explicité grâce au diagramme ci-dessous :
* 0..1
* 1..1
0..1
0..*
Projet -
- -
nom dateDebut dateFin
: String : date : date
Mission -
- -
code intitule nbJours
: String : String : int
Intervenant -
- - - -
mat nom prenom tarifApplique qualification
: int : String : String : float : String Qualification -
- qualif tarif
: String : float
Un projet est constitué de missions. Une mission est affectée à un intervenant qui possède une qualification.
Le tarif appliqué pour un intervenant peut être différent du tarif standard lié à une qualification.
Pour les besoins de l’exercice, la qualification a été placée également au niveau de l’intervenant.
Important : Sauvegardez vos scripts dans des fichiers texte ! Types et table en mode ligne.
Dans cet exercice , nous allons gérer des « intervenants » sur un projet. Chaque intervenant possède une qualification.
Voici la liste des qualifications :
Qualification Tarif journalier en euros (HT)
Développeur 500
Analyste 700
Chef de projet 900
Consultant 1000
Directeur commercial 1300
a) création d'un type, qualif_type, pour décrire les qualifications (2 attributs). Noter que qualif_type est de type tuple, et que chacune de ses composantes est de type atomique.
b) création d'une table des qualifications (Create table <nomtable> of <typename> ) et insertion des valeurs (cf tableau ci-dessus) de 2 manières différentes.
c) Consultez la description du type, la description de la table et visualisez le contenu de la table.
d) Affichez les différentes qualifications triées par ordre alphabétique puis calculez le tarif moyen d’une journée d’un intervenant.
e) Augmentez les tarifs de 2,5% puis vérifiez que la table a bien été mise à jour.
Table en mode colonne.
a) Supprimer votre table et créez la de nouveau mais en mode ligne puis insérez les valeurs
b) Consultez la nouvelle description de la table et visualisez le contenu de la table puis affichez la qualification la moins rémunératrice et la plus rémunératrice..
c) Augmentez les tarifs des analystes de 10%.
Table avec une colonne non atomique.
Nous allons maintennat créer une table des intervenants. Un intervenant est caractérisé par un numéro de matricule, un nom, un prénom et une qualification. Le tarif horaire d’un intervenant peut être différent du tarif horaire standard appliquée à sa qualification.
Mat Nom Prenom Qualification Tarif journalier
en euros (HT)
2516 Dupont Pierre Développeur 550
7655 Henri Jacques Consultant 990.90
7687 Triolet Esla Consultant 1029.00
a) Créer la table des intervenant en utilisant le type « qualif_type » créé précédemment et en définissant le matricule comme clé primaire.
b) Insérer les valeurs dans la table des intervenants.
c) Décrire la table « intervenant » et afficher son contenu.Insérer les valeurs dans la table des intervenants.
d) Afficherle nom et le tarif de tous les intervenants.
e) Afficher tous les consultants (matricule, nom) puis afficher tous les consultants dont le tarif est supérieur à celui d’un consultant « standard » en affichant l’écart de tarif.
f) Que se passe t-il si la table « qualif » est supprimée ? Que deviennent les qualifications des 3 intervenants que nous avons créés ?
Les références.
Nous allons maintenant créer une table des missions. La mission est confiée à un intervenant. Nous n’allons pas répéter toutes les caractéristiques d’un intervenant au niveau de la mission.
Depuis Oracle 8, on a deux notions :
- Les références logiques, implantées à l'aide des attributs de type clé étrangère, foreign key, de la même façon, quel qu'il soit le type de la table (relationnel pur ou relationnel-objet).
- Les pointeurs, mis en œuvre par des attributs de type ref
Une mission sera caractérisée par un code (clé primaire), un intitulé, un nombre de jours prévu et l’intervenant sur la mission..
Code Intitulé Nb jours Ref sur
Intervenant Varalpain033 Etude technique du
passage de PEL en CEL
54 Intervenant 7655
Armoni002 Prise de contact avec le Directeur
2 Intervenant 1000
a) Créer un type « Intervenant_type » puis un type « mission_type » et créer ensuite une table des missions en mode ligne. Vous devez avoir une référence sur les intervenants.
b) Créer la table des missions en créant une référence sur les intervenants concernés.
c) Ajouter l’intervenant 1000 qui se nomme Philippe Michelin, qui est Directeur avec un tarif associé de 3000 euros la journée.
d) Essayez d’afficher la référence de l’objet « Intervenant 1000 ». Expliquez le message obtenu ! e) Sauvegardez vos intervenants dans une table temporaire « temp_intervenant » puis supprimer la table
« intervenant »
f) Créez de nouveau la table « intervenant » mais, cette fois-ci en mode ligne puis réalimentez là grâce à votre sauvegarde.
g) Essayez d’afficher la référence de l’objet « Intervenant 1000 ».
h) Insérez la mission en ayant une référence sur l’intervenant 1000.
i) Affichez la description puis le contenu de la table « mission ».
j) Affichez le code et le coût de la mission (coût=nb de jours * tarif).
k) Augmentez le nombre de jours de la mission.
l) Réduisez le tarif de Michelin à 2800 euros et affichez de nouveau le code et le coût de la mission.
m) Supprimez l’intervenant Michelin puis visualisez la mission et son coût.
Tables imbriquées.
Nous allons maintenant créer une table des projets. Un projet peut être constitué de plusieurs missions.
Dans l’exercice, nous allons créé un projet qui aura les caractéristiques suivantes :
nom Date début Date fin
CA1 12/12/2009 13/07/2011
Ce projet sera constitué de 2 missions :
Code Intitulé Nb jours Ref sur
Intervenant
SFG Spécifications
générales
30 Intervenant 7655
SFD Spécifications
détaillées
60 Intervenant 2516
Nous allons utiliser les tables imbriquées pour que le projet puisse « pointer » sur ses différentes missions.
a) Créer un type « missions_type » qui sera une table de missions (type « mission_type) Le type « missions_type » est au pluriel car il permet de mémoriser plusieurs missions.
Le type « mission_type » est au singulier car il permet de mémoriser une mission.
b) Créer la table “projet” qui aura pour clé primaire le nom du projet et un attribute “lesMissions” qui sera du type “missions_type”.
« lesMissions » sera le nom du champ dans la table « projet »
« missionsTable » sera le nom de la table imbriquée.
c) En une seule requête, insérer le projet avec ses 2 missions
d) Affichez une description de la table “projet » puis les caractéristiques du projet
e) Affichez les différentes missions du projet. Il faut pour cela accéder à la table imbriquée.
f) Affichez les différentes missions du projet avec les noms d’intervenant et leur qualification g) Affichez le projet et ses différentes missionst avec les noms d’intervenant et leur qualification.
Les colonnes à afficher sont : a. Nom du projet b. Date de fin c. Code de la mission
d. Nombre de jours de la mission e. Nom de l’intervenant
f. Qualification de l’intervenant