Sunteți pe pagina 1din 85

Département Technologies de l’Informatique

CHAPITRE1

INTRODUCTION

Objectifs
 Expliquer la migration de l’approche classique à l’approche base
des données.
 Connaître les concepts de base de l’approche Base de données.
 Expliquer les fonctionnalités d’un SGBD.
 Distinguer les différents types de SGBD.

Plan du chapitre
I ETUDE CRITIQUE DE L’APPROCHE CLASSIQUE
II LA SOLUTION
III DEFINITIONS
IV LES FONCTIONNALITES
V LES TYPES DE SGBD

Base de Données 1
Département Technologies de l’Informatique

I ETUDE CRITIQUE DE L’APPROCHE CLASSIQUE


Afin d’introduire l’approche Base de données, nous allons partir des insuffisances
constatés dans les systèmes informatiques classiques. Ces systèmes sont basés sur la gestion
des fichiers et permettent de définir simultanément la structure des données (fichiers) et la
logique des traitements (programme).

Les applications informatiques classiques ont pour trait commun d’être développés à la
demande, sans politique d’ensemble. Chaque fois qu’un besoin est exprimé par un service
particulier de l’entreprise, une analyse est effectuée, qui conduit au développement d’un certain
nombre de programmes organisés en chaînes de traitement qui manipulent un ensemble de
fichiers assez rudimentaires.

Il en résulte alors un grand nombre de problèmes:

 Redondance des données: certaines données utiles à plusieurs applications seront


répliquées dans un nombre de fichiers parfois important. Il en résultera une certaine
perte de place ainsi qu’un risque d’erreur.

 Inconsistance des informations: diverses copies de la même donnée ne


concordent plus car elles appartiennent à des applications différentes et n’ont pas été
mises à jour de la même façon.

 Eclatement de l’information: certaines informations pourtant reliées seront éclatées


à travers plusieurs fichiers associés à des applications différentes et seront impossibles
ou du moins très difficiles à exploiter ensemble.

A cela s’ajoute:

 Un très grand manque de souplesse: les informations ne seront accessibles qu’à


travers des programmes d’applications complexes écrits dans des langages plus ou
moins rébarbatifs (COBOL, PL/1,…) ce qui impose à l’utilisateur final de passer par
l’intermédiaire d’un service informatique surchargé de travail et empêche de développer
dans des temps raisonnables des applications qui pourtant auraient pu être utiles.

 Des problèmes de sécurité d’accès aux données: on ne peut se permettre


d’autoriser n’importe qui à accéder à n’importe quelle information.

 Des problèmes d’intégrité: les informations contenues dans les divers fichiers
doivent être respecté un certain nombre de contraintes et il est en général impossible de
développer des modules génériques permettant de régler ces problèmes (même les plus
simples: vérification de type par exemple).

Base de Données 2
Département Technologies de l’Informatique

Direction des Etudes Bibliothèque Scolarité

Application Application Application


En Cobol En C En Java

Fichier Elèves Fichier Elèves Fichier Elèves

Figure 1: Approche classique

II LA SOLUTION
L’idée de bases de données est née du besoin de remédier aux problèmes que nous
venons d’évoquer. Pour ce faire l’idée clé fut sans doute celle d’abstraction. Depuis
longtemps déjà, on s’était préoccupé de séparer progressivement le logique du physique.

Pour le programmeur des premiers ordinateurs de gestion, le seul support externe (sur
lequel il pouvait stocker des fichiers) était la bande magnétique. C’est de ce support qu’est
né le concept de fichier séquentiel, et c’est d’ailleurs le seul qui permettait d’imaginer. Il y
avait alors identité presque totale entre le fichier logique c’est à dire la vision que le
programmeur avait de son fichier, et le fichier physique, c’est à dire le fichier tel qu’il
existait sur la bande. Tous les deux étaient constitués d’une suite d’enregistrements
contigus, et le passage de l’un à l’autre était réalisé par un programme de gestion de fichiers
tout à fait simple.

L’apparition de supports adressables (les disques magnétiques) a permis d’effectuer un


premier pas: un fichier séquentiel s’il reste, n’est plus sur le disque un ensemble
d’enregistrements contiguës. Il est constitué d’un ensemble de pages (ou blocs physiques:
unité minimales de transfert entre le disque et la mémoire centrale) repartis sur le support
au hasard de la vie du disque et du fichier. Il est alors nécessaire d’utiliser un logiciel
nettement plus complexe pour assurer la conversion entre les deux points de vue: fichier
logique et fichier physique.

En outre, le fait de pouvoir adresser directement n’importe quel secteur de ce nouveau


support permet l’apparition de la notion d’accès direct à un enregistrement. En effet, tout
fichier enregistré sur un support adressable est un fichier relatif: connaissant la liste des
pages contenant le fichier, la taille d’un enregistrement, la taille d’une page et le numéro de
l’enregistrement cherché, on peut calculer le numéro de la page où se trouve cet
enregistrement, la lire en mémoire centrale puis obtenir le dit enregistrement, et ce en temps
très faible, en tout cas indépendant du numéro de l’enregistrement et de la taille du fichier.
Le fichier relatif est alors au fichier séquentiel, ce que l’accès direct dans un tableau est au
parcours séquentiel de ce tableau.

Base de Données 3
Département Technologies de l’Informatique

Grâce à ce type de fichier, on est en mesure de réaliser des fichiers à accès direct: on définit
dans un enregistrement une zone, appelée clé, qui le caractérise de façon unique, et on fait
en sorte que la donnée de la valeur de la clé permettre de retrouver instantanément
l’enregistrement recherché. Deux techniques bien connues permettent de réaliser de tels
fichiers, l’adressage dispersé et l’adressage indexé.

Encore une fois, l’apparition de ces concepts marque un décalage de plus en plus grand
entre la structure logique du fichier (donc la vision humaine) et sa structure physique (donc
le point de vue de la machine).

Le concept de système de gestion de bases de données est un pas de plus dans cette
direction. Cette fois, on va faire en sorte, non seulement, de séparer aussi totalement que
possible la structure logique de la structure physique des informations, mais d’isoler le plus
possible les données des programmes, en sorte qu’une modification de la structure des
données n’ait pas d’influence sur les programmes déjà écrits.

III DEFINITIONS
Une base de données est une collection de données inter-reliées. C'est une entité cohérente
logiquement et véhiculant une certaine sémantique,

Un Système de Gestion de Bases de Données (SGBD) est un ensemble de programmes


qui permettent à des utilisateurs de créer et maintenir une base de données. Les activités
supportées sont la définition d'une base de données (spécification des types de données à
stocker), la construction d'une base de données (stockage des données proprement dites) et la
manipulation des données (principalement ajouter, supprimer, retrouver des données). Les
SGBD commerciaux les plus connus sont Oracle, Sybase, Ingres, Informix et DB2,…

Plusieurs années de réflexions (illustrée par exemple par les rapports de CODAYL DBTG:
COnference on DAta SYstem Langages DataBase Task Group) ont conduit à définir plusieurs
niveaux d’abstraction:

 Niveau physique ou interne, le moins élevé, celui de l’inscription physique de la


donnée sur le support mémoire, c’est le niveau de l’ingénieur système.

 Niveau conceptuel ou logique, qui décrit l’intégralité de l’information à prendre en


compte, autrement dit, la base de données, en termes globaux, décrivant la nature des
informations et la façon, dont elles sont structurées; c’est le niveau de l’administrateur
de la base de données.

 Niveau externe ou vue, le plus éloigné de la machine qui décrit une certaine approche
de la réalité, telle que tel ou tel utilisateur doit l’appréhender. Il permettra de donner de
la base une vision tout à fait différente de ce qu’elle est en réalité, pour la rendre plus
agréable à utiliser, pour la simplifier, ou pour limiter l’accès à certaines informations
confidentielles.

Base de Données 4
Département Technologies de l’Informatique

A B C
Utilisateur ou Sous-Schémas ou
Programmeur Vues

Indépendance Logique
Analyste
Schéma Conceptuel de
Administrateur
la Base de Données

Administrateur Base Physique Indépendance Physique


Ingénieur
Schéma physique de la
Système
Base de Données
Figure 2: Les niveaux d’abstraction

Les deux notions d’indépendance présentées sur la figure 1 sont très fortes:

 Indépendance physique: on souhaite pouvoir modifier la structure physique de


l’information sans toucher à la structure logique, par exemple en réorganisant les
données pour accélérer les traitements.

 Indépendance logique: on souhaite pouvoir modifier le schéma conceptuel sans


altérer les vues que les utilisateurs ont de la base, ou créer de nouvelles vues sans
apporter de modifications au schéma conceptuel.

Un SGBD sépare la partie description des données, des données elles mêmes. Cette description
est stockée dans un dictionnaire de données (également géré dans le SGBD) et peut être
consultée par les utilisateurs.
Un modèle de données est un ensemble de concepts permettant de décrire la structure d'une
base de données. La plupart des modèles de données incluent des opérations permettant de
mettre à jour et questionner la base. Le modèle de données le plus utilisé est le modèle
relationnel.

IV FONCTIONNALITES
Un SGBD distingue plusieurs catégories de personnes auxquels il proposera des points
de vue différents sur la base et les outils adaptés:
 ingénieur système,
 administrateur de la base de données,
 programmeur d’application,
 utilisateur terminal ou occasionnel.

Dans la plupart des systèmes, les deux premiers types d’utilisateurs peuvent être confondus.
D’autre part, la distinction que nous faisons est encore une fois abstraite: un même individu
peut à des moments différents jouer l’un ou l’autre de ces rôles, et chacun peut être tenu par
plusieurs personnes distinctes.

Base de Données 5
Département Technologies de l’Informatique

La vision que chacun aura de la base de données est du SGBD lui-même dépendra
essentiellement de l’interface qui lui sera proposée. Celle-ci sera bien sûr plus ou moins
conviviale et pourra se présenter sous la forme d’un environnement graphique ou sous la forme
d’un simple langage de commande.

Figure 3: Les utilisateurs d’un SGBD

IV.1 L’ADMINISTRATEUR DE LA BASE DE DONNEES


C’est le responsable ou l’équipe responsable de l’ensemble du système. Ses fonctions
sont pour l’essentiel:

 la définition de la structure logique de la base,


 la mise en place physique de la base,
 la maintenance de la base, à travers les modifications nécessaires à sa structure logique
ou physique,
 la définition des droits d’accès des divers utilisateurs et la construction des vues qui leur
sont offertes.

Pour ce faire, l’administrateur dispose d’un ensemble d’outils regroupés sous le nom de
Langage de Définition de Données (Data Definition System). Celui-ci lui offrira un ensemble
de commandes de création d’objets et d’un ensemble d’utilitaires pour surveiller la base et en
optimiser l’utilisation.

IV.2 LES UTILISATEURS


Les utilisateurs accéderont à la base à travers:

 des programmes d’application, écrits dans un langage de programmation classique


appelé langage hôte (tel Pascal, C, Cobol,…) dans lequel seront inclues des instructions
du langage de manipulation de données. Avant de pouvoir être compilé, un tel

Base de Données 6
Département Technologies de l’Informatique

programme devra en général être traité par un préprocesseur, qui transformera ces
instructions en appel à des sous-programmes que l’éditeur de lien trouvera dans une
bibliothèque appropriée,
 des requêtes (en Anglais Queries) écrites directement dans le langage de manipulation
de données et exécutées en mode interactif grâce à un processeur de requêtes,

les diverses commandes accessibles à l’utilisateur sont regroupés sous le nom de Langage
de Manipulation de Données (Data Manipulation Language). Permettant à l’utilisateur de
réaliser l’insertion, la suppression ou la modification d’information et d’interroger la base
pour retrouver des informations stockées, ce langage pourra être utilisé sous forme
interactive ou pourra être inclus dans des programmes écrits dans des langages traditionnels
(C, Cobol, Pascal).

IV.3 FONCTIONNALITES INTERNES


Nous donnons ici les caractéristiques souhaitables des SGBD qui ne sont pas forcément
prises en compte par les SGBD commerciaux.

1- Contrôler la redondance d'informations

La redondance d'informations pose différents problèmes (coût en temps, coût en volume


et risque d'incohérence entre les différentes copies). Un des objectifs des bases de données est
de contrôler cette redondance, voire de la supprimer, en offrant une gestion unifiée des
informations complétée par différentes vues pour des classes d'utilisateurs différents.

2- Partage des données

