Vous êtes sur la page 1sur 5

CONSERVATOIRE NATIONAL DES ARTS ET METIERS

Samedi 10 février 2007


2 heures
10h15 – 12h15

SYSTEME DE GESTION DE BASES DE DONNEES

UE NFP107

CORRIGE EXAMEN
Premier semestre

Documents autorisés : oui

Centres Régionaux du PTI NORD-EST


CNAM / UE NFP107
Durée : 2 heures (Documents autorisés)
___________________________________________________________________

Chapitre I : Evolution d’un modèle physique de données. (11 points)


L'entreprise Tartempion souhaite à nouveau des évolutions fonctionnelles concernant l'informatisation
de son activité principale de vente par correspondance.

A ce titre, le système d'information doit subir plusieurs améliorations :


1) Gérer les employés de la société de VPC :
Il est demandé de :
– Pouvoir gérer la notion de responsable hiérarchique (sachant qu'un employé ne peut avoir qu'un
seul responsable lui-même employé de l'entreprise)
– Pouvoir gérer leurs diplômes (sachant qu'un employé peut possèder plusieurs diplômes) avec la
date d'obtention.
– Pouvoir gérer leur appartenance à un service de l'entreprise (sachant qu'un employé ne peut
appartenir qu'à un et un seul service de l'entreprise).
2) Gérer la traçabilité de la saisie des commandes.
Il est aussi demandé de pouvoir connaître les télé-conseillères (elles-mêmes employées de
l'entreprise) ayant saisi les différentes commandes des clientes.

Question 1 : Concevoir le nouveau modèle physique de données MPD (en 3FN) afin de réaliser les
évolutions demandées à partir du modèle existant (7 points) :

Conservatoire National des Arts et Métiers 2006-2007 Page 2/5


CNAM / UE NFP107
Durée : 2 heures (Documents autorisés)
___________________________________________________________________
Question 2 : Concevoir le script des requêtes SQL (LDD de création table / clé primaire / clé
étrangère) permettant de gérer les nouvelles fonctionnalités sous le SGBD/R de votre choix. (4
points)

Vous êtes libre d’imaginer la définition d’un employé. Un index sur le nom de l'employé est demandé.

create table SERVICE (


CODE_SERVICE VARCHAR2(2) not null,
LIBELLE_SERVICE VARCHAR2(30) not null
);
alter table SERVICE
add constraint PK_SERVICE primary key (CODE_SERVICE);

create table EMPLOYE (


NUM_EMPLOYE NUMBER(7) not null,
RESP_EMPLOYE NUMBER(7),
CODE_SERVICE VARCHAR2(2),
NOM_EMPLOYE VARCHAR2(30) not null,
PRENOM_EMPLOYE VARCHAR2(30) not null,
NAISSANCE_EMPLOYE DATE not null,
ADRESSE_1_EMPLOYE VARCHAR2(30) not null,
ADRESSE_2_EMPLOYE VARCHAR2(30) not null,
CP_EMPLOYE VARCHAR2(5) not null,
VILLE_EMPLOYE VARCHAR2(30) not null,
TEL_EMPLOYE VARCHAR2(10) not null
);
alter table EMPLOYE
add constraint PK_EMPLOYE primary key (NUM_EMPLOYE);

alter table EMPLOYE


add constraint FK_EMPLOYE_EMPLOYE foreign key (RESP_EMPLOYE)
references EMPLOYE (NUM_EMPLOYE);

alter table EMPLOYE


add constraint FK_EMPLOYE_SERVICE foreign key (CODE_SERVICE)
references SERVICE (CODE_SERVICE);

create index I1_NOM_EMPLOYE on EMPLOYE(NOM_EMPLOYE);

alter table ENTETE_COMMANDE


add NUM_EMPLOYE NUMBER(7) not null;

alter table ENTETE_COMMANDE


add constraint FK_ENTETE_COMMANDE_EMPLOYE foreign key (NUM_EMPLOYE)
references EMPLOYE (NUM_EMPLOYE);

Chapitre III : Requêtes SQL. (4 points)


D’après le modèle physique de l'entreprise Tartempion ci-dessus, écrirez les requêtes SQL :

Question 1 : Ecrire la requête SQL permettant de calculer le nombre moyen de ligne de commande
par commande. (1 point)

select avg(count(num_ligne_commande)) nbmoyen


from ligne_commande
group by num_commande;

Question 2 : Ecrire la requête SQL permettant de calculer le nombre de client sans type client.
(1 point)

Conservatoire National des Arts et Métiers 2006-2007 Page 3/5


CNAM / UE NFP107
Durée : 2 heures (Documents autorisés)
___________________________________________________________________
Select count(*) from client where type_client is null;

Question 3 : Ecrire la requête SQL permettant d’afficher l'ensemble des clients (avec le nom et le
libellé du type client) sous SQL/ANSI 99 sachant que la clé étrangère type_client n'est pas obligatoire.
(1 point)

select num_client, nom_client, libelle_type_client


from client left join type_client using (type_client);

Question 4 : D’après le nouveau modèle physique de l'entreprise Tartempion ci-dessus , écrire la


requête SQL permettant de selectionner la ou les télé-conseillères (avec le numéro et le nom issu de
la table employé) ayant vendu le produit numéro 5 en quantité supérieure à 10. (1 point)

