Vous êtes sur la page 1sur 4

LP DWM 2020 - 2021

Module : Bases de données


TD/TP - Conception et développement d’une base de données

Objectif du TD/TP :
▪ Concevoir un schéma Entité/Association pour la gestion des employés d’une société et générer le
modèle relationnel correspondant,
▪ Créer un schéma utilisateur et les objets de ce schéma dans la base de données Oracle à partir du
schéma relationnel,
▪ Importer les données dans les tables de cette base de données à partir d’un fichier Excel.
▪ Interroger la base de données avec requêtes exprimées avec le langage SQL.

Enoncé
On souhaite disposer d’une base de données permettant la gestion des données relatives aux salaires des
employés d’une entreprise et les indemnités scolaires attribuées à leurs enfants. Chaque employé est affecté à
service connu par son nom et sa localité et est identifié par un numéro service. Un employé est connu par un numéro
unique, un nom, un sexe, une fonction, une date d’embauche, un salaire et une commission pour les employés
vendeur. Les valeurs possibles pour l’attribut fonction sont : agent, Vendeur, directeur, analyste et président. On
souhaite savoir pour chaque employé son supérieur hiérarchique. Pour chaque employé, on souhaite savoir
l’ensemble de ses enfants. Un enfant sera défini par un numéro unique, un prénom, un âge et un sexe. Un enfant
dont l’âge dépasse 24 ne peut percevoir d’indemnités scolaires. Une indemnité est caractérisée par un code
indemnité unique, un niveau et le montant de l’indemnité. Le niveau peut prendre l’une des valeurs suivantes :
Primaire, Collège, Lycée, Université et Préscolaire. Les codes indemnité sont choisis dans les valeurs A, B, C, D et S
respectivement pour Primaire, Collège, Lycée, Université et Préscolaire.

Travail à faire :
1. Conception de la base de données
1.1. En utilisant la démarche descendante, donner un modèle Entité Association pour ce cas
1.2. Utiliser PowerAMC pour réaliser et vérifier ce modèle
1.3. Transformer ce modèle, en un modèle logique relationnel puis en un mod-le physique pour Oracle.
On devra obtenir un modèle relationnel de la page suivante (généré pour SQL/Server)
Employe (NumE:smallint, Nom:varchar(20),
fonction:varchar(10), Chef:smallint, DateEmb:datetime,
Sal:decimal(7,2), Comm:decimal(7,2), NumS:smallint)

Service (NumS :smallint, Nom:varchar(15),


Localite:varchar(10))

Enfant (NumEnf:smallint, Prenom:varchar(20), Age:smallint,


codeI:char(1), NumE:smallint)

IndemniteScolaire (codeI:char(1), Niveau:varchar(20),


Indemnite:decimal(7,2))

2. Implémentation et Manipulation de la base de données


2.1. Langage de définition des données
2.1.1. Créer une connexion pour l’utilisateur sys
2.1.2. Créer un utilisateur nommé Emp avec les rôles connect et resource
2.1.3. Modifier cet utilisateur en lui donnant un espace de stockage de 100 Mo dans la tabespace users
2.1.4. Fermer la connexion et connecter l’utilisateur Emp
2.1.5. Ecrire le fichier de commandes SQL permettant de créer les tables du schéma précédent.
2.1.6. Ecrire le fichier de commandes SQL permettant de supprimer les tables du schéma précédent.
2.1.7. On souhaite faire une numérotation automatique pour le champ NumEnf de la table enfant, pour
se faire sous oracle, il est nécessaire de créer un objet séquence et un objet déclencheur. En
s’inspirant des exemples donnés dans l’annexe ci-dessous, donner le code permettant de créer les
deux objets nommés respectivement SeqNumEnfant et OnInsertEnfant.
2.2. Langage de manipulation des données
2.2.1. Importer les données Du fichier Excel « EmpData.xlsx » vers la base de données
2.2.2. Ecrire le script InsertDataEmp.sql pour insérer les données dans les différentes tables.
2.2.3. Insérer un nouvel Employé en donnant une valeur pour les différents attributs.
2.2.4. Insérer un nouvel Employé en omettant la valeur de la commission.
2.2.5. Supprimer en une commande ces deux employés ajoutés.
2.2.6. Modifier les noms des Services pour que la première lettre du nom soit en majuscule et les autres
lettres en minuscule (fonction INITCAP).
2.2.7. Appliquer une augmentation de salaire de 10% pour tout employé ayant un salaire inférieur à 1000
2.3. Interrogation de la base
2.3.1. Lister tous les employés avec leurs numéros et noms ➔ Projection
2.3.2. Donner les noms des vendeurs ainsi que leurs salaires ➔ Restriction
2.3.3. Combien y a-t-il d'analystes dans l'entreprise
2.3.4. Donner les noms, fonctions, date d’embauche et salaire de tous les employés qui ont été embauchés
au mois 11.

Professeur : M.QBADOU Page 2/4


2.3.5. Donner les noms, fonctions et salaires des employés classés par salaire en ordre décroissant
2.3.6. Donner la masse salariale (hors commissions)
2.3.7. Donner la somme des salaires par fonction
2.3.8. Parmi les agents, quel est le nom et le salaire de l'employé le moins payé
2.3.9. Donner le nom du chef de l’employé ‘Boutayeb’
2.3.10. Donner les noms, fonctions et salaires des employés exerçant la même fonction que 'Nasri' (triés
par ordre croissant des salaires)
2.3.11. Donner les noms et fonctions des employés ainsi que le nom du service où ils travaillent
2.3.12. Pour les employés qui ont des enfants, donner leurs noms et celui de leurs enfants et leurs âges
(triés par ordre croissant des noms des employés puis par ordre croissant de l’âge des enfants)
2.3.13. Donner les noms de tous les employés et pour ceux qui ont des enfants donner les noms de ces
derniers
2.3.14. Donner les noms des 5 employés les plus payés ainsi que leurs fonctions et salaires.

Professeur : M.QBADOU Page 3/4


Annexe
Soit le schéma suivant :

Pour mettre en place une numérotation automatique pour le champ NUJOUEUR de la table JOUEUR, on
peut définir les objets séquence et déclencheur suivants :
CREATE SEQUENCE SeqNuJoueur MINVALUE 1
INCREMENT BY 1 START WITH 1;

CREATE OR REPLACE TRIGGER auto_increment


BEFORE INSERT ON Joueur
FOR EACH ROW
BEGIN
IF (:new.NuJoueur IS null) THEN
SELECT SeqNuJoueur.nextval INTO :new.NuJoueur
FROM dual;
/* : new.nujoueur:= SeqNuJoueur.nextVal; */
END IF;
END;
/

Professeur : M.QBADOU Page 4/4

Vous aimerez peut-être aussi