Une base de données doit permettre d'accéder la même information par plusieurs
utilisateurs en même temps. Le SGBD doit inclure un mécanisme de contrôle de la concurrence
basé sur des techniques de verrouillage des données (pour éviter par exemple qu'on puisse lire
une information qu'on est en train de mettre à jour).

Le partage des données se fait également par la notion de vue utilisateur, qui permet de définir
pour chaque classe d'utilisateurs la portion de la base de données qui l'intéresse (et dans la
forme qui l'intéresse).

3- Gérer les autorisations d'accès

Une base de données étant multi-utilisateurs, se pose le problème de la confidentialité


des données. Des droits doivent être gérés sur les données, droits de lecture, mise à jour,
création,... qui permettent d'affiner la notion de vue utilisateur.

4- Offrir des interfaces d'accès multiples

Un SGBD doit offrir plusieurs interfaces d'accès, correspondant aux différents types
d'utilisateurs pouvant s'adresser à lui. On trouve des interfaces orientées utilisateur final
(langages de requêtes déclaratifs comme SQL avec mise en œuvre graphique, interface de type
formulaire,...) ou bien orientées programmeurs d'applications (interface avec des langages de
programmation classiques comme par exemple l'approche SQL immergé).
Base de Données 7
Département Technologies de l’Informatique

5- Représenter des relations complexes entre les données

Un SGBD doit permettre de représenter des données inter-reliées de manière complexe.


Cette facilité s'exprime à travers le modèle de données sous-jacent au SGBD. Chaque modèle
de données offre ses propres concepts pour représenter les relations. On peut citer les modèles
hiérarchique, réseau (première génération de modèles), relationnel (génération actuelle),
sémantiques (ou orientés vers la conception tel que Entité-Association, Z,...) ou orienté-objet
(la génération future ?).

6- Vérifier les contraintes d'intégrité

Un schéma de base de données se compose d'une description des données et de leurs


relations ainsi que d'un ensemble de contraintes d'intégrité. Une contrainte d'intégrité est une
propriété de l'application à modéliser qui renforce la connaissance que l'on en a. On peut
classifier les contraintes d'intégrité, en contraintes structurelles (un employé a un chef et un
seul par exemple) et contraintes dynamiques (un salaire ne peut diminuer). Les SGBD
commerciaux supportent automatiquement un certain nombre de contraintes structurelles, mais
ne prennent pas en compte les contraintes dynamiques (elles doivent être codées dans les
programmes d'application).

7- Assurer la sécurité et la reprise après panne

Une base de données est souvent vitale dans le fonctionnement d'une organisation, et il
n'est pas tolérable qu'une panne puisse remettre en cause son fonctionnement de manière
durable. Les SGBD fournissent des mécanismes pour assurer cette sécurité. Le premier
mécanisme est celui de transaction qui permet d'assurer un comportement atomique à une
séquence d'actions (elle s'effectue complètement avec succès ou elle est annulée).

Une transaction est une séquence d'opérations qui fait passer la base de données d'un état
cohérent à un nouvel état cohérent. L'exemple typique est celui du débit-crédit pour la gestion
d'une carte bancaire. Ce mécanisme permet de s'affranchir des petites pannes (style coupure de
courant).

En ce qui concerne les risques liés aux pannes disques, les SGBD s'appuie sur un mécanisme
de journalisation qui permet de régénérer une base de données automatiquement à partir d'une
version de sauvegarde et du journal des mouvements.

V LES TYPES DE SGBD


Historiquement les premiers SGBD étaient de type hiérarchique, puis sont apparus les
SGBD de type réseau. Actuellement, la plupart des nouveaux systèmes sont de types
relationnels. Des SGBD de type "objet" commencent à apparaître sur le marché et ils
remplacent vraisemblablement une partie des SGBD relationnels.

La différence essentielle entre ces SGBD réside dans les modèles sur lesquels ils s’appuient
pour représenter les données.

Base de Données 8
Département Technologies de l’Informatique

Modèle hiérarchique

Les données sont représentées sous forme d’une structure arborescente


d’enregistrements. Cette structure est conçue avec des pointeurs et détermine le chemin d’accès
aux données.

Modèle réseau

La structure des données peut être visualisée sous la forme d’un graphe quelconque.
Comme pour le modèle hiérarchique, la structure est conçue avec des pointeurs et détermine le
chemin d’accès aux données.

Pour les modèles hiérarchiques et réseau, les programmes ne sont pas indépendants de la
structure logique de la base et du chemin d’accès aux données: ils doivent décrire comment
retrouver les données (on parle de navigation dans la base) et si, par exemple, on enlève un
index, tous les programmes que l’utilisaient doivent être réécrits. De plus le langage de travail
est complexe.

Modèle relationnel

Le modèle relationnel de données a été défini en 1970 par Codd et les premiers
systèmes commerciaux sont apparus au début des années 80. Le modèle relationnel est simple
(3 concepts), facile à appréhender, même pour un non spécialiste et repose sur de solides bases
théoriques qui permettent notamment de définir de façon formelle les langages de manipulation
associés.

Le modèle relationnel représente l'information dans une collection de relations. Intuitivement,


on peut voir une relation comme une table à double entrée, voire même comme un fichier.
Chaque ligne de la table (appelée nuplet ou tuple) peut être vue comme un fait décrivant une
entité du monde. Une colonne de la table est appelée un attribut.

Modèle Objet

Les données sont représentées sous forme d’objets au sens donné par les langages
orientés objets: pour simplifier, les données sont enregistrées avec les procédures et fonctions
qui permettront de les manipule. Les SGBD Orientés Objet (SGBDOO) supportent aussi la
notion d’héritage entre classes d’objets.

Base de Données 9
Département Technologies de l’Informatique

QCM
1. qu'est ce qu'une base de données ?

c'est un logiciel
c'est une collection d'informations structurées
c'est un module à valider

2. quels sont les avantages liés à l'utilisation des systèmes de gestion de bases de données

l'utilisation d'un langage de requête déclaratif


une plus grande indépendance par rapport au système d'exploitation
une description unique et globale des données manipulées

3. qu'est ce que la sécurité offerte par un SGBD

l'identification des utilisateurs par un mot de passe et l'association de droits aux


utilisateurs
des mécanismes de résistance aux pannes limitant l'impact de celles-ci
des mécanismes matériels interdisant les pannes

4. quels sont les différents modèles de données existants ?

relationnel
entité-association
graphique

5. Un administrateur de Base de données est

Le premier responsable de l’entreprise


Le gestionnaire de base de données
Un utilisateur de l’informatique comme les autres

Base de Données 10
Département Technologies de l’Informatique

CHAPITRE 2

CONCEPTION ET STRUCTURATION
DES DONNEES

Objectifs
 Connaître la modèle Entité-Association.
 Manipuler ce modèle.
 Résoudre un problème utilisant ce modèle.

Plan du chapitre
I LE SCHEMA CONCEPTUEL
II ELABORATION D’UN SCHEMA CONCEPTUEL

Base de Données 11
Département Technologies de l’Informatique

I LE SCHEMA CONCEPTUEL
Pour effectuer la description des besoins spécifiques de chaque utilisateur, il est
nécessaire de faire référence à un certain nombre de concepts de base tels qu’Entité et
Associations.
Il existe plusieurs modèle qui peuvent être utilisés pour servir la base à un SC; parmi ceux-ci, le
modèle Entité-Association (CHE-76), le modèle Z qui appartient à la classe des modèles
relationnels,...
Tous ces modèles n’utilisent pas les mêmes concepts. Nous avons choisis le modèle Entité-
Association qui nous servira de référence pour la suite.

I.1 LE MODELE ENTITE-ASSOCIATION


C’est P.P. Chen dans CHE76 qui a présenté les notions de base de ce modèle.
Nous allons tout d’abord préciser la terminologie utilisée dans ce modèle, ainsi que les
concepts fondamentaux.

1. Entité

Une entité est une personne, un objet, un lieu, un statut, un événement qui a une
existence dans le monde réel. C’est l’objet concret ou abstrait. Elle possède un certain nombre
de caractéristiques.

Les entités se manifestent dans le monde réel à travers des faits élémentaires. Elles sont
naturellement perçus et utilisées par les gestionnaires et les analystes.

Exemples:
 "l’usine X est une petite entreprise."
une information de ce type concerne l’entité usine X.

 " l’employé Y travaille dans l’usine X."


deux entités sont mises ici en jeu, employé Y et l’entité usine X.

C’est à travers des faits que les entités sont perçues. Nous voyons que ces faits peuvent
concerner plusieurs entités: ils font la notion d’association.

2. Association

L’association est un ensemble d’entités liées entre elles par fait élémentaire. Chaque
entité de l’ensemble joue un rôle particulier dans l’association: Lien sémantique entre deux ou
plusieurs entités. Le lien n'est pas orienté.

Base de Données 12
Département Technologies de l’Informatique

Exemples:
 le fait que "la voiture X appartient à la personne Y" est une association entre les entités
voiture X et personne Y.

3. Classe d’entités

Regroupement d’entités ayant des caractéristiques similaires est désigné par un nom.

Exemples:
 Classe d’Entité PRODUIT
 Classe d’Entité USINE

4. Classe d’associations

De la même façon que les entités, les associations se regroupent en classe


d’associations, qui seront appelés LIAISONS. De manière générale, on désigne une liaison ou
CA par un verbe et on indique, entre parenthèses, les noms des CE concernées.

Exemples:
 Liaison TRAVAILLE (USINE, EMPLOYE)
Cette liaison apparaît dans le cadre d’une application de gestion de personnel. A travers cette
liaison on caractérise le fait qu’une usine emploie plusieurs personnes. Les CE concernées sont
désignées par leur nom: EMPLOYE et USINE.

5. Description

a- Description des Classes d’Entités

La description des classes d’entités sous la forme d’une liste linéaire de rubriques et du
nom de la CE.
Les rubriques sont appelées des propriétés: Données élémentaires permettant de décrire une
entité.
Employé
Numéro Nom Adresse
Valeur 10 Ali Gafsa
20 Mohamed Tunis
30 Samira Sfax

Rubrique

Nom de la CE
Entité

Description de la CE: [NUMERO, NOM, ADRESSE]

Base de Données 13
Département Technologies de l’Informatique

b- Description des Liaisons

De même que les CE, on peut associer à la liaison une ou plusieurs descriptives.
Exemple la liaison COND-VENTE (condition de vente) que l’on peut rencontrer dans le
cadre de l’application gestion des approvisionnements, elle sert à caractériser les produits
fournis par un fournisseur et inversement: elle permet de déterminer le fournisseur qui est
associé à la meilleure condition de vente pour un produit donné.
Ainsi à la liaison COND-VENTE, on peut associer la rubrique PU_VENTE (prix unitaire
de vente).
La description d’une association fera intervenir un triplet:
[Code_pr,Code_fr,Pu_Vente]

Rubrique descriptive de la
Association entités
liaison
FOURNISSEUR-PRODUIT

Cond-vente
Code_pr Code_fr Pu_vente
P1 F1 12.500
P1 F2 13.000
P2 F1 15.200

6. Référence

La notion de référence correspond à la notion de clé primaire qui permet


l’identification.

a- Référence de la CE

Les valeurs de la référence permettent d’identifier les articles de la CE. Lors du choix de la
rubrique référence plusieurs cas peuvent se présenter:
1ier cas: s’il n’y a pas de rubriques susceptibles de jouer le rôle de référence, on peut
introduire une nouvelle rubrique pour assurer cette fonction.
2ième cas: plusieurs rubriques peuvent être nécessaires pour identifier un article, dans ce cas
la référence sera composée d’un groupe de rubriques.
3ième cas: plusieurs rubriques peuvent jouer le rôle de référence, dans ce cas une de ces
rubriques est choisie comme référence.

b- Référence de la liaison

Cas général: les valeurs de référence des entités feront partie des articles décrivant
l’association entre ces entités. Ces articles contiennent alors:
 les valeurs des références identifiant les entités de l’association,
 les valeurs des rubriques de liaison caractéristiques de l’association.

Base de Données 14
Département Technologies de l’Informatique

Si le cas général la référence de la liaison peut être composée des références des CE, dans
certains cas les articles de la liaison peuvent ne pas être identifiés de cette façon. La référence
devra contenir d’autres rubriques pour pouvoir identifier chaque article.

7. Représentation par Diagramme du SC

le schéma conceptuel d’une Bd peut être visualisé à l’aide d’un diagramme utilisant le
symbolisme suivant:

a- Classe d’Entité

Nom de la classe
d’entité

Nom_rubrique On distingue la référence en


Nom_rubrique la soulignant
……

Exemple: Représentation de la CE Employé

Employé Employé
ou Code_emp
Code_emp
Nom Nom
Prenom Prenom
Adresse Adresse
Date-entree Date-entree

La référence de la classe d’entité est soulignée. Si la référence est composée de n rubriques,


toutes les rubriques qui font partie sont soulignées.

Pour permettre une utilisation postérieure plus simple du schéma de la BD pour la description
des chemins d’accès, certaines contraintes doivent être respectées:
 deux classes d’entités distinctes ne peuvent porter le même nom
 l’affectation d’un attribut est nécessaire:
 si une rubrique’ intervient dans la description de plusieurs classes
 si une rubrique apparaît plusieurs fois dans la description d’une classe
d’entités.
La notion d’attribut:

Exemple:
EMPLOYE(Code, nom, adresse, qualification)

TACHE(Code, libelle, qualification)

Ambiguïté
Base de Données 15
Département Technologies de l’Informatique

Pour enlever cette ambiguïté on utilise la notion d’attributs. Un attribut sert à préciser le rôle
d’une rubrique. On aura donc:
EMPLOYE(Code_emp, nom, adresse, qualification_emp)

TACHE(Code_tache, libelle, qualification_tache)

L’utilisation de l’attribut: Les attributs sont tous distincts, il n’y aura plus d’ambiguïté
liée à des problèmes de polysémie.

b- Liaison

Nom CE A N Nom_liaison M Nom CE B

Nom rubrique liaison1


Nom rubrique liaison2
.
.
Rubriques descriptives
de la liaison

ou

Nom CE A N Nom_liaison M Nom CE B


Nom rubrique
…liaison1

Le type de la liaison:

Le type de la liaison est indiqué par un couple de valeur:


[1:1]; [1: N]; [N: M]

1. liaison de type [1: 1]

Soient A et B deux classes d’entités avec: A[A1, A2, A3,….,An] et B[B1, B2, B3,…, Bn]
La liaison entre A et B est notée par:
A  B de type [1: 1] si et seulement si

correspond
1 entité de la CE A =======> 1 entité de la CE B

et
correspond
1 entité de la CE B =======> 1 entité de la CE A

Base de Données 16
Département Technologies de l’Informatique

Exemple:

enseigne
Un enseignant =======> Un seul cours
On a donc la liaison Enseigner:
Est enseigné par ENSEIGNANT <======> COURS de
Un Cours =======> Un seul enseignant type [1: 1]

2. liaison de type [1: N] liaison hiérarchique

Soient A et B deux classes d’entités avec: A[A1, A2, A3,….,An] et B[B1, B2, B3,…, Bn]
La liaison entre A et B est notée par:
A  B de type [1: N] si et seulement si

correspond
1 entité de la CE A =======> N entité de la CE B

et
correspond
1 entité de la CE B =======> 1 entité de la CE A

Exemple:

Passe
Un client =======> N commandes
On a donc la liaison Passation:
Est passée par CLIENT <======> COMMANDE de
Une commande =======> Un client type [1: N]

Pour les liaisons hiérarchiques il existe deux types:


la liaison A  B est dite hiérarchique totale si et seulement si la contrainte suivante est
vérifiée:

la suppression d’une entité de CE A entraîne la suppression de toutes les entités


correspondantes dans la CE B.

Si la contrainte n’est pas vérifiée la liaison est dite liaison hiérarchique partielle.

3. liaison de type [1: 1]

Soient A et B deux classes d’entités avec: A[A1, A2, A3,….,An] et B[B1, B2, B3,…, Bn]
La liaison entre A et B est notée par:
A  B de type [N: M] si et seulement si

correspond
1 entité de la CE A =======> N entité de la CE B

et
Base de Données 17
Département Technologies de l’Informatique

correspond
1 entité de la CE B =======> M entité de la CE A

Exemple:

Est fourni par


Un produit =======> N fournisseurs
On a donc la liaison Enseigner:
Fournit PRODUIT <======> FOURNISSEUR
Un fournisseur =======> M produits de type [N: M]

II ELABORATION D’UN SCHEMA CONCEPTUEL

La démarche qui conduit SC comprend:

 détermination de la liste de rubriques existant dans le système.


 Les rubriques d’entrée sont ventilées selon les classes d’entités. C’est à dire on
regroupe les rubriques qui décrivent les mêmes objets.
 On détermine la référence de chaque classe d’entité
 On détermine les liaisons et ses références
 On détermine les types de liaisons

Base de Données 18
Département Technologies de l’Informatique

Exemple: élaborer le diagramme E-A de la bibliothèque de l’ISET GAFSA

Auteur Fournisseur

Code_aut Code_four
Nom N Raison_soc_four
Prenom Adresse-four
Date-nais
Date_mort
natinnalite écrire

N
1
1 1
Editer Livre Fournir

Code_liv N
Titre
N Série
Prêter

Date_prêt
Date_remise
N
Editeur

Code_edit Lecteur
Raison_soc_edit
Adresse_edit
Code_lect
Nom_lect
Prenom_lect
Type_lect
Adresse_lect

DIAGRAMME E-A BIBLIOTHEQUE

Base de Données 19
Département Technologies de l’Informatique

QCM

1. Une agence peut passer un même devis à plusieurs contrats

vrai
faux

2. Un contact est réalisé par un et un seul expert

vrai
faux

Base de Données 20
Département Technologies de l’Informatique

3. Un expert peut avoir plusieurs compétences

vrai
faux

4. Un expert peut travailler dans plusieurs agences

vrai
faux

5. Une demande de placement peut ne pas être formulée par une entreprise

vrai
faux

6. Une agence travaille avec plusieurs experts

vrai
faux

7. Tous les experts doivent travailler avec des agences

vrai
faux

Base de Données 21
Département Technologies de l’Informatique

SERIE D’EXERCICES
Exercice 1:

Une société de transport aérien décide de repenser l'implantation de son système


d'information en évoluant d'une approche fichiers vers une approche BD relationnelle. La
démarche préconisée est de représenter la réalité de l'entreprise en utilisant le modèle entité-
association avec la prise en compte des contraintes d'intégrité. Le résultat de cette modélisation
doit alors être transformé en un schéma relationnel complet.
Pour vous permettre de concevoir le modèle entité-association, nous donnons la
description des informations à gérer au sein de l'entreprise de transport aérien. L'objectif est
d'assurer la gestion, d'une part des employés, des vols et des appareils, d'autre part des clients et
des billets.
L'ensemble des employés se compose du personnel navigant et du personnel au sol.
Parmi le personnel navigant, on distingue les pilotes et les membres d'équipage (hôtesses,
stewart, ...).
Un employé est caractérisé par un numéro de sécurité sociale, un nom, un prénom, une
adresse et un salaire.
Un personnel navigant comptabilise un certain nombre d'heures de vol.
Un pilote possède une licence définie par un numéro.
Un membre d'équipage assure une certaine fonction (hôtesse, stewart, ...).
Un appareil est identifié de manière unique par un numéro d'immatriculation. Il possède
un type (A320, B747, ...) et il offre une certaine capacité en nombre de passagers.
Chaque liaison desservie par au moins un vol de la compagnie est définie par une ville
d'origine et une ville de destination; de plus, elle est identifiée par un numéro.
Un vol est identifié par un numéro de vol. Il est caractérisé par une période de validité
définie par deux dates. Durant cette période, ce vol a des horaires fixes (heure départ et heure
arrivée). Un vol dessert, une liaison et une seule. Qui plus est, un appareil et un seul est associé
à un vol donné.
Pour chaque vol enregistré, on suppose qu'il existe un départ tous les jours pendant la
période de validité de ce vol. Un départ est défini par un numéro de vol et une date de départ. A
un départ sont associés un ou deux pilotes et deux à quatre membres d'équipage. Un départ est
également caractérisé par un nombre de places libres et un nombre de places occupées. Une
place occupée est une place ayant donnée lieu à une réservation avec émission d'un billet.
Un passager est identifié par un numéro. Il possède un nom, un prénom, une adresse,
une profession et une banque. Il effectue des réservations qui donnent lieu à l'émission de
billets.
Un billet est repéré par un numéro. Il comporte une date d'émission et un prix. Un billet
référence un départ et un seul. Pour simplifier, on suppose qu'un billet concerne un client et un
seul.
Question:
Concevoir le diagramme entité-association pour gérer la BD de cette entreprise

