Enseignant responsable : Mme Salma Ben Saïd
TD : Bases de Données
Exercice 1
Le directeur d’une clinique vétérinaire souhaite digitaliser son système d’information. Soit le
cahier des charges suivant :
Le système permet la gestion des clients, du personnel, des animaux traités et des médicaments
administrés. La clinique emploie un personnel décrit chacun par : nom, prénom, date de
naissance, adresse, e-mail et numéro de téléphone. Les personnels ont en plus un poste
(vétérinaire ou assistant) et une spécialité, qui est une des espèces animales qu'ils savent le
mieux traiter. Les classes considérées sont : mammifère, reptiles, oiseaux.
La clinique accueille des animaux. Chaque animal a un nom, une espèce, un poids et une taille,
ainsi qu'une date de naissance.
Chaque animal appartient à un propriétaire (client de la clinique) qui peut être propriétaire de
plusieurs animaux. Chaque client est décrit par : nom, prénom, genre, adresse, e-mail et numéro
de téléphone.
Chaque animal est examiné par un vétérinaire qui peut lui prescrire des médicaments pour un
traitement. Chaque médicament est décrit par un nom, molécule et effets. On souhaite garder
l’historique des traitements prescrits par chaque vétérinaire pour chaque animal : début, durée,
médicament et quantité à prendre par jour (on peut prescrire plusieurs médicaments dans un
traitement). Un médicament n’est autorisé que pour certaines espèces.
Travail à Faire
1. Elaborer le modèle conceptuel Entité-Association relatif au cahier de charges décrit ci-
dessus.
2. Traduire le modèle relationnel correspondant.
Exercice 2
Soit le schéma relationnel suivant :
Agence (numAgence, nom, ville, capital)
Client(numClient, nomClient, prenomClient, ville)
Compte(numCompte, datOuverture , #numAgence, #numClient, solde)
Emprunt(numEmprunt, datEmprunt, #numCompte, montant, taux, duree)
1/3
Enseignant responsable : Mme Salma Ben Saïd
TD : Bases de Données
Tableau descriptif des données
numAgence, numClient, Entier de 20 chiffres maximum
numCompte, numEmprunt, duree
nom, nomClient, prenomClient, ville Chaine de longueur 80 caractères au maximum
datEmprunt /datOuverture Date / par défaut la date du jour
taux Réel à virgule fixe compris entre 8% et 20%
capital, solde, montant Réel à virgule flottante
Travail à Faire
1. Ecrire les commandes SQL permettant de créer toutes les tables en spécifiant toutes les
contraintes indiquées au niveau du schéma relationnel et celles spécifiées au niveau du tableau
descriptif tout en respectant les types de données imposés.
2. Ecrire la commande SQL permettant de supprimer la colonne duree de la table Emprunt.
3. Ecrire la commande SQL permettant d’ajouter une colonne nommée etatCompte de type
exactement un entier prenant la valeur 0 ou 1 et par défaut prenant la valeur 1( 1 : compte actif/
0 : compte bloqué).
4. Ecrire les commandes SQL permettant d'insérer une ligne de données à chacune des tables en
mettant des valeurs de données de votre choix.
5. En supposant que d’autres données ont été insérées, mettre à jour l’emprunt du client numéro
4578613 réalisé à la date du cinq décembre 2021 en attribuant au montant la valeur 25000 et
au taux la valeur 12%.
6. Ecrire les requêtes SQL permettant de :
a. Afficher la liste des agences triées par ordre Croissant de la ville et par ordre dédroissant
du capital.
b. Afficher la liste des clients qui ont ouvert un compte au mois de Novembre de l’année
2022.
c. Afficher le nombre de comptes et la somme du solde total du client numéro 5674. Utiliser
des alias de colonnes pour l’affichage.
d. Afficher en une seule colonne utilisant un alias et en éliminant les doublons, la liste des
noms, prénoms et villes de tous les clients selon cet affichage :
Nom : nomClient / Prenom : prenomClient / Ville : ville
Remarque : quelques Fonctions prédénies de Oracle sont listées à l’annexe page suivante.
Bon travail
2/3
Enseignant responsable : Mme Salma Ben Saïd
TD : Bases de Données
ANNEXE
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
SELECT extract(DAY from SYSDATE) FROM DUAL;
SELECT MONTHS_BETWEEN(TO_DATE('2024-02-29', 'YYYY-MM-DD'), SYSDATE) FROM dual;
SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;
SELECT LAST_DAY(SYSDATE) FROM DUAL; -- dernier jour du mois
SELECT TO_DATE('2024-02-29', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM DUAL;
SELECT TO_NUMBER('53') FROM DUAL;
SELECT Instr(nomClient,'z')FROM Client; -- Retourne 1 ou 0
SELECT SUBSTR(nomClient,1,3)FROM Client;
SELECT LENGTH(nomClient)FROM Client;
SELECT REPLACE(nomClient,'Ben Foulen','nom')FROM Client;
SELECT TRIM(' BenFoulen')FROM Client; -- LTRIM / RTRIM
3/3