select num_employe, nom_employe from employe e, entete_commande ec, ligne_commande lc


where e.num_employe=ec.num_employe
and ec.num_commande=lc.num_commande
and lc.num_produit=5 and lc.qte>10;

Chapitre III : Définitions. (5 points)

a) Intégrité référentielle (2 points)

Question 1 : Par rapport au modèle physique de données ci-dessus, écrivez la requête SQL (LDD)
permettant de définir la clé étrangère sur la table client. (1 point)

alter table CLIENT


add constraint FK_CLIENT1 foreign key (TYPE_CLIENT)
references TYPE_CLIENT (TYPE_CLIENT);

Question 2 : Définissez la contrainte d’intégrité référentielle (CIR) avec comme exemple l'insertion
d'un enregistrement dans la table CLIENT et la suppression d'un enregistrement dans la table
TYPE_CLIENT) . (1 point)

L'intégrité référentielle permet de décrire les liens de référence entre deux tables et de préciser les
contraintes de mise à jour.

L'intégrité référentielle signifie que la clé externe dans une table de références doit toujours renvoyer à
une ligne valide dans la table référencée.
L'intégrité référentielle garantit que la relation entre deux tables reste synchronisée pendant les mises
à jour et les suppressions.

L'intégrité référentielle nécessite que ces deux tables CLIENT et TYPE_CLIENT soient synchronisées.
Autrement dit, chaque TYPE_CLIENT de la table CLIENT doit également exister dans la table
TYPE_CLIENT.

L’application ne pourra pas simplement supprimer un enregistrement dans la table TYPE_CLIENT si


la valeur de TYPE_CLIENT est utilisée par au moins un enregistrement dans la table CLIENT, car
cela laisserait le TYPE_CLIENT dans la table CLIENT sans référence. Cette opération n’est
acceptable qu’à condition de supprimer le ou les clients ayant le TYPE_CLIENT à supprimer (ou

Conservatoire National des Arts et Métiers 2006-2007 Page 4/5


CNAM / UE NFP107
Durée : 2 heures (Documents autorisés)
___________________________________________________________________
mettre à jour la valeur TYPE_CLIENT par une null). Une telle action préserverait l'intégrité référentielle
pour ces deux tables.

De même, l’application ne peut pas ajouter simplement un CLIENT en l'absence d'un TYPE_CLIENT
valide dans la table TYPE_CLIENT. Il en résulterait l'insertion de données « incorrectes ». Ainsi,
l’application doit s'assurer de la présence d'un TYPE_CLIENT valide dans la table TYPE_CLIENT
avant d'insérer le CLIENT correspondant.

b) Index. (2 points)
Question 1 : Définissez les avantages d'un index de type arbre B+ avec un cas d'utilisation. (1 point)

L'index de type arbre b+ est un index presque parfait :


- Il permet un accès rapide en 3 Entrées/Sorties au plus pour des volumes de plusieurs millions
d'enregistrement.
- Il supporte les recherches par clé, par intervalle, par préfixe.
- Il est dynamique ce qui lui permet une régularité (réorganisation non obligatoire après de multiples
mises à jour).

Ce type d'index est utilisé couramment au sein des SGBD/R (contexte OLTP).
Oracle propose à peu près toutes les structures d’index, par défaut l’index est un arbre B+.

Question 2 : Définissez un cas d'utilisation d'un index de type bitmap. (1 point)

L'index bitmap est un mécanisme alternatif d’indexation qui permet d'indexer une table sur un attribut
qui ne prend qu’un petit nombre de valeurs distinctes et qui offre de trés bonnes performances sur
combinaison de critères dans le cadre des requêtes de type sélection.
Ce type d'index est utilisé notamment dans les entrepôts de données (contexte R-OLAP).

c) Architecture disque. (1 point)


Question 1 : Définissez le RAID 0 et le RAID 1 ainsi que leurs cas d'utilisation. (1 point)

L’idée de base est de faire coopérer des disques durs produits en masse (donc peu coûteux) dans
l’objectif de créer une architecture performante, sécurisée et à haute disponibilité.

RAID 0 : concaténation
Dans cette architecture, la donnée à stocker est répartie sur différents disques synchronisés et
aucune information de redondance n'est stockée. Il en résulte une vitesse de transfert importante
(multiplication des axes). Cependant la moindre panne disque entraîne la perte irrémédiable de
données.

RAID 1 : miroir
Dans cette architecture, le but est de répliquer les données sur un disque miroir à chaque écriture
(d'où une redondance utile en cas de panne disque). Le coût est bien évidemment élevé puisque la
capacité installée est le double de la capacité utile.

L'association de disques en RAID 0 (Striping) permettra d'améliorer soit les performances en lecture
et écrire simultanée sur plusieurs disques pour en augmenter le débit. Elle permettra aussi
d'augmenter la capacité, les partitions pouvant s'étendre sur plusieurs disques.

L'association de disques en RAID 1 (Mirroring) permettra d'apporter la tolérance de panne (sécurité),


on se prémunit ainsi contre les défaillances disque.

Conservatoire National des Arts et Métiers 2006-2007 Page 5/5

Vous aimerez peut-être aussi