Base de Données 22
Département Technologies de l’Informatique

Exercice 2:

La société Hoster spécialisée dans la gestion hôtelière souhaite automatiser son activité.
Actuellement, la société Hoster est chargée de gérer d’une manière centralisée 14 hôtels de 460
chambres au maximum chacun.
Ces hôtels sont répartis en 4 classes (**, ***, ****, ******). Pour chaque hôtel, il y a
au maximum 5 catégories de chambres différentes (avec douche, avec baignoire, etc.).
Le prix d’une chambre, fixe pour une classe d’hôtel et une catégorie donnée, sera
fonction du nombre d’occupants (une ou deux personnes).
Les prix des petits déjeuners et des consommations diverses sont propres à chaque
hôtel.
Une gestion simplifiée de cette activité consiste à:

- la maintenance de ce "parc" hôtelier (création, modification des caractéristiques des


hôtels et de leurs chambres),
- l’enregistrement des réservations ou des locations immédiates,
- la consultation des disponibilités en vue des réservations ou des locations immédiates,
- l’enregistrement de l’arrivée effective des clients (remise des clefs et relevé du
compteur téléphonique de la chambre),
- l’enregistrement des diverses consommations durant le séjour,
- l’établissement de la facture au départ du client: celle-ci regroupe le prix de la
chambre et les prestations diverses fournies pendant le séjour.
- garder une trace de l’ensemble des éléments sur les séjours effectués dans les 12
derniers mois par les clients: ceci permettra d’établir des statistiques sur les séjours.

Hypothèses simplificatrices:
 un client ne peut réserver que des chambres d’un même hôtel,
 un client ne peut réserver plusieurs chambres pour une même
période.

Question:
Proposer un modèle Entité/Association relatif à la gestion hôtelière de la société Hoster.

Exercice 3:

A l’Institut, chaque étudiant en Informatique doit effectuer un stage de 3 mois dans une
entreprise. Pour cela, le département informatique dispose d’une liste d’entreprises ayant
proposés des stages. Les étudiants prennent contact avec les entreprises qui les intéressent. Une
fois les conventions de stage signées, on désigne pour chaque stagiaire son responsable de
stage.
Le responsable doit veiller au bon déroulement du stage et aller rendre visite au
stagiaire dans son entreprise d’accueil.
Chaque enseignant du département doit ainsi, quelle que soit sa spécialité, encadrer au
moins trois étudiants et au plus cinq étudiants.
Le département d’informatique de l’Institut dispose des renseignements suivants: Pour
chaque étudiant: son numéro d’inscription, son nom, sa date de naissance, son groupe, et quand
sa convention de stage est signée, le nom de son entreprise d’accueil et la date de la
convention, puis le nom de son responsable.
Pour chaque entreprise: son nom, son adresse, son type (publique, privée), le nom du
responsable des stages dans l’entreprise qui assure le contact avec l’Institut.
Base de Données 23
Département Technologies de l’Informatique

Pour chaque enseignant: son nom, son prénom, sa fonction, son numéro de téléphone,
les entreprises qu’il a déjà visitées, avec pour chacune l’année de sa dernière visite.
Question:

Construire le modèle Entité/Association représentant l’organisation de ces stages.

Base de Données 24
Département Technologies de l’Informatique

CHAPITRE 3

MODELE RELATIONNEL

Objectifs
 Comprendre le principe de modèle relationnel.
 Distinguer les différentes opérations du modèle relationnel.

Plan du chapitre
I INTRODUCTION
II LES CONCEPTS DE BASE DU MODELE RELATIONNEL
III ALGEBRE RELATIONNELLE

Base de Données 25
Département Technologies de l’Informatique

I INTRODUCTION
Le modèle relationnel a été introduit par E. F. Codd [Codd70] qui travaillait au centre
de recherche d’IBM San-José. La première volonté du modèle relationnel fut d’être un modèle
ensembliste simple, supportant des ensembles d’enregistrements aussi bien au niveau de la
description qu’au niveau de la manipulation. Les premières idées d’un modèle ensembliste
avaient été proposées un peu avant, notamment dans [Childs68]. Le modèle relationnel est
aujourd’hui la base de nombreux systèmes.
Il repose sur des bases mathématiques aussi solides que possible, celle de la théorie des
ensembles ont nous allons rappeler les principales caractéristiques.

Un ensemble A est une collection d’objets distincts les uns des autres. Un de ces objets
a est un élément de A, et on note a  A (a appartient à A).

Un ensemble peut être défini:

 En extension par la liste de ses éléments: A = {a,b,c}. Ceci n’est possible que pour un
ensemble fini.
 En compréhension comme l’ensemble de tous les éléments d’un sur-ensemble E
vérifiant une certaine propriété exprimée par une formule logique. A = {x  E / P(x)}

En informatique, la plupart des données manipulées peuvent être perçues comme des
ensembles, ceux ci étant définis un extension (fichiers de données par exemple) ou en
compréhension (par un algorithme ou une formule: il s’agit alors d’une spécification)

II LES CONCEPTS DE BASE DU MODELE RELATIONNEL


II.1 RELATION, SCHEMA DE RELATION, SCHEMA RELATIONNEL
Une relation R, entre deux ensembles A et B est une partie de leur produit cartésien:
R  AB, R est le graphe de la relation. Si un couple (x,y) de AB appartient à R, on note
souvent xRy. Bien sûr, cette définition s’étend à des relations entre plus de deux ensembles.
 Une relation est transitives si: xRy  yRz  xRz.
 Une relation sur A est réflexive si:  x, xRx.
On peut considérer que la description d’un type record en Pascal, est celle d’un produit
cartésien, les sélecteurs sur un record étant les projections du produit cartésien sue ses
constituants. Un fichier peut alors être vu comme une relation.

Dans le modèle de CODD l’objet de base est une relation au sens mathématique. Un
élément de la relation est appelé un tuple (ce qui est en fait une altération de l’expression
usuelle de n-uplet).

Chacun des ensembles du produit cartésien est appelé domaine, le nombre de


domaines étant le degré de la relation. Un domaine est donc l’ensemble des valeurs possibles
du composant correspondant de la relation (type).

Base de Données 26
Département Technologies de l’Informatique

Pour distinguer de façon parfaitement claire les composantes d’une relation ou de deux
relations distinctes, surtout s’ils ont le même domaine, on associe à chacun des composantes un
nom que l’on appelle attribut.

Exemple:

Soient: D l’ensemble des chaînes d’au plus 40 caractères et E l’ensemble des entiers
compris entre 0 et 140, alors Individu (nom, prénom, âge) est une partie de DDE -donc une
relation-.
Ses attributs sont les applications
 Nom: Individu  D
 Prénom: Individu  D
 Age: Individu  E.
(Ben salah, Ali, 20) est un tuple de la relation. Une telle relation est représentée sur la figure 1

Une relation est souvent représentée comme une table chaque attribut correspond alors à
une colonne de la table. L’ordre dans lequel sont énumérés les attributs est indifférent.

Attribut

Individu Nom Prénom Age


Ben salah Ali 20
Hadda Saber 19 Tuple
Issa Ines 18
Relation
Figure 1

Un schéma de relation est la donnée du nom de la relation suivi de la liste de ses attributs
et de leurs domaines respectifs. Un tel schéma sera écrit sous la forme:

R(A1:D1, A2: D2,…..,An: Dn)


C’est donc une description abstraite d’un ensemble de relations possibles que se modifient au
cours du temps.

Un schéma relationnel est un ensemble de schémas de relations que l’on considère


comme liées entre elles. Une base de données relationnelle est alors un ensemble de
relations satisfaisant un certain schéma relationnel.

II.2 CLES
Une clé (on dit parfait une clé primaire) d’une relation R(A1, A2,…..,An) est un
ensemble minimal d’attributs Ai,…,AJ dont la connaissance permet d’identifier un tuple
unique de la relation. Toute relation possède au moins une clé. Dans la cas où il en existe
plusieurs, on en choisit une de façon plus au moins arbitraires (c’est elle que l’on appelle clé
primaire). Les autres sont qualifiées de clés candidates.
Exemple: Dans la relation individu ci-dessus, aucun attribut ou groupe d’attribut, ne
peut être pris comme clé, ce qui contredit le fait que l’on puisse considérer individu comme une

Base de Données 27
Département Technologies de l’Informatique

relation. Par contre, en ajoutant par exemple l’attribut NCIN (de domaine l’ensemble des suites
de 8 chiffres), la relation Individu (Ncin, nom, prénom, âge) possède une clé.

On appelle parfois clé secondaire un attribut ou un ensemble d’attributs qui permet


d’accéder aux éléments de la relation. Ceci est très différent de la notion de clé primaire. Dans
ce cas, on n’impose pas de condition d’unicité, et une valeur de la clé détermine un ensemble
de tuples appartenant à la relation.
Exemple: la relation annuaire (nom, prénom, num_tele) décrit de façon raisonnable
l’annuaire téléphonique. Un numéro ne pouvant pas être attribué qu’à une seule personne,
l’attribut num_tele constitue une clé primaire sur la relation auquel l’employé de Telecom à un
accès, mais pas l’abonné. Le nom n’est pas bien évidemment une clé primaire.

On appelle aussi clé étrangère: une clé primaire qui figure dans d’autres relations..
Exemple: Dans la relation 1 à N (Père-fils), la clé primaire du père doit être existante
dans le fils, c’est une clé étrangère

Client Avoir Commande

- code_clt - Num_cde
- nom_clt - Date_cde
-adr_clt

Client (code_clt, nom_clt, adr_clt)


Commande (Num_cde, Date_cde, Code_clt)

Clé étrangère
Clé primaire

II.3 REGLES MINIMALES D’INTEGRITE


Les règles ou contraintes d’intégrité sont des assertions qui doivent être vérifiées par
toutes les données figurant dans la base. Il est possible de distinguer les règles structurelles qui
sont inhérentes au modèle de données, c’est à dire nécessaires à sa mise en œuvre, et les règles
de comportement propres au schéma particulier d’une application. Le modèle relationnel
impose a priori une règle minimale qui est l’unicité des clés comme nous allons le voir ci-
dessous. Il est commode et courant d’ajouter trois types de règles supplémentaires: les
contraintes de références, les contraintes d’entité et les contraintes de domaine.

II.3.1 UNICITE DE CLE


Par définition, une relation est un ensemble de tuples. Un ensemble n’ayant pas
d’élément en double, il ne peut exister deux fois le même dans une relation. Afin d’identifier
les tuples d’une relation sans donner toutes les valeurs et d’assurer simplement l’unicité des
tuples, la notion de clé est utilisée.
D’une manière plus formelle, une clé d’une relation R est un ensemble d’attributs K tel
que, quels que soient les tuples t1 et t2 d’une instance de R, t1(K) t2(K), c’est à dire que t1 et
t2 ont des valeurs K différentes.
Base de Données 28
Département Technologies de l’Informatique

II.3.2 CONTRAINTE DE REFERENCE


Une telle contrainte consiste à imposer qu’un groupe d’attributs d’une relation R
constitue une clé pour une autre relation S. un tel groupe d’attributs est parfois qualifié de clé
étrangère.

Exemple: Considérons le schéma relationnel suivant où les attributs ou groupes


d’attributs formant clé ont été soulignés. Les flèches verticales précisent les contraintes
référentielles.

Livre (Code_livre, auteur, date_parution)

Prêt (Code_livre, Num_lecteur, date_remise )

Lecteur (Num_lecteur, nom, prénom, adresse)

Une relation possédant des clés étrangères représentera fréquemment une association entre
deux relations.

Point essentiel: à chaque mise à jour de la relation prêt, on souhaiterait que le SGBD
s’assure de ce que les contraintes référentielles sont bien respectées, que par exemple la valeur
de Code livre figure bien dans la relation livre. Ceci n’est malheureusement que rarement
implémenté.

II.3.3 VALEURS NULLES


Une valeur nulle est une valeur conventionnelle introduite dans une relation pour
représenter une information inconnue ou inapplicable (cette notion est très souvent ambiguë).
Elle sera en général désignée par un identificateur spécifique comme NULL.

II.3.4 CONTRAINTE D’ENTITE

Consiste à imposer que tous attribut participant à une clé primaire soit non nul. A moins
qu’il n’en soit spécifié autrement par une contrainte sémantique, le modèle relationnel
n’impose pas que les clés étrangères qui n’appartiennent pas à une clé primaire soient non
nulles. Cela peut permettre une certaine souplesse, par exemple d’enregistrer des employés qui
ne sont attachés à aucun service.

II.3.5 CONTRAINTE DE DOMAINE


En théorie, une relation est construite à partir d’un ensemble de domaines. En pratique,
les domaines gérés par les systèmes sont souvent limités aux type de base entier, réel, chaîne de
caractères, parfois monnaie et date. Afin de spécialiser un type de données pour composer un
domaine plus fin par exemple, le domaine des salaires mensuels qui sont des réels compris
entre 200 et 1200 dinars.
L’assertion logique est soit l’appartenance à une plage de valeurs ou à une liste de valeurs. Par
exemple salaire 200 et salaire  1200, Couleur  {bleu, blanc, rouge}, etc. les contraintes
Base de Données 29
Département Technologies de l’Informatique

permettent de contrôler la validité des valeurs introduites lors des insertions ou mises à jour. La
non-nullité d’une colonne peut aussi être considérée comme une contrainte de domaine.

III ALGEBRE RELATIONNELLE

III.1 PRINCIPE
Le simple fait qu’un schéma relationnel puisse comporter plusieurs relations laisse
penser que nous serons amenés à manipuler ces relations de diverses façons afin de constituer
une nouvelle relation contenant l’information recherchée.
Le principe est alors d’écrire une fonction ensembliste  qui à partir d’un ensemble
R1,R2,….,Rn de relations de départ calculera la nouvelle relation (R1,R2,….,Rn). Pour ce faire
on essayera de décomposer la fonction  sous forme d’opérations élémentaires, comme dans
un langage fonctionnel.
Les opérations de base peuvent être classées en deux types: les opérations ensemblistes
traditionnelles et les opérations relationnelles. Les opérations ensemblistes sont des opérations
binaires, c’est à dire qu’à partir de deux relations elles en construisent une troisième. Les
opérations relationnelles sont des opérations unaires de projection et de restriction.

