Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
ÉNONCES :
Exercice 1 :
1) Définir ce qu’est une base de données et donner les différentes étapes d’implantation dans le
SGBD Microsoft Access
2) Qu’appelle-t-on propriété d’association ? Donnez un exemple.
Exercice 2 :
Soit le schéma conceptuel de données suivant qui décrit une population où chaque personne a un père
et une mère :
Père
PERSONNE
N°Pers
Nom_Pers 1, 1
A pour
Prenom_Pers
1, 1
DateNais_Pers
Sexe_Pers
Mère
1- Comment appelle-ton ce type d’association ? Pourquoi ?
2- On ajoute les règles de gestion suivantes : Dans cette population chaque personne peut exercer
plusieurs activités professionnelles et une activité peut être exercée par plusieurs personnes. En
plus, certaines personnes n’ont pas de père (Ex : Statut de PND=Père Non Déterminé). Ajoutez
l’entité « ACTIVITE PROFESSIONNELLE» et modifiez le schéma pour prendre en compte ces
nouvelles règles.
3- Déduire le schéma logique de données correspondant.
4- Écrire la requête SQL qui permet de créer la table PERSONNE
Exercice 3
1) Qu’est-ce un SGBD. Donnez-en 3 exemples.
2) Comment procède-t-on pour monter un « état » dans Microsoft Access ?
Exercice 4
1- Proposer un schéma conceptuel pour la gestion des inscriptions d’étudiants de votre
établissement. On s’intéressera uniquement aux années académiques de formation, filières,
cycles et niveaux de formation.
2- Déduire le schéma logique de données correspondant.
Écrire la requête SQL qui permet d’insérer l’étudiant "KAFFO Douglas" de matricule "13BQ029", né le
"17 janvier 1990" à "Bangoulap", de sexe "M" et répondant au n° de téléphone "670 80 83 03".
Exercice 5 :
Pour décrire les employés d’une entreprise, et leur répartition entre les différents services, la table
suivante a été créée.
N°_Empl Nom_Empl Prénom_Empl Date_Nais_Empl N°_Service Nom_Service Date_Creation
1 TCHOFFO Merlin Isidore 01/10/1980 20 Financier 01/01/1970
2 LAGMAGHO Ghislain 12/09/1981 10 Administratif 01/01/1975
3 KAMTA Barnabé 15/04/1978 20 Financier 01/01/1970
4 DJIFFO W. Collins 21/06/1980 20 Financier 01/01/1970
5 ZILONG Jean Claude 27/11/1982 10 Administrative 01/01/1975
6 LOMPA Dieudonné 20/08/1979 30 Juridique 01/04/1980
7 DJITOUO Jacqueline 04/05/1985 10 Administratif 01/01/1957
8 MAFOTSING Carole 06/04/1979 30 Juridique 01/04/1980
9 TALA KAFFO Léonard 14/03/1981 20 Financier 01/01/1970
10 ATIWO Yves Lorent 13/07/1978 20 Financier 01/01/1970
Exercice 6 :
Selon la structure proposée à l’exercice ci-dessus, dégager les schémas relationnel et conceptuel pour
cette base de données.
Donnez le script SQL qui permet de recruter au service administratif l’employée MAKOUDJOU Eléonore,
née le 19 février 1982.
Exercice 7
3) Définir la notion de persistance
4) Qu’est-ce qu’un SGBD et quelle est son utilité?
Exercice 8
On se propose de créer la base de données « SPORTIVE » définie par le schéma relationnel suivant :
3- Sachant qu’une équipe contient plusieurs joueurs et qu’un joueur peut jouer un rôle dans
plusieurs matchs, et qu’un match donne droit à un résultat, réécrire la nouvelle représentation
textuelle de cette base et en déduire le schéma conceptuel correspondant.
4- Écrire la requête SQL de création de la table JOUEUR.
Exercice 9 :
Le reverse engineering ou rétro-conception en analyse informatique consiste à reconstituer certains modèles
de conception à partir d’autres modèles. Soit le modèle logique relationnel suivant produit avec Win’ Design :
Les flèches donnent le sens de migration des clés entre les tables. On veut reconstituer le modèle conceptuel des
données (MCD). Répondez aux questions suivantes :
Exercice 10 :
Une entreprise commerciale reçoit des commandes de la part de ses clients aux jours ouvrables. Les livraisons sont
effectuées en fin de semaine. Une facturation mensuelle est établie pour toutes les livraisons effectuées au cours du
mois écoulé. Dans cet exemple une occurrence de date peut tout aussi être une date quelconque, une date de fin de
semaine ou de mois. Mais toutes les dates ne sont pas des dates de fin de mois ou de semaine.
exercice 11
Date N°Produit
N°Client
Soit le Graphe suivant :
Libellé_Produit
Tel_Client
Nom_Client Code_Categorie
Adresse_Client
QtéCom, MtantLigneCom
Libellé_Categorie
N°Fournisseur
Exercice 1
1- Deux avantages d’un SGBD : propose des outils d’interrogation et de manipulation des données,
gestion de la sécurité, gestion de la concurrence d’accès, etc.
2- Une propriété d’association est un élément d’information dont l’existence dépend de deux ou plusieurs
entités liées entre elles. Ex. : Si dans une entreprise de distribution de produits on se retrouve dans
une situation où chaque fournisseur négocie ses prix, le prix du produit ne peut être simplement une
propriété de l’entité Produit, il doit être une propriété d’association entre Produit et Fournisseur.
Exercice 2
1- C’est une association réflexive car elle concerne une entité en association avec elle-même.
2- Nouveau schéma obtenu (notez les parties en rouge):
ACTIVITES_PROF Père
PERSONNE
Num_Activ
Nom_Activ Exerce N°Pers
0, n 0, n Nom_Pers 0, 1
Description_Activ
Lieu_Activ DateDébut Prenom_Pers A pour
Categorie_Activ DateFin DateNais_Pers 1, 1
Sexe_Pers
Mère
3- SLDR :
PERSONNE (N°Pers, Nom_Pers, Prenom_Pers, DateNais_Pers, Sexe Pers, N°Pers_Pere#,
N°Pers_Mere#)
ACTIVITES_PROF (Num_Activ, Nom_Activ, Description_Activ, Lieu_Activ, Categorie_Activ)
ACTIVITES_EXERCEES (Num_Activ#, N°Pers#, DateDebut, DateFin)
4- create table PERSONNE ( N°_Persvarchar(20) not null Primary key, N°_Pers_Perevarchar(20) not
null, N°_Pers_Merevarchar(20) not null, Nom_Pers varchar(50) not null, Prenom_Pers varchar(50)
not null, DateNais_Pers varchar(10), Sexe_Pers char not null, primary key (N°_Pers), foreign
key(N°_Pers_Pere) references PERSONNE(N°_Pers), foreign key(N°_Pers_Mere) references
PERSONNE(N°_Pers) );
Exercice 3 :
Exercice 4 :
ANNEE
Id_Annee
Code_Annee ETUDIANT
0, n
Matricule_Etud
NIVEAU 0, n S’inscrire 1, n
Nom_Etud
Id_Niv Date d’ins Prenom_Etud
Intitule_Niv DateNais
0, n LieuNais
1, 1 Sexe
SEMESTRE Telephone
Id_Sem Email
du cycle Intitule_sem Dernière institution
Dernier resultat
Dernière moyenne
Redoublant
1, n
CYCLE-FOR FILIERE
De la filière
Code_Cycle 1, 1 1, n Code_Fil Designation_Fil
Designation_Cycle
EVALUATION
Exercice 5
4- Meilleure Proposition
2 tables séparées et reliées par un champ. la colonne N°_serv de la table EMPLOYE référence la
colonne N°_Service de la table SERVICE
Exercice 6 :
5- Schéma relationnel :
EMPLOYE (N°_Empl, Nom_Empl, Prenom_Empl, Date_Nais_Empl, N°_Service#)
SERVICE (N°_Service, Nom_Service, Date_Création)
N°_Empl N°_Service
1, 1 affecter 1, n Nom_Service
Nom_Empl
DateNais_Pers
Exercice 7 :
Exercice 8 :
SCD :
équipe1
1, n
JOUEUR EQUIPE MATCH
NumJ CodeEq
Appartenir 1, 1 NumM
NomJ NomEq DateM
AgeJ DateCreation Résultat
1, n 1, n
NbJ 1, 1
1, n
0, n 0, n
équipe2
Rôle joué
Rôle
Exercice 9 :
1) Clé étrangère issue de la table EMPLOYEE
2) Clé étrangère issue de la table SERVICE
3) Ces attributs sont non seulement des clés primaires pour la nouvelle table WORK FOR mais aussi des clés
étrangères issues respectivement de la table EMPLOYEE et de la table PROJECT. Ce type de table s’appelle
table de jointure ou d’association. Elle doit sa présence grâce à une association ayant toutes les
cardinalités maximales égales à n entre les entités EMPLOYEE et PROJECT.
4) MCD correspondant :
Exercice 10
MCD Correspondant Livrer
Qté livrée
Fin de semaine
0, n
Facturer 0, n CALENDRIER
Mtant fact Fin de mois Date
0, n
1, n 1, n Date de commande
1, n
CLIENT
PRODUIT
Commander Num_Produit
Num_Client 1, n 1, n Libellé_Produit
Qté Cmandée
Nom_client Prix d’achat
Adresse_client
Telephone_Client
MLD
CLIENT(Num_client, Nom_client, Adresse_client, Telephone_client)
PRODUIT(Num_Produit, Libellé_Produit, Prix d’achat)
DATE(Date)
COMMANDER(#Num_Produit, #Num_client, Qté Cmandée)
LIVRER(#Num_Produit, #Num_client, Qté Livrée)
FACTURER(#Num_client, #Date, Mtant fact)
Exercice 11 :
5 Règles de gestion :
1- La Quantité Commandée ainsi que le Montant d’une ligne de commande dépendent du client, de la date
etdu produit.
2- Le prix d’achat dépend du produit et du fournisseur
3- Un produit appartient à une catégorie
4- Une catégorie de produit est identifiée par un Code et décrite par un Libellé
5- Les clients sont identifiés par un numéro et décrits par un nom, une adresse et un téléphone.
CALENDRIER
Date
CLIENT PRODUIT
N°_Client N°_Produit
SCD : Nom_client Libellé_Produit
Adresse_client 1, n
1, n 1, n
Tel_Client
Commander 1, n 1, 1
QtéCom
MtantLigneCom Appartenir
FOURNISSEUR
1, n
N°_Four
Nom_Four 1, n Fournir CATEGORIE
Adresse_Four Prix d’achat Code_Categorie
SLD : Libellé_Categorie
CLIENT(N°Client, Nom_Client, Adresse_Client, Tel_client)
CALENDRIER(Date)
PRODUIT(N°Produit,Libellé_Produit,#Code_Categorie)
CATEGORIE(Code_Categorie, Libellé_Catégorie)
FOURNISSEUR(N°_Four, Nom_Four, Adresse_Four)
COMMANDER(#N°_Client, #Date, #N°_Produit, QtéCom, MtantLigneCom)
FOURNIR(#N°_Four, #N°_Produit, Prix d’achat)
DEUXIEME ANNEE
Solution :
ANNEE
Id_Annee
Code_Annee ETUDIANT
0, n Matricule_Etud
Dernière institution
NIVEAU 0, n S’inscrire 1, n
Dernier resultat
Code_Niv Intitule_Niv Dernière moyenne
Redoublant
0, n
1, n
1, 10, n
SEMESTRE
Id_Sem 1, n
du cycle Intitule_sem
1, n
1, n
Appliquons les règles pratiques. ENSEIGNANT
1, n
Matricule_Ens
EVALUATION
Règle 1 : Les entités1,deviennent
n des relations
Formation
Qualification
ANNEE(Id_Annee, Code_Annee)
FILIERE Grade
Id_Eval
ETUDIANT(Matricule_Etud, Dernière institution,
Code_Fil Designation_Fil Dernier resultat, Note_Obtenue
Dernière moyenne, Redoublant)
Institution d’origine
SEMESTRE(Id_Sem, Intitule_sem) Type_Eval
Date
NIVEAU(Code_Niv, Intitule_Niv)
CYCLE_FOR(Code_Cycle, Designation_cycle)
FILIERE(Code_Fil, Designation_Fil)
PERSONNE(Id_Pers, Nom_Pers, Prenom_Pers, DateNais, LieuNais, Sexe, Telephone, Email)
ENSEIGNANT(Matricule_Ens, Formation, Qualification, Grade, Institution d’origine)
EVALUATION(Id_Eval, Note_Obtenue, Type_Eval, Date)
COURS(Id_Cours, Intitule_cours)
Solutions :
Q1: Liste des films français (titre, année, réalisateur).
projection(titre, année, réalisateur; sélection(pays='France', LESFILMS))
Q2: Donnez les années de sortie des films tournés par GABIN.
projection(année; jointure(LESFILMS.titre=LESACTEURS.titre,LESFILMS;sélection(acteur='Gabin';
LESACTEURS)))
Q3: Trouver les acteurs qui ont tourné avec TRUFFAUT comme réalisateur.
projection(acteur, jointure(LESFILMS.titre=LESACTEURS.titre;
LESACTEURS;sélection(réalisateur='Truffaut'; LESFILMS)))
Q4: Trouver tous les acteurs qui ont été partenaires de DENEUVE.
LESACTEURS1 := sélection(acteur='Deneuve';LESACTEURS)
RES := projection(LESACTEURS.acteur,sélection(LESACTEURS1.titre=LESACTEURS.titre; sélection(acteur!
='Deneuve';LESACTEURS) X LESACTEURS1)))
Q5: Liste des films où le réalisateur est aussi acteur
projection(LESFILMS.titre; sélection(acteur=réalisateur; jointure(LESFILMS.titre=LESACTEURS.titre;
LESFILMS; LESACTEURS)))
Q6: Réalisateurs ayant joué comme acteurs dans des films qu'ils ne réalisaient pas eux-mêmes.
RES1 := projection(acteur;sélection(acteur!=réalisateur; jointure(LESFILMS.titre=LESACTEURS.titre;
LESFILMS; LESACTEURS)))
RES1 donne les acteurs d'un film qui n'ont pas réalisé ce film.
RES2 := projection(LESFILMS; réalisateur)
RES2 donne les réalisateurs
RES := RES1 INTERSECTION RES2
RES donne les réalisateurs ayant joué comme acteurs dans des films qu'ils ne réalisaient pas eux-mêmes.
Q8: Donnez les acteurs qui jouent dans tous les films de Truffaut.
LESACTEURS / projection(titre;sélection(réalisateur='Truffaut;LESFILMS))
Écrire en SQL les requêtes qui permettent d’effectuer les actions suivantes:
2) Afficher le nom et le prénom de tous les patients, trier par ordre inverse sur les noms;
SELECT nomP, prenomP
FROM Patient ORDERED BY 1 DESC ;
3) Afficher le nom, le prénom et la spécialité de tous les médecins de Lyon, si le médecin n’a
pas de spécialité, afficher ‘généraliste’ ;
SELECT nomM, prenomM, , nvl(specialite, 'généraliste')
FROM Medecin WHERE ville = ‘Lyon’ ;
6) Afficher les prénoms des patients dont le nom est Dupont, Durant ou Martin ;
SELECT prenomP
FROM Patient
WHERE nomP IN (‘Dupont’, ‘Durant’, ‘Martin’) ;
8) Afficher la liste des consultations qui n’ont pas donné lieu à une ordonnance;
SELECT numRPPS, numSS FROM Consulte WHERE numOrd = NULL ;
9) Afficher tous les médecins qui ont la même spécialité et qui sont dans la même ville que le
médecin Paul DESMON ;
SELECT nomM,prenomM
FROM Medecin
WHERE (specialite,ville) = (SELECT specialite, ville FROM Medecin WHERE
nomM=’DESMON’ AND prenomM=‘Paul’) ;
Ecole Nationale des Sciences A.U. 08/09
de l’Informatique
10) Afficher la liste des patients (nom, prénom) avec le nom de leur médecin traitant, par
ordre alphabétique inverse sur les noms puis sur les prénoms ;
SELECT nomP, prenomP, nomM
FROM Patient NATURAL JOIN Medecin
ORDERED BY nomP DESC, prenomP DESC ;
11) Afficher pour chaque patient (nom, prénom) le nom et le prénom des médecins qu’il a
consulté ;
SELECT nomP, prenomP, nomM, prenomM
FROM Patient, Medecin, Consulte
WHERE Patient.numSS=Consulte.numSS AND Consulte.numRPPS =
Medecin.numRPPS ;
15) Afficher le nom et le prénom du ou des médecins qui sont médecins traitants du plus
grand nombre de patients ;
SELECT DISTINCT nomM, prénomM
FROM MEDECIN
WHERE MEDECIN.numRPPS =
(SELECT numRPPS
FROM PATIENT
GROUP BY numRPPS
HAVING COUNT(numSS) =
(SELECT MAX(COUNT(numSS))
FROM PATIENT
GROUP BY numRPPS));
16) Afficher tous les patients (nom, prénom) qui ont consulté le médecin ayant le numRPPS
‘12345’ entre le 18-06-2008 et le 17-07-2008 ;
SELECT nomP, prenomP
FROM Patient INNER JOIN Consulte ON Patient. numSS=Consulte.numSS
WHERE Consulte.numRPPS=’12345’ AND Consulte.date BETWEEN ‘18062008’ AND
‘17072008’ ;
Ecole Nationale des Sciences A.U. 08/09
de l’Informatique
17) Afficher tous les patients (nom, prénom) qui ont consulté le médecin ayant le numRPPS
‘12345’ le 18-06-2008 et le 17-07-2008 ;
SELECT nomP, prenomP FROM Patient INNER JOIN Consulte ON Patient.
numSS=Consulte.numSS WHERE Consulte.numRPPS=’12345’ AND Consulte.date
IN (‘18062008’, ‘17072008’) ;
18) Liste des patients qui ont consulté au moins deux médecins de la même spécialité le
même jour ;
SELECT nomP, prénomP
FROM PATIENT pt
WHERE
(SELECT COUNT(DISTINCT numRPPS)
FROM CONSULTE, MEDECIN
WHERE CONSULTE.numRPPS = MEDECIN.numRPPS AND CONSULTE.numSS =
pt.numRPPS
GROUP BY CONSULTE.numSS, CONSULTE.date, MEDECIN.spécialite) >2
On souhaite maintenant ajouter les deux tables suivantes pour pouvoir gérer les prescriptions
des médecins.
Prescription (numOrd, idMed#, nbBoites)
Medicament (idMed, nomMed, prix, categorie)
19) Créer la table PRESCRIPTION ;
CREATE TABLE Prescription (
numOrd INTEGER CONSTRAINT keyP1 PRIMARY KEY,
idMed SMALLINT CONSTRAINT keyP2 REFERENCES Medicament (idMed)
[ON DELETE CASCADE],
nbBoites SMALLINT) ;
21) Ajouter la numOrd comme clé étranger dans la table Consulte : Consulte (numRPPS#,
numSS#, date, diagnostic, numOrd#)
ALTER TABLE Consulte ADD (numOrd INTEGER CONSTRAINT keyC2
REFERENCES Prescription (numOrd)) ;
22) Ajouter le médicament n° 5432, avec le nom ‘aspirine’ et le prix ’11,05’ et de catégorie
‘Antalgique’;
INSERT INTO Medicament VALUES (5432, ‘aspirine’, 11,05, ‘Antalgique’) ;
Ecole Nationale des Sciences A.U. 08/09
de l’Informatique
23) Donner le prix et le nom des médicaments dont le prix est supérieur au prix moyen de leur
catégorie.
SELECT nomMed, prix
FROM Medicament me
WHERE prix > (SELECT AVG(prix) FROM Medicament WHERE
categorie=me.categorie) ;
25) Afficher pour tous les médecins (numRPPS) en activité le ’11-08-2008’ la liste des
patients (numSS) qu’ils ont traité ainsi que le montant total de leurs ordonnances (somme
des médicaments prescrits avec le prix multiplié par le nombre de boites) ;
SELECT numRPPS, numSS, SUM(prix*nbBoite)
FROM CONSULT ct,PRESCRIPTION pt,MEDICAMENT mt
WHERE ct.numOrd=pt.numOrd AND pt.numMed=mt.numMed AND ct.date='11-08-2008'
group by (numRPPS, numSS);
27) Afficher la liste des médecins accompagnée du prix maximum de leur ordonnance ;
SELECT nomM,prenomM, max(montant)
FROM MEDECIN,(SELECT numOrd, numRPPS, SUM(prix*nbBoites) AS montant
FROM CONSULTE,PRESCRIPTION,MEDICAMENT
WHERE CONSULTE.numOrd=prescription.numOrd AND
PRESCRIPTION.idmed = MEDICAMENT.idmed
GROUP BY numOrd, numRPPS)
WHERE CONSULTE.numRPPS=MEDECIN.numRPPS;
28) Donner le nom et le prénom des patients qui ont eu la plus grosse prescription ;
SELECT nomP,prenomP
FROM PATIENT,CONSULT
WHERE PATIENT.numSS=CONSULT.numSS AND CONSULT.numOrd IN
(SELECT numOrd
FROM PRESCRIPTION,MEDICAMENT
WHERE PRESCRIPTION.idmed = MEDICAMENT.idmed
GROUP BY (numOrd)
HAVING SUM(prix*nbBoites)=
(SELECT MAX(SUM(prix*nbBoites)) FROM PRESCRIPTION,MEDICAMENT
WHERE PRESCRIPTION.idmed = MEDICAMENT.idmed
GROUP BY (numOrd);