III.2 LES OPERATIONS ENSEMBLISTES

III.2.1 UNION
L’union est l’opération classique de la théorie des ensembles adaptée aux relations de
même schéma
Opération portant sur deux relations de même schéma RELATION1 et RELATION2 consistant
à construire une relation de même schéma RELATION3 ayant pour tuples ceux qui appartenant
à RELATION1 ou RELATION2 ou aux deux relations.

Plusieurs notations ont été introduites pour cette opération selon les auteurs:
 RELATION1  RELATION2
 UNION (RELATION1, RELATION2)
 APPEND (RELATION1, RELATION2)

La notation graphique est:

RELATION3

RELATION1 RELATION2

Base de Données 30
Département Technologies de l’Informatique

Exemple: l’union des relations INDIVIDU1 et INDIVIDU2 est:

Individu1 Ncin Nom Prénom Age


03164571 Ben salah Ali 20
03264571 Hadda Saber 19
03364572 Issa Ines 18

Individu2 Ncin Nom Prénom Age
03164571 Ben salah Ali 20
03464571 Abid Fadhila 22
06064571 Issa Amor 25

Individu Ncin Nom Prénom Age


03164571 Ben salah Ali 20
03264571 Hadda Saber 19
03364572 Issa Ines 18
03464571 Abid Fadhila 22
06064571 Issa Amor 25

III.2.2 DIFFERENCE
LA différence est également l’opération classique de la théorie des ensembles adaptée
aux relations de même schéma

Opération portant sur deux relations de même schéma RELATION1 et RELATION2 consistant
à construire une relation de même schéma RELATION3 ayant pour tuples ceux qui appartenant
à RELATION1 et n’appartenant pas RELATION2.

La différence est un opérateur non commutatif: l’ordre des relations opérandes est donc
important. Plusieurs notations ont été introduites pour cette opération selon les auteurs:

 RELATION1  RELATION2
 DIFFERENCE (RELATION1, RELATION2)
 REMOVE (RELATION1, RELATION2)
 MINUS (RELATION1, RELATION2)

Base de Données 31
Département Technologies de l’Informatique

La notation graphique est:

RELATION3

RELATION1 RELATION2

Exemple: La différence des relations INDIVIDU1 - INDIVIDU2 est:

Individu1 Ncin Nom Prénom Age


03164571 Ben salah Ali 20
03264571 Hadda Saber 19
03364572 Issa Ines 18
-
Individu2 Ncin Nom Prénom Age
03164571 Ben salah Ali 20
03464571 Abid Fadhila 22
06064571 Issa Amor 25

Individu Ncin Nom Prénom Age


03264571 Hadda Saber 19
03364572 Issa Ines 18
III.2.3 PRODUIT CARTESIEN
Le produit cartésien est l’opération ensembliste que nous avons rappelée ci-dessus pour
définir le concept de relation. Elle est adaptée aux relations. Cette fois, les deux relations n’ont
pas nécessité d’avoir même schéma.

Opération portant sur deux relations de même schéma RELATION1 et RELATION2 consistant
à construire une relation RELATION3 ayant pour schéma la concaténation de ceux des
relations opérandes et pour tuples toutes les combinaisons des tuples des relations opérandes.

Des notations possibles pour cette opération:

 RELATION1  RELATION2
 PRODUCT (RELATION1, RELATION2)
 TIMES (RELATION1, RELATION2)

Base de Données 32
Département Technologies de l’Informatique

La notation graphique est:

RELATION3

RELATION1 RELATION2

Exemple: le produit cartésien des relations INDIVIDU1 et VILLE est:

Individu1 Ncin Nom Prénom Age


03164571 Ben salah Ali 20
03264571 Hadda Saber 19
03364572 Issa Ines 18

Ville Ville
Gafsa
Tunis
Sfax

Individu Ncin Nom Prénom Age Ville


03164571 Ben salah Ali 20 Gafsa
03264571 Hadda Saber 19 Gafsa
03364572 Issa Ines 18 Gafsa
03164571 Ben salah Ali 20 Tunis
03264571 Hadda Saber 19 Tunis
03364572 Issa Ines 18 Tunis
03164571 Ben salah Ali 20 Sfax
03264571 Hadda Saber 19 Sfax
03364572 Issa Ines 18 Sfax

 Remarque: ces trois opérations sont des opérations de base.

III.2.4 INTERSECTION
L’intersection est l’opération classique de la théorie des ensembles adaptée aux
relations de même schéma.

Base de Données 33
Département Technologies de l’Informatique

Opération portant sur deux relations de même schéma RELATION1 et RELATION2 consistant
à construire une relation de même schéma RELATION3 ayant pour tuples ceux qui appartenant
à la fois à RELATION1 et RELATION2.

Plusieurs notations ont été introduites pour cette opération selon les auteurs:

 RELATION1  RELATION2
 INTERSECT (RELATION1, RELATION2)
 AND (RELATION1, RELATION2)

La notation graphique est:

RELATION3

RELATION1 RELATION2

Exemple: l’union des relations INDIVIDU1 et INDIVIDU2 est:

Individu1 Ncin Nom Prénom Age


03164571 Ben salah Ali 20
03264571 Hadda Saber 19
03364572 Issa Ines 18

Individu2 Ncin Nom Prénom Age
03164571 Ben salah Ali 20
03464571 Abid Fadhila 22
06064571 Issa Amor 25

Individu Ncin Nom Prénom Age


03164571 Ben salah Ali 20

L’intersection est une opération redondante avec les opérations de base en ce sens qu’il est
possible de l’obtenir à partir de la différence à l’aide d’une des formules suivantes:

 RELATION1  RELATION2 = RELATION1 – (RELATION1 - RELATION2)


 RELATION1  RELATION2 = RELATION2 – (RELATION2 – RELATION1)

Base de Données 34
Département Technologies de l’Informatique

III.3 LES OPERATIONS RELATIONNELLES


III.3.1 PROJECTION
La projection est une opération spécifique aux relations qui permet de supprimer des
attributs d’une relation. Son nom provient du fait qu’elle permet de passer d’une relation n-aire
à une relation p-aire avec p<n, donc d’un espace à n dimensions à un espace à moins de
dimensions.

Opération sur une relation RELATION1 consistant à composer une relation RELATION2, en
enlevant à la relation initiale tous les attributs non mentionnés en opérandes (aussi bien sur au
niveau du schéma que des tuples) et en éliminant en double qui sont conservés une seule fois.

Les notations suivantes sont utilisées pour cette opération, en désignant par Attributi,
Attributj,…, Attributm les attributs de projection:

  Attributi, Attributj,…, Attributm (RELATION1)


 RELATION1 [Attributi, Attributj,…, Attributm]
 PROJECT (RELATION1, Attributi, Attributj,…, Attributm)

La notation graphique est aussi utilisée. Le trapèze horizontal signifie que l’on réduit le nombre
de colonnes de la relation: partant du nombre représenté par la base, on passe au nombre
représenté par l’anti-base.

RESULTAT

A1,A2,,Am

RELATION1

Base de Données 35
Département Technologies de l’Informatique

Exemple: Projection d’une relation INDIVIDU sur les attribut nom et ville:

Individu Ncin Nom Prénom Age Ville


03364572 Issa Ines 18 Gafsa
03264571 Hadda Saber 19 Tunis
03164571 Ben salah Ali 20 Sfax
03364572 Issa Amor 25 Gafsa
 Nom, ville

(Individu) Nom Ville


Issa Gafsa
Hadda Tunis
Ben salah Sfax

III.3.2 SELECTION
La sélection ou restriction est aussi une opération relationnelle unaire qui produit une
nouvelle relation en enlevant des tuples à la relation opérande selon un critère.

Opération sur une relation RELATION1 produisant une relation RELATION2 de même
schéma mais comportant les seuls tuples qui vérifient la condition précisée en argument.

Les notations suivantes sont utilisées pour la restriction:

 condition(RELATION1)
 RELATION1[condition]
 RESTRICT(RELATION1,condition).

Ainsi la notation graphique représentée, désigne que le trapèze vertical signifie que l’on réduit
le nombre de tuples de la relation: partant du nombre représenté par le coté gauche on passe au
nombre par le coté droit.

RESULTAT

Ai 
Valeur

RELATION1

Base de Données 36
Département Technologies de l’Informatique

Exemple: Restriction d’une relation INDIVIDU par la condition Ville = "Gafsa":

Individu Ncin Nom Prénom Age Ville


03364572 Issa Ines 18 Gafsa
03264571 Hadda Saber 19 Tunis
03164571 Ben salah Ali 20 Sfax
03365572 Issa Amor 25 Gafsa

 ville ="Gafsa"

Individu Ncin Nom Prénom Age Ville


03364572 Issa Ines 18 Gafsa
03365572 Issa Amor 25 Gafsa

III.3.3 JOINTURE
La jointure permet de composer deux relations à l’aide d’un critère de jointure. Elle
peut être vue comme une extension du produit cartésien avec une condition permettant de
comparer des attributs. Nous la définirons comme suit:

Opération consistant à rapprocher selon une condition les tuples de deux relations
RELATION1 et RELATION2 afin de former une troisième relation RELATION3 qui
contient l’ensemble de tous les tuples obtenus en concaténant un tuple de RELATION1 et un
tuple de RELATION2 vérifiant la condition de rapprochement.

La jointure de deux relations produit donc une troisième relation qui contient toutes les
combinaisons de tuples des deux relations initiales qui vérifient la condition spécifiée. La
condition doit bien sûr permettre le rapprochement des deux relations, et donc être du type:
<Attribut1><Opérateur><Attribut2>
où Attribut1 appartient à RELATION1 et Attribut2 à RELATION2, selon le type d’opérateur,
on distingue:

 L’équi-jointure dans le cas où l’opérateur est =, qui est une véritable composition de
relations au sens mathématique du terme;
 L’inéqui-jointure dans les autres cas, c’est à dire avec un des opérateurs <, , , , .

Dans le cas d’équi-jointure, les deux attributs égaux apparaissent chacun dans le résultat: il y a
donc duplication d’une même valeur dans chaque tuple. Afin d’éliminer cette redondance, on
définit la jointure naturelle comme suit:

Opération consistant à rapprocher les tuples de deux relations RELATION1 et RELATION2


afin de former une troisième relation RELATION3 dont les attributs sont l’union des attributs
de RELATION1 et RELATION2, et dont les tuples sont obtenus en composant un tuple de
RELATION1 et un tuple de RELATION2 ayant mêmes valeurs pour les attributs de même
nom.

L’opération de jointure est représentée par l’une des notations suivantes, la condition étant
simplement omise dans le cas de jointure naturelle:
Base de Données 37
Département Technologies de l’Informatique

 RELATION1  RELATION2
Condition

 JOIN(RELATION1,RELATION2,Condition)

La représentation graphique est:

RESULTAT

RELATION1 RELATION2

Exemple: Jointure naturelle des relations CLIENT et FACTURE:

Client Ncin Nom Prénom Ville


03364572 Issa Ines Gafsa
03264571 Hadda Saber Tunis
03164571 Ben salah Ali Sfax
03365572 Issa Amor Gafsa



Facture Code_fact Date_fact Mont_fact Ncin


F001 01/01/2001 1000 03364572
F002 01/02/2001 1200 03364572
F003 01/03/2001 1100 03164571

Client_facture Ncin Nom Prénom Ville Code_fact Date_fact Mont_fact


F001 01/01/2001 1000 03364572 F001 01/01/2001 1000
F002 01/02/2001 1200 03364572 F002 01/02/2001 1200
F003 01/03/2001 1100 03164571 F003 01/03/2001 1100

La jointure n’est pas toujours considérée comme une opération de base. En effet, si l’on étend
la définition de la restriction de manière à considérer des conditions multi attributs du type
<Attribut1><Opérateur><Attribut2>, alors la jointure peut être obtenue par un produit
cartésien suivi d’une restriction du résultat comme suit:
Base de Données 38
Département Technologies de l’Informatique

JOIN(RELATION1,RELATION2,condition)=
RESTRICT((RELATION1 X RELATION2),condition)

III.3.4 DIVISION
La division permet de rechercher dans une relation les sous-tuples qui sont complétés
par tous ceux d’une autre relation. Elle permet ainsi d’élaborer la réponse à des questions de la
forme "quelque soit x, trouver y" de manière simple.

Opération consistant à construire de la relation D(A1,A2,…,Ap, Ap+1,….,An) par la relation


d(Ap+1,…,An) comme la relation Q(A1,A2,…,Ap) dont les tuples sont ceux qui concaténés à
tout tuple de d donnent un tuple de D.

De manière plus formelle, désignons par ai une valeur quelconque de l’attribut Ai. Un tuple est
alors une suite de valeurs <a1,a2,a3,….>. Utilisant ces notations, le quotient de D par d est
défini par:
Q={<a1, a2, ….ap> tel que quelque soit <ap+1,…,an> de d, <a1, a2, …, ap,
ap+1,.., an> appatient à D}.
Les notations possibles pour la division sont:

 Dd
 DIVISION(D,d)

Ainsi la représentation graphique est:

RELATION3

RELATION1 RELATION2

Base de Données 39
Département Technologies de l’Informatique

Exemple: Les fournisseurs: qui fournissent toutes les produits:

Fournir[Nf,Np] Nf Np
F001 P001
F002 P001
F003 P003
F001 P002
F001 P003

Produit[Np] Np
P001
P002
P003

Fournir[Nf,Np]  Produit[Np] Nf
F001

Base de Données 40
Département Technologies de l’Informatique

QCM
Vous répondez en cochant une à plusieurs réponses par question.

1 Une clé primaire est unique. 1 • Vrai 2 • Faux

2 Une relation a obligatoirement une clé primaire. 1 • Vrai 2 • Faux

3 Une clé primaire est stable. 1 • Vrai 2 • Faux

4 Une relation a obligatoirement une clé étrangère. 1 • Vrai 2 • Faux

5 Une relation a obligatoirement des contraintes. 1 • Vrai 2 • Faux

6 La projection est une opération. 1 • Vrai 2 • Faux

5 Le document présenté ci-dessous appartient à:


CLIENT(Num_cli, Nom_cli, Adresse_cli, Date_1èrecommande_cli, #Num_cat)
CATEGORIE CLIENT(Num_cat, Intitulé_cat)

1 • une base de données 2 • une table 3 • un schéma relationnel

6 Dans le document de la question 5, Nom_cli est

1 • un attribut 2 • un champ 3 • une clé étrangère 4 • une clé primaire


5 • une relation 6 • une valeur 7 • un enregistrement

7 Dans le document de la question 5, Num_cli est

1 • un attribut 2 • un champ 3 • une clé étrangère 4 • une clé primaire


5 • une relation 6 • une valeur 7 • un enregistrement

8 Dans le document de la question 5, CATEGORIE CLIENT est


1 • un attribut 2 • un champ 3 • une clé étrangère 4 • une clé primaire
5 • une relation 6 • une valeur 7 • un enregistrement

Base de Données 41
Département Technologies de l’Informatique

CHAPITRE 4

NORMALISATION D’UN SCHEMA


RELATIONNEL

Objectifs
 Décider s’il est nécessaire d’appliquer le processus de
normalisation.
 Maîtriser le processus de normalisation.
 Résoudre un problème en appliquant le processus de
normalisation.

Plan du chapitre
I INTRODUCTION
II DEPENDANCE FONCTIONNELLE SUR UNE RELATION (DF)
III NORMALISATION DES RELATIONS (FORMES NORMALES)
IV DEPENDANCES FONCTIONNELLES ET CONCEPTION DE SCHEMAS

Base de Données 42
Département Technologies de l’Informatique

I INTRODUCTION
Problème: un mauvais schéma relationnel peut entraîner des anomalies lors des
manipulations.

Le processus de normalisation a pour but d’éliminer les liens intra-relation et d’éviter


les anomalies de stockage et de mise à jour.

Soit la relation R(Num_veh, type, couleur, marque, puissance).

Avec cette relation on peut avoir des anomalies de mise à jour à savoir:
 Anomalie d’insertion: si on a un nouveau type, on ne peut pas l’insérer car on n’a pas
un nouveau véhicule, c’est à dire que le Num_veh est indéterminé.
 Anomalie de modification: si j’ai un ensemble des véhicules de même type, alors j’ai
une redondance au niveau des attributs marque et puissance. Autrement dit si je veut
modifier un type je suis obligé de modifier plusieurs fois: risque d’erreur.
 Anomalie de suppression: pour un type bien défini, on a seulement un et un seul
véhicule, si ce véhicule est supprimé alors l’information concernant ce type sera perdue.

 Solutions:

 étude des dépendances entre données


 décomposition et normalisation des relations

II DEPENDANCE FONCTIONNELLE SUR UNE RELATION (DF)


II.1 DEFINITION DF
La notion de dépendance fonctionnelle permet d’établir des liens sémantiques entre les
attributs ou groupe d’attributs.
Etant donnée une relation R, nous disons qu’il y a dépendance fonctionnelle (DF) d’un
attribut ou groupe d’attributs X de R vers un attribut ou groupe d’attributs Y de R si à une
valeur de X est associé une valeur au plus de Y.
Cette dépendance fonctionnelle est notée: X  Y.
Exemple: considérons la relation AVION, dans laquelle nous supposons que l’on a la DF:
AVNOM  CAP.

NUM_AV AVNOM CAP


100 CARAV 100
101 B707 150
102 CARAV 100
103 AIRBUS 250
104 AIRBUS 250
105 B727 150.
… … …

Base de Données 43
Département Technologies de l’Informatique

Cette DF traduit la contrainte suivante existant dans la compagnie aérienne: connaissant


le nom d’un avion on en déduit d’une manière unique sa capacité, c’est à dire deux avions de
même nom ont toujours la même capacité. Cependant deux avions de nom différent peut avoir
la même capacité.
Notons que dans cette relation il y a deux autres DF:
NUM_AV  AVNOM et NUM_AV  CAP

II.2 PROPRIETES DES DEPENDANCES FONCTIONNELLES


AXIOMES D'AMSTRONG

DF1: réflexivité Y inclus-ou-égal X  X  Y


DF2: augmentation X  Y  X,Z  Y,Z
DF3: transitivité X  Y ET Y  Z  X  Z
DF4: pseudo-transitivité X Y ET Y,W  Z  X,W  Z
DF5: union X  Y ET X  Z  X  Y,Z
DF6: décomposition X  Y  Z  X Y ET X Z

II.3 DECOMPOSITION BINAIRE D’UNE RELATION


R(X,Y,Z) ET X  Y  R(X,Y,Z) = R[X,Y] * R[X, Z]
 on peut toujours décomposer une relation suivant une dépendance fonctionnelle
 on ne peut décomposer une relation s'il n'y a pas de dépendance fonctionnelle
 la décomposition suivant une dépendance fonctionnelle ne perd pas d'information

II.4 DEFINITIONS
R(X,Y,Z) schéma de relation,
X, Y, Z ensemble d'attributs avec Z éventuellement vide
A un attribut quelconque

 DEPENDANCE FONCTIONNELLE ELEMENTAIRE (DFE):

Une DF X  Y avec X ne contenant pas Y est une DFE Si et seulement si


il n'existe aucun sous-ensemble de X ayant une DF sur Y (X est la plus petite quantité
d'information donnant Y)

 CLE:

X est une clé de R Si et seulement si X  Y,Z DFE (une relation peut avoir plusieurs clés)

 A est ATTRIBUT CLE s'il appartient à au moins une clé de R


 A est ATTRIBUT NON CLE s'il n'appartient pas à une clé de R
 A est TRANSITIVEMENT DEPENDANT de X s'il existe Y, Y ne contenant pas A tel
que X  Y, Y A, ~(Y X), Y n'est pas inclus dans X
 A est DIRECTEMENT DEPENDANT de X s'il n'est pas transitivement dépendant
Base de Données 44
Département Technologies de l’Informatique

 A est PLEINEMENT DEPENDANT de X si X  A est une DFE


 A est PARTIELLEMENT DEPENDANT de X si X  A n'est pas une DFE
 la FERMETURE TRANSITIVE F+ d'un ensemble F de dépendances fonctionnelles est
l'ensemble des DFE qui peuvent être produites par application des axiomes d'Amstrong
sur l'ensemble F.

III NORMALISATION DES RELATIONS (FORMES NORMALES)

1ière Forme Normale: une relation est en première forme normale ssi tout attribut a une valeur
atomique (vrai par définition du modèle relationnel).

On peut remarquer qu’un général, on écrit spontanément des relations en première


forme normale bien que cette forme ne soit pas intellectuellement satisfaisante.

2ième Forme Normale: une relation est en deuxième forme normale ssi elle est en 1FN et si
tous les attributs non clés sont en DFE avec les clés.
Par exemple: R(Num_veh, type, couleur, marque, puissance)
R n’est pas en 2FN car type  puissance, et non pas Num_veh, type  puissance
type  marque, et non pas Num_veh, type  marque

Il faut décomposer la relation: R1(Num_veh, type, couleur,)


R1(type, marque, puissance)

3ième Forme Normale: une relation est en troisième forme normale ssi elle est en 2FN et tous
les attributs non clés ne doivent pas être en dépendance transitive avec la clé.

Par exemple: assuré (Num_pol, nom, cod_pod, ville) n’est pas en 3ième forme normale à
cause de cod_pos  ville
Il faut décomposer la relation: assuré(Num_pol, nom, cod_pod,)
R_assuré(cod_pod, ville)

BOYCE-CODD Forme Normale: une relation est en BCFN ssi elle est en 3FN et si les seules
DFE sont celles de la forme C  X avec C clé (seules les clés sont en partie gauche de DF).

IV DEPENDANCES FONCTIONNELLES ET CONCEPTION DE


SCHEMAS
Une manière de concevoir un schéma relationnel en troisième forme normale est de
partir du schéma complet (ensemble de tous les attributs) et de décomposer cette "grosse"
relation (appelée également relation universelle) suivant les dépendances fonctionnelles. Cette
approche est appelée approche par décomposition. Le problème est d'ordonner l'ordre des
décompositions de manière à obtenir un schéma en 3ème forme normale. En effet, chaque
relation produite ne conserve qu'un certain nombre de DF (celles définies sur ses attributs
propres) et n'est donc pas forcément en 3ème forme normale. De plus, l'ensemble des DF du
schéma complet n'est pas forcément préservé.

Base de Données 45
Département Technologies de l’Informatique

Exemple sur les formes normales:

Déterminer le modèle relationnel des applications gestion des véhicules

Liste des attributs:


Code Désignation
Nv Numéro véhicule
Coul Couleur
Puis Puissance
Marq Marque
Typ Type
ncin Numéro CIN
Nom Nom
Rue Rue
Ville Ville
Codep Code postal

Les dépendances fonctionnelles

NV

Coul Typ Ncin

Marq Puiss Nom Rue ville


codp


Véhicule(NV, coul, typ,ncin)
Tupe_veh(Typ, marq,puis)
Personne(Ncin, nom, ville,codp)
Postale(Codp, ville)

Autre méthode:
Passage du modèle Entité-Association au modèle Relationnel:
Nous allons voir maintenant comment transformer la structure décrite E-A en un ensemble de
relations:
1. une entité sera naturellement représentée par une relation ayant comme attributs les
attributs de l’entité,
2. associations:

Base de Données 46
Département Technologies de l’Informatique

 1: N: on met la clé primaire du père dans la relation fils et elle sera définie
comme clé étrangère dans la relation fils,
 M: N: cette association sera représentée par une nouvelle relation dont les
attributs seront les clés primaires des entités qu’elle lie ainsi que les attributs
spécifique de la relation si l’association est porteuse de données. Les clés
primaires des entités reliées constitueront une clé primaire de la relation.
 1: 1: cette association est un cas particulier, on peut prendre l’un père et l’autre
fils; et on passe à la règle de l’association 1: N.

1 Livre M

écrire Code_liv
Titre pret
Anne
Date_prêt
N Date_remise
N
Auteur
Lecteur
Code_aut
Nom Code_lec
Prenom Nom
Date_nais Prenom
Date_mort adresse
Natio

On obtient finalement le schéma relationnel suivant:


Livre(Code_liv,Titre,Annee, code_aut)
Auteur(Code_aut, Nom, Prenom, Date_nais, Date_mort, Natio)
Lecteur(Code_lec, Nom, Prenom, adresse)
Prêt(Code_lec, Code_liv,, Date_prêt,Date_remise)

Base de Données 47
Département Technologies de l’Informatique

QCM
1. A quoi servent les dépendances fonctionnelles en bases de données ?

les DF servent pour la conception de schémas normalisés

2. Les DF expriment-elles des contraintes d'intégrité ?

oui
non

3. Le fait de ne pas tenir compte d'une DF peut générer:

des incohérences
des redondances

4. On considère le schéma relationnel R suivant avec l'ensemble DF de dépendances


fonctionnelles: R(A,B,C,D,E) et DF = {A,B -->C,D,E; B -->C; A,C -->B,D,E; C --
>B,D; B -->E} Quelle(s) est (sont) la (les) clé(s) de R ?

A,B
A,C
A,B,C
B,C

5. Pour chaque décomposition proposée choisissez celles qui sont en troisième forme
normale.

R11(A,B,C); R12(B,E); R13(C,D)


R11(A,B,C); R12(B,D,E)
R11(A,B,E); R12(B,C,D)
R11(A,B,C,E); R12(C,D)

Base de Données 48
Département Technologies de l’Informatique

SERIE D’EXERCICES
Exercice 1:

Soit le modèle suivant:

Elaborer la Base de données relationnelle correspondante.

Exercice 2:

Reproduire les Diagrammes E-A élaborés dans le chapitre 2 et élaborer la Base de données
relationnelle correspondante.

Base de Données 49
Département Technologies de l’Informatique

Exercice 3:

On considère une relation R construite sur les attributs Propriétaire, Occupant, Adresse, Noapt,
Nbpièces, Nbpersonnes, un nuplet (p, o, a, n, nb1, nb2) ayant la signification suivante:

la personne o habite avec nb2 personnes l'appartement de numéro n ayant nb1 pièces dont le
propriétaire est p.

Une analyse de cette relation nous fournit un ensemble initial E de dépendances fonctionnelles:

occupant --> adresse

occupant --> noapt

occupant --> nbpersonnes

adresse, noapt --> propriétaire

adresse, noapt --> occupant

adresse, noapt --> nbpièces

1- Donner l'ensemble des dépendances fonctionnelles élémentaires engendrées par E.

2- Quelles sont les clés potentielles de R ?

3- R est elle en 3ème forme normale ?

Exercice 4:

On considère le schéma relationnel R défini sur les attributs suivants:

C: cours P: professeur H: heure S: salle E: étudiant N: note

Un nuplet (c, p, h, s, e, n) a pour signification que le cours c est fait par le professeur p à l'heure
h dans la salle s par l'étudiant e qui a reçu la note n.

L'ensemble E des dépendances fonctionnelles initiales est le suivant:

C --> P

H, S --> C

H, P --> S

C, E --> N

H, E --> S

Base de Données 50
Département Technologies de l’Informatique

1- Donner l'ensemble des dépendances fonctionnelles élémentaires engendrées par E.

2- Quelle est la clé de la relation R ? Montrer qu'elle est unique.

3- Quelle est la forme normale de la relation R ? Si elle n'est pas en 3FN proposer une
décomposition en 3FN.

Base de Données 51
Département Technologies de l’Informatique

CHAPITRE 5

LE LANGAGE SQL:
LANGAGE DE DEFINITION
DE DONNEES

Objectifs
 Maîtriser le langage de définition de données.
 Appliquer le LDD à des exemples.

Plan du chapitre
I INTRODUCTION
II DEFINITION DE SCHEMAS
III LES TABLES
IV LES VUES
V LES INDEX
VI LES PRIVILEGES D’ACCES A LA BASE

Base de Données 52
Département Technologies de l’Informatique

I INTRODUCTION
Le langage SQL (Structured Query Language) peut être considéré comme le langage
d’accès normalisé aux bases de données. Il est aujourd’hui supporté par la plupart des produits
commerciaux que ce soit par les systèmes de gestion de bases de données micro tel que Access
ou par les produits plus professionnels tels que Oracle ou Sybase. Il a fait l’objet de plusieurs
normes ANSI/ISO dont la plus répandue aujourd’hui est la norme SQL2 qui a été définie en
1992.

Le succès du langage SQL est du essentiellement à sa simplicité et au fait qu’il s’appuie


sur le schéma conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la
stratégie d’exécution. Le langage SQL propose un langage de requêtes ensembliste et
assertionnel. Néanmoins, le langage SQL ne possède pas la puissance d’un langage de
programmation: entrées/sorties, instructions conditionnelles, boucles et affectations. Pour
certains traitements il est donc nécessaire de coupler le langage SQL avec un langage de
programmation complet.

Le langage SQL comporte:

 une partie sur la définition des données:


le langage de définition des données (LDD) qui permet de définir des relations, des
vues externes et des contraintes d’intégrité;

 une partie sur les requêtes:


le langage de manipulation des données (LMD) qui permet d’interroger une base de
données sous forme déclarative sans se préoccuper de l’organisation physique des données;

 une partie sur le contrôle des données:


le langage de contrôle des données (LCD) qui permet de contrôler la sécurité et les
accès aux données.

II DEFINITION DE SCHEMAS
Le langage de définition des données est le langage permettant de créer ou de modifier
le schéma d'une relation et donc d'une table.
Il permet de créer, de modifier et de supprimer non seulement les tables, mais aussi les vues,
les index.
III LES TABLES
La table est la structure de base contenant les données des utilisateurs. Quand on crée
une table, on peut spécifier les informations suivantes:
 la définition des colonnes,
 les contraintes d'intégrité,
 les caractéristiques de stockage,
 les données résultant d'une éventuelle requête.

Base de Données 53
Département Technologies de l’Informatique

III.1 CREATION SIMPLE


La commande de création de table la plus simple ne comportera que le nom et le type de
chaque colonne de la table. On peut créer une table par la commande CREATE TABLE en
spécifiant le nom et le type de chaque colonne. A la création, la table sera vide mais un certain
espace lui sera alloué. La syntaxe est la suivante:

CREATE TABLE nom_table


(nom_col1 TYPE1,
nom_col2 TYPE2,
...);

L'option NOT NULL assure que SQL interdit lors d'une insertion ou d'une modification que
cette colonne contienne la valeur NULL, par défaut elle est autorisée.

Les types de données

Les types de données peuvent être:

NUMBER [(longueur,[précision])
Ce type de données permet de stocker des données numériques à la fois entières et
réelles dont la valeur est comprise entre 10^-130 et 10^125/ avec une précision de 38
chiffres.
longueur: précise le nombre maximum de chiffres significatifs stockés (par défaut
38),
précision: donne le nombre maximum de chiffres après la virgule (par défaut 38), sa
valeur peut être comprise entre -84 et 127. Une valeur négative signifie que le nombre
est arrondi à gauche de la virgule.

Integer
Ce type de données permet de stocker des données numériques entières représentées sur
31 bits signés

CHAR(longueur)
Ce type de données permet de stocker des chaînes de caractères de longueur fixe.
Longueur doit être inférieur à 255, sa valeur par défaut est 1.

VARCHAR(longueur)
Ce type de données permet de stocker des chaînes de caractères de longueur variable.
Longueur doit être inférieur à 2000, il n'y a pas de valeur par défaut.

DATE
Ce type de données permet de stocker des données constituées d'une date et d'une heure.

LONG
Ce type de données permet des stocker des chaînes de caractères de longueur variable et
inférieure à 2^31 -1. Les colonnes de ce type sont soumises à certaines restrictions;

 une table ne peut pas contenir plus d'une colonne de ce type;


Base de Données 54
Département Technologies de l’Informatique

 les colonnes de ce type ne peuvent pas apparaître dans des contraintes


d'intégrité;
 les colonnes de ce type ne peuvent pas être indexées;
 les colonnes de ce type ne peuvent pas apparaître dans des clauses: WHERE ,
GROUP BY, ORDER BY ou CONNECT BY ainsi que dans un DISTINCT.

Exemple: La commande suivante crée la table "matable", contenant 4 attributs.

CREATE TABLE matable


(numero INTEGER NOT
NULL,
nom CHAR(30) NOT
NULL,
prenom CHAR(30),
age INTEGER);

Contraintes d'intégrité

A la création d'une table, les contraintes d'intégrité se déclarent de la façon suivante:

CREATE TABLE nom_table (


nom_col_1 type_1,
nom_col_2 type_2,
...
nom_col_n type_n

CONSTRAINT [nom_contrainte_1] contrainte_1,


CONSTRAINT [nom_contrainte_2] contrainte_2,
...
CONSTRAINT [nom_contrainte_m] contrainte_m
);

Base de Données 55
Département Technologies de l’Informatique

Ou bien de la façon suivante:

CREATE TABLE nom_table (

nom_col_1 type_1 CONSTRAINT [nom_contrainte_1_1] contrainte_1_1


CONSTRAINT [nom_contrainte_1_2] contrainte_1_2
...
CONSTRAINT [nom_contrainte_1_m] contrainte_1_m,
nom_col_2 type_2 CONSTRAINT [nom_contrainte_2_1] contrainte_2_1
CONSTRAINT [nom_contrainte_2_2] contrainte_2_2
...
CONSTRAINT [nom_contrainte_2_p] contrainte_2_p,
...
nom_col_n type_n CONSTRAINT [nom_contrainte_n_1] contrainte_n_1
CONSTRAINT [nom_contrainte_n_2] contrainte_n_2
...
CONSTRAINT [nom_contrainte_n_q] contrainte_n_q
);

Les contraintes différentes que l'on peut déclarer sont les suivantes:

NOT NULL
La colonne ne peut pas contenir de valeurs NULL.

UNIQUE
Chaque ligne de la table doit avoir une valeur différente ou NULL pour cette (ou ces)
colonne.

PRIMARY KEY
Chaque ligne de la table doit avoir une valeur différente pour cette (ou ces) colonne. les
valeurs NULL sont rejetées.

FOREIGN KEY
Cette colonne fait référence à une colonne clé d'une autre table.
CHECK
Permet de spécifier les valeurs acceptables pour une colonne.

Exemple: La commande suivante crée la table employé avec des contraintes:

create table EMPLOYE (


NOM Char(20) primary key,
SAL Integer check (SAL > 0),
DPT Char(20) Not null)

Base de Données 56
Département Technologies de l’Informatique

III.2 CREATION AVEC INSERTION DES DONNEES


On peut insérer des données dans une table lors de sa création par la commande
suivante:

CREATE TABLE nom_table


[(nom_col1,
nom_col2,
...)]
AS SELECT...

On peut ainsi, en un seul ordre SQL créer une table et la remplir avec des données
provenant du résultat d'un SELECT.

On n'a pas besoin alors de spécifier de type pour les colonnes: les types des données sont ceux
provenant du SELECT.

Par défaut les noms des colonnes de la nouvelle table sont les noms des colonnes du SELECT.
Si des expressions apparaissent dans le SELECT, les colonnes correspondantes doivent
impérativement être renommées.

Le SELECT peut contenir des fonctions de groupes mais pas d'ORDER BY car les lignes d'une
table ne peuvent pas être classées.

On peut, et même on doit, quand on crée une table définir les contraintes d'intégrité que devront
respecter les données que l'on mettra dans la table (voir un peu plus bas).

III.3 MODIFICATION D’UNE TABLE


On peut modifier dynamiquement la définition d'une table grâce a la commande ALTER
TABLE.

Deux types de modifications sont possibles: ajout d'une colonne et modification d'une colonne
existante. Il n'est pas possible de supprimer une colonne. Par contre une colonne qui n'est plus
utilisée peut être mise à la valeur NULL, auquel cas elle n'occupe plus d'espace disque. Si on
désire vraiment supprimer une colonne, il faut:

 se créer une nouvelle table sans la colonne en question,


 détruire l'ancienne table,
 donner à la nouvelle table le nom de l'ancienne. Ajouter une colonne

La commande suivante permet d'ajouter une ou plusieurs colonnes à une table existante

ALTER TABLE nom_table ADD


(nom_col1 TYPE1,
nom_col2 TYPE2,
...)

Base de Données 57
Département Technologies de l’Informatique

Les types possibles sont les mêmes que ceux décrits avec la commande CREATE TABLE.
Si la table contient déjà des lignes, la nouvelle colonne aura des valeurs NULL pour les lignes
existantes.

Modifier une colonne

Il est possible de modifier la définition d'une colonne, à condition que la nouvelle définition
soit compatible avec le contenu de la colonne et en respectant les contraintes suivantes:

 dans tous les cas il est possible d'augmenter la taille d'une colonne;
 il est possible de diminuer la taille, ou même de changer le type d'une colonne vide;
 on peut spécifier NOT NULL si la colonne ne contient aucune valeur NULL;
 on peut dans tous les cas spécifier NULL pour autoriser les valeurs NULL.

ALTER TABLE nom_table MODIFY


(nom_col1 TYPE1,
nom_col2 TYPE2,
...)

III.4 SUPPRESSION D’UNE TABLE


La commande DROP TABLE permet de supprimer une table, sa syntaxe est la
suivante:
DROP TABLE nom_table;

La table nom_table est alors supprimée. La définition de la table ainsi que son contenu sont
détruits, et l'espace occupé par la table est libéré.

III.5 RENOMME D’UNE TABLE


On a la possibilité de changer le nom d'une table par la commande RENAME, la
syntaxe est la suivante:

RENAME ancien_nom TO nouveau_nom;

IV LES VUES
Les vues permettent d'assurer l'objectif d'indépendance logique. Grâce à elles, chaque
utilisateur pourra avoir sa vision propre des données.

On a vu que le résultat d'un SELECT est lui-même une table. Une telle table, qui n'existe pas
dans la base mais est créée dynamiquement lors de l'exécution du SELECT, peut être vue
Base de Données 58
Département Technologies de l’Informatique

comme une table réelle par les utilisateurs. Pour cela, il suffit de cataloguer le SELECT en tant
que vue.

Les utilisateurs pourront consulter la base, ou modifier la base (avec certaines restrictions) à
travers la vue, c'est-à-dire manipuler la table résultat du SELECT comme si c'était une table
réelle.

Créer une vue

La commande CREATE VIEW permet de créer une vue en spécifiant le SELECT


constituant la définition de la vue:

CREATE VIEW nom_vue [(nom_col1,...)]


AS SELECT...

La spécification des noms de colonnes de la vue est facultative. Par défaut, les noms des
colonnes de la vue sont les mêmes que les noms des colonnes résultat du SELECT (si certaines
colonnes résultat du SELECT sont des expressions, il faut renommer ces colonnes dans le
SELECT, ou spécifier les noms de colonne de la vue).

Une fois créée, une vue s'utilise comme une table. Il n'y a pas de duplication des informations
mais stockage de la définition de la vue.

Exemple: Création d'une vue constituant une restriction de la table emp aux employés du
département 10.

CREATE VIEW emp10 AS


SELECT *
FROM emp
WHERE n_dept = 10;

Il est possible d'effectuer des insertions et des modifications à travers des vues, sous deux
conditions:

 le SELECT définissant la vue ne doit pas comporter de jointure,


 les colonnes résultat du SELECT doivent être des colonnes réelles et non pas des
expressions.

Exemple: Modification des salaires du département 10 à travers la vue emp10.

UPDATE emp10
SET sal = sal *1.1;

Toutes les lignes de la table emp, telles que le contenu de la colonne n_dept est égal à 10 seront
modifiées.

Base de Données 59
Département Technologies de l’Informatique

Supprimer une vue

Une vue peut être détruite par la commande:

DROP VIEW nom_vue;

Renommer une vue

On peut renommer une vue par la commande:

RENAME ancien_nom TO nouveau_nom;

V LES INDEX

V.1 INTRODUCTION
Selon le modèle relationnel les sélections peuvent être faites en utilisant le contenu de
n'importe quelle colonne et les lignes sont stockées dans n'importe quel ordre.

Considérons le SELECT suivant:

SELECT *
FROM emp
WHERE nom = 'Mohamed’

Un moyen de retrouver la ou les lignes pour lesquelles nom est égal à Mohamed est de balayer
toute la table.

Un tel moyen d'accès conduit à des temps de réponse prohibitifs pour des tables dépassant
quelques centaines de lignes.

Une solution offerte par tous les systèmes de gestion de bases de données est la création
d'index, qui permettra de satisfaire aux requêtes les plus fréquentes avec des temps de réponse
acceptables.

Un index sera matérialisé par la création de blocs disque contenant des couples
(valeurs d'index, numéro de bloc) donnant le numéro de bloc disque dans lequel se trouvent les
lignes correspondant à chaque valeur d'index.

Base de Données 60
Département Technologies de l’Informatique

V.2 OPERATIONS SUR INDEX

Créer un index

Un index peut être créé par la commande suivante:

CREATE [UNIQUE] INDEX nom_index


ON nom_table (nom_col1, nom_col2,...)

dans laquelle l'option UNIQUE indique que l'on interdit que deux lignes aient la même valeur
dans la colonne indexée.
Un index peut être créé dynamiquement sur une table contenant déjà des lignes. Il sera ensuite
tenu à jour automatiquement lors des modifications de la table.

Un index peut porter sur plusieurs colonnes, la clé d'accès sera alors la concaténation des
différentes colonnes.

On peut créer plusieurs index indépendants sur une même table.

Supprimer un index

Un index peut être supprimé dynamiquement par la commande:

DROP INDEX nom_index;

L'espace libéré reste attaché au segment d'index de la table: il pourra être utilisé pour un autre
index sur la même table.
L'espace ne sera rendu à la partition que lors de la suppression de la table.

VI LES PRIVILEGES D’ACCES A LA BASE


VI.1 ATTRIBUTION DE DROITS
La commande GRANT permet d’attribuer des privilèges. Un privilège est une
autorisation d’exécuter un acte. Les privilèges les plus courants sont la permission
d’insérer (INSERT) des enregistrements dans une relation donnée, la permission de
supprimer (DELETE) des enregistrements dans une relation donnée et enfin la
permission de sélectionner (SELECT) des enregistrements dans une relation donnée.
Un utilisateur ne peut exécuter que les commandes SQL pour lesquelles les droits lui
ont été explicitement attribués ou qu’il possède implicitement car l’objet accédé a été
créé par lui-même.

Base de Données 61
Département Technologies de l’Informatique

Les privilèges sur un objet (TABLE, VIEW) sont distribués soit pour un utilisateur
donné, soit pour tout le monde (PUBLIC).

La syntaxe:

GRANT < privilège > [,...] ON <nom_de_relation> TO


{<nom_d’utilisateur > [,...] | PUBLIC}

VI.2 SUPPRESSION DE DROITS


La commande REVOKE permet de supprimer des privilèges.

La syntaxe:

REVOKE <privilège > [,...] ON <nom_de_relation> FROM


{<nom_d’utilisateur> [,...] | PUBLIC}

Base de Données 62
Département Technologies de l’Informatique

SERIE D’EXERCICES
Exercice 1:

SOIENT LES RELATIONS SUIVANTES:

MUSICIENS (NMUSICIEN, NOMM, PRENOMM, DATENAISSM, VILLENAISSM,


VILLEM)

CHANSONS (NCH, NOMC, DURÉECH, TYPECH, NMUSICIEN#)

ALBUMS (NALB, NOMALB, PRIXALB)

CHAL (NCH#, NALB#)

Questions

1) Ecrire les commandes de création des relations.


2) Ecrire les commandes qui permettent de créer un index pour

- la relation MUSICIENS sur les rubriques NomM et Prénom M.


- la relation CHANSONS sur la rubrique NomC

3) Ecrire la commande qui permet de renommer la Table MUSICIENS par ARTISTES.


4) Ecrire la commande qui permet de supprimer la Table ARTISTES.

Base de Données 63
Département Technologies de l’Informatique

CHAPITRE 6

LE LANGAGE SQL:
LANGAGE DE MANIPULATION DE
DONNEES

Objectifs
 Maîtriser le langage de manipulation de données.
 Appliquer le LMD à des exemples.

Plan du chapitre
I INTRODUCTION
II INTERROGER SIMPLEMENT UNE BASE
III LES JOINTURES
IV LES SOUS INTERROGATIONS
V LES OPERATEURS ENSEMBLISTES
VI LES FONCTIONS DE GROUPE
VII LA MISE A JOUR D’UNE BASE

Base de Données 64
Département Technologies de l’Informatique

I INTRODUCTION
Ce chapitre expose la partie du langage SQL permettant de retrouver des informations
stockées dans une base de données. Il s'agit, d'un langage déclaratif dont la syntaxe est très
simple (comme beaucoup de langages de ce type) ce qui permet de se concentrer sur le
problème à résoudre.

Les exemples de ce chapitre sont bâtis sur une base de données composée des deux relations
suivantes:

emp (num, nom, fonction, n_sup#, embauche, salaire, comm, n_dept #)

NUM NOM FONCTION N_SUP EMBAUCHE SALAIRE COMM N_DEPT


16712 Mohamed Directeur 25717 23-05-90 1200 30
17574 Dalila Administrative 16712 03-05-95 900 30
26691 Dafer commercial 27047 04-04-88 250 200 20
25012 Lahmar administratif 27047 14-04-91 260 20
14582 Issa Président 25717 01-01-65 1400 30

dept(n_dept, nom,lieu)

N_DEPT NOM LIEU


10 Recherche Meltaoui
20 Vente Sfax
30 Direction Gafsa
40 Fabrication Moulares

La commande SELECT constitue, à elle seule, le langage permettant d'interroger une base de
données. Elle permet:

 de sélectionner certaines colonnes d'une table: c'est l'opération de projection;


 de sélectionner certaines lignes d'une table en fonction de leur contenu: c'est l'opération
de restriction;
 de combiner des informations venant de plusieurs tables: ce sont les opérations de
jointure, union, intersection, différence relationnelle;
 de combiner entre elles ces différentes opérations.

 Une interrogation ou requête, est une combinaison d'opérations


portant sur des tables (relations) et dont le résultat est lui-même
une table dont l'existence est éphémère (le temps de la requête).

On peut introduire un commentaire à l'intérieur d'une commande SQL en l'encadrant par /* */.

Base de Données 65
Département Technologies de l’Informatique

II INTERROGER SIMPLEMENT UNE BASE


Sélection de colonnes ou projection

La commande SELECT la plus simple a la syntaxe suivante:

SELECT *
FROM nom_table;

Dans laquelle:
nom_table est le nom de la table sur laquelle porte la sélection.
* signifie que toutes les colonnes de la table sont sélectionnées.

Par défaut toutes les lignes sont sélectionnées. On peut limiter la sélection à certaines colonnes,
en indiquant une liste de noms de colonnes à la place de l'astérisque.

SELECT nom_col1, com_col2,...


FROM nom_table;

Exemple: Donner le nom et la fonction de chaque employé.

SELECT nom, fonction


FROM emp;

La clause DISTINCT ajoutée derrière la commande SELECT permet d'éliminer les


duplications.
Exemple: Quelles sont toutes les fonctions différentes.

SELECT DISTINCT fonction


FROM emp;

Sélection de lignes ou restriction

La clause WHERE permet de spécifier quelles sont les lignes à sélectionner. Elle est
suivie d'un prédicat qui sera évalué pour chaque ligne de la table. Les lignes pour lesquelles le
prédicat est vrai seront sélectionnées.

La syntaxe est la suivante:

SELECT *
FROM nom_table
WHERE predicat;

Base de Données 66
Département Technologies de l’Informatique

Un prédicat est constitué à partir d'expressions que l'on compare entre elles.

Un prédicat simple est le résultat de la comparaison de deux expressions au moyen d'un


opérateur de comparaison qui peut être:
 = égale
 != différent
 < inférieur
 <= inférieur ou égal
 > supérieur
 >= supérieur ou égal

Les expressions peuvent être comparées au moyen de ces opérateurs:

 Pour les types date, la relation d'ordre est l'ordre chronologique.

 Pour les types caractère, la relation d'ordre est l'ordre alphabétique.

Il faut ajouter à ces opérateurs arithmétiques classiques les opérateurs suivants:

 expr1 BETWEEN expr2 AND expr3: vrai si expr1 est compris entre
expr2 et expr3, bornes incluses.
 expr1 IN (expr2, expr3,...): vrai si expr1 est égale à l'une des
expressions de la liste entre parenthèses.
 expr LIKE chaine: où chaine est une chaîne de caractères pouvant
contenir l'un des caractères jokers:
_ remplace exactement 1 caractère
% remplace une chaîne de caractères de longueur quelconque, y
compris de longueur nulle.

Exemple: Quels sont les employés dont la commission est supérieure au salaire?

SELECT nom, salaire, comm


FROM emp
WHERE comm > salaire;

Exemple: Quels sont les employés gagnant entre 250 et 500 ?

SELECT nom, salaire


FROM emp
WHERE salaire BETWEEN 250 AND 500;

Exemple: Quels sont les employés commerciaux ou ingénieurs?

SELECT num, nom, fonction, salaire


FROM emp
WHERE fonction IN ('commercial','ingenieur');

Base de Données 67
Département Technologies de l’Informatique

Exemple: Quels sont les employés dont le nom commence par M?

SELECT nom
FROM emp
WHERE nom LIKE 'M%';

Les opérateurs logiques AND (et) et OR (ou inclusif) peuvent être utilisés pour combiner entre
eux plusieurs prédicats. L'opérateur NOT placé devant un prédicat en inverse le sens.

L'opérateur AND est prioritaire par rapport à l'opérateur OR. Des parenthèses peuvent être
utilisées pour imposer une priorité dans l'évaluation du prédicat, ou simplement pour rendre
plus claire l'expression logique.

Exemple: Quels sont les employés du département 30 ayant un salaire supérieur à 250?

SELECT nom
FROM emp
WHERE n_dept = 30
AND salaire > 250;

Exemple: Quels sont les employés directeurs, ou commerciaux et travaillant dans le


département 10?
SELECT nom, fonction, salaire, n_dept
FROM emp
WHERE fonction = 'directeur'
OR (fonction = 'commercial' AND n_dept = 10);

La requête précédente donnerait le même résultat sans les parenthèses, résultat différent de
celui du SELECT suivant.

Exemple: Quels sont les employés directeurs ou commerciaux, et travaillant dans le


département 10?

SELECT num, nom, fonction, n_dept


FROM emp
WHERE (fonction='directeur' OR fonction = 'commercial')
AND n_dept = 10;

Valeurs NULL

Pour SQL, une valeur NULL est une valeur non définie. Il est possible d'ajouter une ligne à une
table sans spécifier de valeur pour les colonnes non obligatoires: ces colonnes absentes auront
la valeur NULL.

Base de Données 68
Département Technologies de l’Informatique

Par exemple les employés dont la rémunération ne prend pas en compte de commission auront
une valeur NULL, c'est-à-dire indéfinie, comme commission.

L'opérateur IS NULL permet de tester la valeur NULL: le prédicat expr IS NULL est vrai si
l'expression a la valeur NULL (c'est-à-dire si elle est indéfinie).

Exemple: Quels sont les employés dont la commission a la valeur NULL?

SELECT nom
FROM emp
WHERE comm IS NULL;

Remarques

 La valeur NULL est différente de la valeur zéro qui, elle, qui est une valeur bien
définie.
 Le prédicat expr = NULL est toujours faux, et ne permet donc pas de tester si
l'expression a la valeur NULL.
 Une expression de la forme NULL + val donne NULL comme résultat quelle que puisse
être la valeur de val.

Nom de colonne

Les colonnes constituant le résultat d'un SELECT peuvent être renommées dans le
SELECT, ceci est utile en particulier lorsque la colonne résultat est une expression. Pour cela,
il suffit de faire suivre l'expression définissant la colonne d'un nom, selon les règles suivantes:

 le nom (30 charactères maximum) est inséré derrière l'expression définissant la colonne,
séparé de cette dernière par un espace.
 si le nom contient des séparateurs (espace, caractère spécial), ou s'il est identique à un
mot clé de SQL (ex: DATE), il doit être mis entre guillemets "".

Ce nom est celui sous lequel la colonne sera connue des interfaces externes. Sous SQLPLUS,
par exemple, il constituera le titre par défaut de la colonne, et servira de référence pour définir
un format pour la colonne.

Exemple: Salaire de chaque employé.

SELECT nom, salaire "SALAIRE MENSUEL"


FROM emp;

Classer le résultat d'une interrogation

Les lignes constituant le résultat d'un SELECT sont obtenues dans un ordre
indéterminé. On peut, dans un SELECT, demander que le résultat soit classé dans un ordre
ascendant ou descendant, en fonction du contenu d'une ou plusieurs colonnes (jusqu'à 16

Base de Données 69
Département Technologies de l’Informatique

critères de classement possibles). Les critères de classement sont spécifiés dans une clause
ORDER BY dont la syntaxe est la suivante:

ORDER BY {nom_col1 | num_col1 [DESC] [, nom_col2 | num_col2


[DESC],...]}

Le classement se fait d'abord selon la première colonne spécifiée dans l'ORDER BY puis les
lignes ayant la même valeur dans la première colonne sont classées selon la deuxième colonne
de l'ORDER BY, etc... Pour chaque colonne, le classement peut être ascendant (par défaut) ou
descendant (DESC).

L'ORDER BY peut faire référence à une colonne par son nom ou par sa position dans la liste
des colonnes présentes derrière le SELECT (la première colonne sélectionnée a le numéro 1, la
deuxième a le numéro 2,...).

Exemple: Donner tous les employés classés par fonction, et pour chaque fonction classés par
salaire décroissant

SELECT nom, fonction, salaire


FROM emp
ORDER BY fonction, salaire DESC;

Remarque: Dans un classement les valeurs NULL sont toujours en tête quel que soit l'ordre du
classement (ascendant ou descendant).

Exercice
Liste des employés ayant une commission (non nulle), classée par commission décroissante.

1. Nom des personnes embauchées depuis janvier 1991.


2. Liste des employés dont la commission est inférieure à 10% du salaire.
3. Donner les noms des ingénieurs embauchés avant le 1 janvier 1990.
4. Quelles sont les fonctions ne donnant pas lieu à commission.
5. Donner les noms et fonctions de chacun. Classer le résultat par fonction puis par nom.

III LES JOINTURES


La jointure est une opération permettant de combiner des informations venant de
plusieurs tables. Les exemples suivants se limiteront à deux tables, mais on peut joindre jusqu'à
256 tables. Une jointure se formule simplement en spécifiant plusieurs tables derrière le FROM
de la façon suivante:

Base de Données 70
Département Technologies de l’Informatique

SELECT...
FROM nom_table1, nom_table2...
WHERE predicat;

Si on ne précise pas de condition de sélection, le résultat obtenu sera le produit cartésien des
tables présentes derrière le FROM.

Il n'existe pas d'associations implicites ou explicites entre les tables dans SQL. Les associations
entre les tables sont définies dynamiquement lors des interrogations, ce qui contribue à la
grande souplesse du langage SQL et rend possible toute association même si elle n'a pas été
prévue lors de la définition et du chargement de la base.

Equi-jointure

Le rapprochement de chaque ligne de la table EMP avec la ligne de la table DEPT ayant
même numéro de département permet d'obtenir la liste des employés avec la localité dans
laquelle ils travaillent. Ce rapprochement entre deux colonnes appartenant à deux tables
différentes mais ayant le même sens (ici le numéro de département) et venant
vraisemblablement d'une relation 1-n lors de la conception (ici 1 entité département pour n
entités employés) est assez naturel. C'est pourquoi ce type de jointure porte le nom de jointure
naturelle ou d'équi-jointure.

Exemple: Donner pour chaque employé son nom et son lieu de travail.

SELECT emp.nom, lieu


FROM emp, dept
WHERE emp.n_dept = dept.n_dept ;
Equi-jointure

Le fait que la colonne contenant le numéro de département ait le même nom dans les deux
tables a rendu nécessaire le préfixage par le nom de table dans le critère de jointure (clause
WHERE ). Le nom de colonne NOM a lui aussi besoin d'être préfixé car il appartient aux deux
tables (nom de la personne dans l'une et nom du département dans l'autre). Par contre le nom de
colonne LIEU n'a pas besoin d'être préfixé car il n'y a pas d'ambiguïté sur la table à laquelle
cette colonne appartient.

Jointure d'une table à elle-même

Il peut être utile de rassembler des informations venant d'une ligne d'une table avec des
informations venant d'une autre ligne de la même table.

Exemple: Donner pour chaque employé le nom de son supérieur hiérarchique.

Base de Données 71
Département Technologies de l’Informatique

SELECT emp.nom, mgr.nom


FROM emp, emp mgr
WHERE emp.n_sup= mgr.num;

Remarque: Dans ce cas, il faut impérativement renommer au moins l'une des deux occurrences
de la table en lui donnant un synonyme, afin de pouvoir préfixer sans ambiguïté chaque nom de
colonne.

Autres jointures

Le critère d'égalité est le critère de jointure le plus naturel. Mais on peut utiliser d'autres
types de comparaisons comme critères de jointures.

Exemple: Quels sont les employés gagnant plus que Mohamed?

SELECT emp.nom, emp.salaire, emp.fonction


FROM emp, emp j
WHERE emp.salaire > j.salaire
AND J.nom = 'Mohamed';

Jointure externe

Lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondant dans les
autres tables, elle ne satisfait pas au critère d'équi-jointure et donc ne figure pas dans le résultat
de la jointure.

Une option permet de faire figurer dans le résultat les lignes satisfaisant la condition d'équi-
jointure plus celles n'ayant pas de correspondant. Cette option s'obtient en accolant (+) au nom
de colonne de la table dans laquelle manquent des éléments, dans la condition d'équi-jointure.

Exemple: Le département 40 ne figurait pas dans le résultat du Select Précédent. Par contre, il
figurera dans le résultat du SELECT suivant.

SELECT emp.nom, lieu


FROM emp, dept
WHERE emp.n_dept(+) = dept.n_dept;

Le (+) peut s'interpréter comme l'ajout d'une ligne fictive dont toutes les colonnes ont la valeur
NULL, et qui réalise la correspondance avec les lignes de l'autre table qui n'ont pas de
correspondant réel. Dans l'exemple ci-dessus, la valeur de NOM associée au département 40 est
la valeur NULL.

Base de Données 72
Département Technologies de l’Informatique

Exemple: Retrouver les départements n'ayant aucun employé.

SELECT dept.n_dept, emp.nom


FROM emp,dept
WHERE dept.n_dept = emp.n_dept (+)
AND emp.nom IS NULL;

IV LES SOUS INTERROGATIONS


Une caractéristique puissante de SQL est la possibilité qu'un critère de recherche
employé dans une clause WHERE (expression à droite d'un opérateur de comparaison) soit lui-
même le résultat d'un SELECT; c'est ce qu'on appelle une sous-interrogation.

Sous-interrogation ramenant une seule valeur

Exemple: Quels sont les employés ayant la même fonction que Mohamed?

SELECT nom
FROM emp
WHERE fonction = (SELECT fonction
FROM emp
WHERE nom ='Mohamed');
Remarques

 une sous-interrogation qui ne ramène aucune ligne se termine avec un code d'erreur.
 une sous-interrogation ramenant plusieurs lignes provoquera aussi, dans ce cas, une
erreur (pour traiter correctement ce cas, voir paragraphe ci-dessous)

Sous-interrogation ramenant plusieurs lignes

Une sous-interrogation peut ramener plusieurs lignes à condition que l'opérateur de


comparaison admette à sa droite un ensemble de valeurs. Les opérateurs permettant de
comparer une valeur à un ensemble de valeurs sont:

 l'opérateur IN
 les opérateurs obtenus en ajoutant ANY ou ALL à la suite d'un opérateur de
comparaison classique (=, !=, >, >=, <, <=)

 ANY: la comparaison est vraie si elle est vraie pour au moins un des éléments
de l'ensemble.
 ALL: la comparaison sera vraie si elle est vraie pour tous les éléments de
l'ensemble.

Base de Données 73
Département Technologies de l’Informatique

Exemple: Quels sont les employés gagnant plus que tous les employés du département 30.

SELECT nom, salaire


FROM emp
WHERE salaire > ALL (SELECT salaire
FROM emp
WHERE n_dept = 20);

Sous-interrogation ramenant plusieurs colonnes

Il est possible de comparer le résultat d'un SELECT ramenant plusieurs colonnes à une
liste de colonnes. La liste de colonnes figurera entre parenthèses à gauche de l'opérateur de
comparaison.

Exemple: Quels sont les employés ayant même fonction et même supérieur que Mohamed?

SELECT nom, fonction, n_sup


FROM emp
WHERE (fonction, n_sup) = (SELECT fonction, n_sup
FROM emp
WHERE nom = 'Mohamed');

Sous-interrogation synchronisée avec l'interrogation principale

Dans les exemples précédents, la sous-interrogation était évaluée d'abord, puis le


résultat pouvait être utilisé pour exécuter l'interrogation principale. SQL sait également traiter
une sous-interrogation faisant référence à une colonne de la table de l'interrogation principale.
Le traitement dans ce cas est plus complexe car il faut évaluer la sous-interrogation pour
chaque ligne de l'interrogation principale.

Exemple: Quels sont les employés ne travaillant pas dans le même département que leur
supérieur hiérarchique.

SELECT nom
FROM emp e
WHERE n_dept != (SELECT n_dept
FROM emp
WHERE e.n_sup = num)
AND n_sup IS NOT NULL;

Sous-interrogation ramenant au moins une ligne

L’opérateur EXITS permet de construire un prédicat si la sous-interrogation qui suit


ramène au moins une ligne.
Base de Données 74
Département Technologies de l’Informatique

Exemple: quels sont les employés travaillant dans un département qui a procédé à des
embauches depuis le début de l’année 94

SELECT *
FROM emp e
WHERE Exits (SELECT *
FROM emp
WHERE embauche >= ’01-01-94’
AND n_dept = e.n_dept);

Remarque: on peut inverser le sens de l’opérateur EXITS en le faisant précéder de NOT.

V LES OPERATEURS ENSEMBLISTES


Les opérateurs ensemblistes permettent de "joindre" des tables verticalement c'est-à-dire
de combiner dans un résultat unique des lignes provenant de deux interrogations. Les
lignes peuvent venir de tables différentes mais après projection on doit obtenir des tables ayant
même schéma de relation.

Les opérateurs ensemblistes sont les suivants:

 l'union: UNION
 l'intersection: INTERSECT
 la différence relationnelle: MINUS

La syntaxe d'utilisation est la même pour ces trois opérateurs:

SELECT...
{UNION | INTERSECT | MINUS
SELECT...

Pour cette section on supposera que deux tables EMP1 et EMP2 contiennent les informations
sur des filiales de l’entreprise.

Exemple: liste des ingénieurs des deux filiales

SELECT * FROM EMP1 WHERE FONCTION =’INGENIEUR’


UNION
SELECT * FROM EMP2 WHERE FONCTION =’INGENIEUR’

Base de Données 75
Département Technologies de l’Informatique

Exemple: liste des départements qui ont des employés dans les deux filiales

SELECT N_DEPT FROM EMP1


INTERSECT
SELECT N_DEPT FROM EMP2

Exemple: liste des départements qui ont des employés dans la première filiale mais pas dans la
deuxième

SELECT N_DEPT FROM EMP1


MINUS
SELECT N_DEPT FROM EMP2

VI LES FONCTIONS DE GROUPE


Dans les exemples précédents, chaque ligne résultat d'un SELECT était le résultat de
calculs sur les valeurs d'une seule ligne de la table consultée. Il existe un autre type de SELECT
qui permet d'effectuer des calculs sur l'ensemble des valeurs d'une colonne. Ces calculs sur
l'ensemble des valeurs d'une colonne se font au moyen de l'une des fonctions suivantes:

AVG([DISTINCT | ALL] expression)


Renvoie la moyenne des valeurs d' expression.

COUNT(* | [DISTINCT | ALL] expression)


Renvoie le nombre de lignes du résultat de la requête. Si expression est présent, on ne
compte que les lignes pour lesquelles cette expression n'est pas NULL.

MAX([DISTINCT | ALL] expression)


Renvoie la plus petite des valeurs d'expression.

MIN([DISTINCT | ALL] expression)


Renvoie la plus grande des valeurs d'expression.

STDDEV([DISTINCT | ALL] expression)


Renvoie l'écart-type des valeurs d'expression.

SUM([DISTINCT | ALL] expression)


Renvoie la somme des valeurs

VARIANCE([DISTINCT | ALL] expression)


Renvoie la variance des valeurs d'expression.

DISTINCT
Indique à la fonction de groupe de ne prendre en compte que des valeurs distinctes.

ALL
Indique à la fonction de groupe de prendre en compte toutes les valeurs, c'est la valeur
par défaut.
Base de Données 76
Département Technologies de l’Informatique

Exemple: Donner le total des salaires du département 10.

SELECT SUM(salaire)
FROM emp
WHERE n_dept = 10;

Exemple: Donner le nom, la fonction et le salaire de l'employé (ou des employés) ayant le
salaire le plus élevé.

SELECT nom, fonction, salaire


FROM emp
WHERE salaire = (SELECT MAX(salaire)
FROM emp);
Remarques

 Ces SELECT sont différents de ceux vus précédemment. Il est, par exemple, impossible
de demander en résultat à la fois une colonne et une fonction de groupe.
 un SELECT comportant une fonction de groupe peut être utilisé dans une sous-
interrogation.
 Valeurs NULL: Aucune des fonctions de groupe ne tient compte des valeurs NULL à
l'exception de count(*). Ainsi, SUM(col) est la somme des valeurs non NULL de la
colonne col. De même AVG est la somme des valeurs non NULL divisée par le nombre
de valeurs non NULL.

Calcul sur plusieurs groupes

Il est possible de subdiviser la table en groupes, chaque groupe étant l'ensemble des
lignes ayant une valeur commune. C'est la clause GROUP BY qui permet de découper la table en
plusieurs groupes:

GROUP BY expr_1, expr_2,...

Si on a une seule expression, ceci définit les groupes comme les ensembles de lignes
pour lesquelles cette expression prend la même valeur. Si plusieurs expressions sont présentes
les groupes sont définis de la façon suivante: parmi toutes les lignes pour lesquelles expr_1
prend la même valeur, on regroupe celles ayant expr_2 identique,... Un SELECT de groupe
avec une clause GROUP BY donnera une ligne résultat pour chaque groupe.

Base de Données 77
Département Technologies de l’Informatique

Exemple: Total des salaires pour chaque département

SELECT SUM(salaire), n_dept


FROM emp
GROUP BY n_dept;

Sélection des groupes

De la même façon qu'il est possible de sélectionner certaines lignes au moyen de la


clause WHERE , il est possible dans un SELECT comportant une fonction de groupe de
sélectionner par la clause HAVING, qui se place après la clause GROUP BY.

Le prédicat dans la clause HAVING suit les mêmes règles de syntaxe qu'un prédicat figurant
dans une clause WHERE .

Cependant, il ne peut porter que sur des caractéristiques du groupe: fonction de groupe ou
expression figurant dans la clause GROUP BY, dans ce cas la clause HAVING doit être placée
après la clause GROUP BY.

Exemple: Donner la liste des salaires moyens par fonction pour les groupes ayant plus de deux
employés.

SELECT fonction,COUNT(*),AVG(salaire)
FROM emp
GROUP BY fonction
HAVING COUNT(*) > 2;

Remarque: Un SELECT de groupe peut contenir à la fois une clause WHERE et une clause
HAVING. La clause WHERE sera d'abord appliquée pour sélectionner les lignes, puis les
groupes seront constitués à partir des lignes sélectionnées, et les fonctions de groupe seront
évaluées.

Exemple: Donner le nombre d'ingénieurs ou de commerciaux des départements ayant au moins


deux employés de ces catégories.

SELECT n_dept, COUNT(*)


FROM emp
WHERE fonction in ('ingenieur','commercial')
GROUP BY n_dept
HAVING COUNT(*) >= 2;

Une clause HAVING peut comporter une sous-interrogation.

Base de Données 78
Département Technologies de l’Informatique

Exemple: Quel est le département ayant le plus d'employés?

SELECT n_dept,COUNT(*)
FR1OM emp
GROUP BY n_dept
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM emp
GROUP BY n_dept);

Fonction de groupe à deux niveaux

Il est possible d'appliquer au résultat d'un SELECT avec GROUP BY un deuxième


niveau de fonction de groupe.

Exemple: la fonction MAX peut être appliquée aux nombres d'employés de chaque
département pour obtenir le nombre d'employés du département ayant le plus d'employés.

SELECT MAX(COUNT(*))
FROM emp
GROUP BY n_dept;

VII MISE A JOUR D’UNE BASE


Le langage de manipulation de données est le langage permettant de modifier les
informations contenues dans une base de données.

L'unité manipulée est la ligne. Il existe trois commandes SQL permettant d'effectuer les trois
types de modifications des données: ajout, modification et suppression.

Insertion de lignes

La commande INSERT permet d'insérer une ligne dans une table en spécifiant les
valeurs à insérer. La syntaxe est la suivante:

INSERT INTO nom_table(nom_col1, nom_col2,...)


VALUES (val1, val2...)

La liste des noms de colonne est optionnelle. Si elle est omise, la liste des colonnes sera par
défaut la liste de l'ensemble des colonnes de la table dans l'ordre de la création de la table.

Si une liste de colonnes est spécifiée, les colonnes ne figurant pas dans la liste auront la valeur
NULL.

Base de Données 79
Département Technologies de l’Informatique

Il est possible d'insérer dans une table des lignes provenant d'une autre table. La syntaxe
est la suivante:

INSERT INTO nom_table(nom_col1, nom_col2,...)


SELECT...

Le Select Peut contenir n'importe quelle clause sauf un ORDER BY qui impliquerait un
classement des lignes contraire à l'esprit du relationnel.

Exemple: Insérer dans la table bonus les noms et salaires des directeurs.

INSERT INTO bonus


SELECT nom, salaire
FROM emp
WHERE fonction = 'directeur';

Modification de lignes

La commande UPDATE permet de modifier les valeurs d'une ou plusieurs colonnes,


dans une ou plusieurs lignes existantes d'une table. La syntaxe est la suivante:

UPDATE nom_table
SET nom_col1 = {expression1 | (SELECT...) },
nom_col2 = {expression2 | (SELECT...) }
...
nom_colp = {expressionp | (SELECT...) }
WHERE predicat

Les valeurs des colonnes <nom_col1, nom_col2,..., nom_colp sont modifiées dans toutes les
lignes satisfaisant au prédicat. En l'absence d'une clause WHERE , toutes les lignes sont mises
à jour.
Les expressions expression1, expression2,... peuvent faire référence aux anciennes valeurs de la
ligne.

Exemple: Augmenter de 10% les ingénieurs.

UPDATE emp
SET salaire = salaire * 1.1
WHERE fonction = 'ingenieur';

Base de Données 80
Département Technologies de l’Informatique

Suppression de lignes

La commande DELETE permet de supprimer des lignes d'une table.

La syntaxe est la suivante:

DELETE FROM
nom_table
WHERE predicat;

Toutes les lignes pour lesquelles prédicat est évalué à vrai sont supprimées. En l'absence de
clause WHERE , toutes les lignes de la table sont supprimées.

Base de Données 81
Département Technologies de l’Informatique

SERIE D’EXERCICES
Exercice 1:

COMMANDE (NC, DATE_C, NBRE_P, COD_CLT #)


PRODUIT (CODP, LIB_P, QTE_STK, PU)
CP (NC #, CODP #, QTE_CDE)
CLIENT (COD_CLT, NOM, ADR, CREDIT, CREDIT_MAX)

Exprimez les requêtes ci-dessous en SQL:

1. Quels sont les clients de tunis ?


2. Quels sont les clients dont le nom commence par Mo ?
3. Donnez la liste de tous les produits.
4. Donnez la liste des toutes les villes dont proviennent nos clients.
5. Quels sont les clients qui ont commandés une commande après le 31-12-2005 ?
6. Quels sont les clients qui n’ont pas commandés une commande après le 31-12-2005 ?
7. Quelles sont les paires des clients qui viennent de la même ville ?
8. Quels sont les produits ayant le prix maximum ?
9. Quels sont les produits existant en quantité < à celle » du ou des produits ayant le coût le
plus élevé ?
10. Donner le prix maximum des produits.
11. Quelle est la quantité commandée du produit P001 ?
12. Augmenter le prix des produits de 20% pour les produits qui en une quantité en stock <
100.
13. Supprimer les clients de gafsa.

Exercice 2:

IMMEUBLE (NUMERO_IM, ADRESSE, NB_ETAGES, DATE_CONSTRUCTION,


NOM_GERANT)
APPARTEMENT (NUMERO_AP, ADRESSE, NUMERO_IM, TYPE, SUPERFICIE,
ETAGE)
PERSONNE (NUMERO_PE, NOM, AGE, PROFESSION)
OCCUPANT (NUMERO_OC, ADRESSE, NUMERO_AP, NOM_OCCUPANT,
DATE_ARRIVEE, DATE_DEPART)
PROPRIÉ TÉ (NUMERO_PRO, ADRESSE, NOM_PROPRIETAIRE, QUOTE_PART)

1.1 Identifier les clés de chaque relation.


1.2 Résoudre en SQL les requêtes suivantes:
a) Afficher la liste des immeubles ayant été construits en 1965
b) Afficher la liste des personnes dont la profession est ENSEIGNANT ayant habite
l'immeuble gère par M. Hedi Tounsi
c) Afficher par occupant, le nombre d'appartements habites
d) Afficher toutes les informations concernant le propriétaire qui possède le plus grand nombre
d'immeubles

Base de Données 82
Département Technologies de l’Informatique

Exercice 3:

Soient les relations suivantes:


MUSICIENS (NMUSICIEN, NOMM, PRENOMM, DATENAISSM, VILLENAISSM,
VILLEM)
CHANSONS (NCH, NOMC, DURÉECH, TYPECH, NMUSICIEN#)
ALBUMS (NALB, NOMALB, PRIXALB)
CHAL (NCH#, NALB#)

Exprimez les requêtes ci-dessous en SQL:


1. Afficher la liste des musiciens qui habitent la ville de leur naissance.
2. Combien de chansons trouve-t-on dans l’album N°53 et quelle est la durée de cet album.
3. Afficher par musicien, le nombre d’albums où figure au moins une de ses chansons.
4. Afficher la liste des chansons qui se trouvent dans tous les albums ayant un coût supérieur à
20D.
5. Afficher toutes les informations concernant les musiciens nés en 1967 et ayant dans leur actif
plus que 20 chansons.

Exercice 4:

Soient les quatre relations suivantes:


LIVRE (NUMLIV, TITRE, NOMAUTEUR, NEME#)
EDITEUR (NUME, NOME, ADRE, TELE, VILLEE)
LECTEUR (NUMCARTEL, NUML, NOML, ADRL, VILLEL)
PRET (NUMCARTEL#, NUMLIV#, DATE)

Exprimez les requêtes ci-dessous en langage algébrique puis en SQL:

1. Donner l'adresse de l'éditeur du livre dont l'auteur est "Mohamed Amine".


2. Quels sont les auteurs qui sont éditeurs de leur propre livre.
3. Donner les noms des lecteurs qui ont empruntés le 3 juillet 1999, un livre qui a été édité par
un éditeur habitant dans la même ville que celle où habite le lecteur.
4. Donner les paires (éditeur-lecteur) des mêmes villes.
5. Donner pour chacun des lecteurs, son nom et la liste des titres d'ouvrages empruntés. Pour
chacun des ouvrages empruntés, on fera figurer le nom de l'éditeur.

Exercice 5:

Soit la base de données, décrite par les relations suivantes:

FOURNISSEURS (NF, NOMF, VILLEF)


CLIENTS (NC, NOMC, VILLEC)
PIECES (NP, NOMP, COULEUR, POIDS, VILLE)
PROJETS (NPR, NOMPR, VILLE)
LIVRAISONS (NF#, NP#, NPR#, DATEL, QTEL)
ACHATS (NC#, NP #, DATEA, QTEA)

Résoudre les requêtes suivantes en SQL:

Base de Données 83
Département Technologies de l’Informatique

1. Donner le numéro du fournisseur, le nom et la couleur de chaque pièce livrée par ce


fournisseur,
2. Quels sont les fournisseurs qui habitent à Tunis, ayant un numéro supérieur à 237,
3. Donner la liste des numéros des fournisseurs n’ayant pas fait de livraison depuis 2003,
4. Donner les noms des pièces dont le poids est supérieur à trois Kilos, de couleur Noire ou
Jaune,
5. Donner les noms des fournisseurs qui livrent une quantité de la pièce numéro P5 égale à 45
unités,
6. Donner les numéros des fournisseurs qui fournissent au moins toutes les pièces fournies par
le fournisseur “F8”,
7. Donner le triplet (NF, NC, NP), sachant que NF livre la pièce NP et NC achetant cette pièce
NP, et que ce fournisseur et ce client habitent tous les deux la même ville,
8. Quels sont les fournisseurs qui livrent au moins une pièce dans la ville là où ils habitent,
9. Donner les numéros des fournisseurs qui fournissent au moins une pièce fournie par le
fournisseur “F4”,
9. Supprimer les fournisseurs qui habitent à Tunis,
10. Modifier la ville de client ‘C4’ par Gafsa,
11. ajouter un nouveau fournisseur de numéro ‘F10’ de nom ‘XYZ’ et de ville ‘Beja’,

Base de Données 84
Département Technologies de l’Informatique

Bibliographie
ie
- Gardarin G., Bases de Données - objet/relationnel, Eyrolles, 1999.

- Gardarin G., Maîtriser les Bases de Données: modèles et langages,

Eyrolles, 1998.

- Carrez C., Des Structures aux Bases de Données, Masson, 1990.

- Miranda S.M. & Busta J.M., L’Art des Bases de Données, Eyrolles, 1990

- Allen G. T., SQL pur les nuls, First, 2010.

Base de Données 85

S-ar putea să vă placă și