Nothing Special   »   [go: up one dir, main page]

Cours DB

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 143

1

SYSTEME D’INFORMATION
METHODE MERISE

Laoufi.adil@uiz.ac.ma ADIL LAOUFI


2

Systèmes ???

Un système est un ensemble


d’éléments en interaction avec une
finalité déterminée.
3

Système informatique

Le système informatique regroupe les


moyens informatiques utiles pour traiter et
stocker l’information : ordinateurs, réseaux,
programmes, mais aussi locaux, person-
nel... C’est un outil au service du système
d’information et de ses processus.
4

Systèmes d’Information
L’information dans l’entreprise :

üdes données : clients, quantité en stock,... mais aussi,


üdes dépendances entre informations, facture ⇒
produit,... mais aussi,

üla circulation d’informations :


Commande → entrepôt →liste produits livrés → service ,
facturation → ….

ü des règles de gestion. facture ⇒ client,...


des données, clients, quantité en stock,... mais aussi, 5

des dépendances entre informations, facture ⇒ produit,...


Flux d’Information
la circulation d’informations,
liste service
commande → entrepôt → → ...
produits livrés facturation
des règles de gestion. facture ⇒ client,...
flux entrant flux sortant
système de pilotage

décisions infos
flux entrant flux sortant
système opérant
Systèmes d’Information
• Le système d’information est l’interface entre le système décisionnel et
le système opérationnel.
Systèmes d’Information

• Le
Lesystème
systèmed’information
d’informationestest
la la
mémoire de de
mémoire l’entreprise ; il sert
l’entreprise ; il sert
d’interface
d’interfaceentre
entrelelesystème
systèmedécisionnel
décisionneletetle le
système
systèmeopérationnel.
opérationnel :

informations résultat de
économiques système de pilotage l’entreprise
décisions infos traitées
infos système d’information infos

décisions infos collectées


matières produits
premières système opérant finis
7
Système d’Information

Un système d'information est un ensemble


organisé de ressources : matériel, logiciel,
personnel, données, procédures permettant
d'acquérir, traiter, stocker, communiquer
des informations(sous forme de données,
textes, images, sons, etc…) dans des
organisations
8
Système d’Information

Le système d’information d’une entreprise est l’ensemble des


informations qui y circulent ainsi que l’ensemble des moyens mis
en œuvre pour les gérer. L’objectif d’un système d’information est
de restituer l’information à la personne concernée, sous la forme
appropriée et en temps opportun pour prendre une décision ou
effectuer un travail.

Le système d’information comprend le système


informatique, les réseaux, mais aussi des moyens non
informatiques (« manuels »). Il doit garantir la fiabilité et
la sécurité des informations.
9

Système d’information de gestion


Un système d’information de gestion est un
composé de technologies, de ressources
humaines mais aussi de processus, de
procédures et de règles de gestion propres
à l’organisation dont il supporte les activités
qu’il rend davantage génératrices de valeur.
Le système d’information devient ainsi un
élément essentiel et structurant de
l’organisation.
Systèmes d’Information 10

axée sur la production, la mémorisation et le traitement des données de l’activité


L’informatique des
de l’entreprise : Informatique o
́ pérationnelle.
années 80
Informatique Opérationnelle : production et traitement de données : paie,
comptabilité, commandes, factures, …

Développement de l’Informatique Décisionnelle.


L’informatique des Informatique Décisionnelle : Les données sur l’activité sont filtrées, historisées
années 90 et traitées pour faciliter la prise de décision.

l’avénement du réseau.
L’informatique des
Croissance du volume des données, Internet, modèle multi tiers
années 2000

Système d’Information de Gestion


Le système d’information d’une entreprise est l’ensemble des informations qui y
circulent ainsi que l’ensemble des moyens mis en œuvre pour les gérer.
L’objectif d’un système d’information est de restituer l’information à la personne
concernée, sous la forme appropriée et en temps opportun pour prendre une
décision ou effectuer un travail.
11

Système d’Information de Gestion

Le système d’information d’une entreprise est l’ensemble


des informations qui y circulent ainsi que l’ensemble des
moyens mis en œuvre pour les gérer. L’objectif d’un
système d’information est de restituer l’information à la
personne concernée, sous la forme appropriée et en temps
opportun pour prendre une décision ou effectuer un travail.
12

Les fonctions du système d’information

On peut distinguer 4 fonctions principales du système d’information :

1- Recueillir l’information (saisie )

2- Mémoriser l’information (stockage dans des fichiers ou bases de


données)

3- Exploiter l’information (traitement)

a. Consulter
b. Organiser
c. Mettre à jour
d. Produire de nouvelles informations par des calculs

4- Diffuser l’information (édition)


13

Rôles du système
Rôles d’information
du système :
d’information

Le système d'information a donc pour rôle de traiter, collecter, mémoriser, diffuser l'
Le système d'information a donc pour rôle de traiter, collecter, mémoriser, diffuser
information…

l’information...
15

Qualités d’un système d’information informatisé


Pour être efficace, le système d’information informatisé devra assurer :

•La rapidité et la facilité d’accès aux informations.


•La fiabilité, la pertinence et l’intégrité des informations
•la sécurité et la confidentialité des informations.
16

Notion de Système
Système = ensemble auto-réglable et interagissant avec
l’environnement qui fonctionne en vue d’un objectif précis
Information = donnée enrichie d’un modèle d’interprétation

Matériels
Ensemble d'éléments
Autres (hommes, règles, ...)
17

Exemple de système

Essence Voiture Déplacement

Contrôlée par un autre système de pilotage : conducteur


18

•Organisations : Entreprises ...


•Réalisation d'objectifs

Règlements fournisseurs Règlements clients

Entreprise
Produits achetés Produits vendus
19

Exemple : Gestion Commercial

Service commercial

Stat. ventes Nouveaux Produits

Système d'information
Bons de commandes
Bons livraison
Factures Pièces règlement

Service expéditions

Livraisons
Cmdes / Règlements
Clients
Exemple :
21
Exemple :
Sous-systèmes et échanges de flux dans une entreprise.
Sous-systèmes et échanges de flux dans une entreprise.

LeLe système
système d’information
d’information peut doncpeut donc
être défini êtreétant
comme défini comme
l’ensemble desétant l’ensemble
flux d’information
des flux
circulant dansd’information circulant
l’organisation associé dansmis
aux moyens l’organisation associé
en œuvre pour les gérer. aux moyens
mis en œuvre pour les gérer.
22
Du réel
Du au
réel modèle
Du réel au ...…
modèle
au modèle …

n modèle
Un est est
Unmodèle
modèleune abstraction
est
une du réel du réel
une abstraction
abstraction du réel

Un modèle peut être défini comme étant une image de la réalité. Toute réalité complexe a
A* estbesoin
un
A*modèle
est
d’êtreun
de A pour
modèle
représentée de
pour
un observateur
Acomprise
être pour un 0 ssi A* 0aide
observateur
et maîtrisée.
O àaide O à
ssi A*
répondre aux questions
répondre qu'il se pose
aux questions qu'il sesurpose
A.(Minsky 1968) 1968)
sur A.(Minsky
Qu’est ce qu’un modèle de données ?
C'est une représentation simplifiée des informations pertinentes d'une réalité sur
laquelle on veut des renseignements
23

Les modèles des SI

Dans le contexte des systèmes d'information, on peut construire des modèles


selon divers points de vue :

• modèle de données

• modèle de traitement

• modèle événementiel

• modèle organisationnel

• modèle de processus

• ..

L’important dans un modèle est la notation utilisée et les explications fournies

avec le modèle pour relever les détails non représentables sur le modèle.
24

Réalité Schéma Conceptuel


Modélisation

Transformation
Miroir
Codage
Image

Base de
Données
25

Objectif

Informa(ser un système d’informa(on

Ø Permet le passage d’un système non informatisé à un système d’information


automatisé

Ø C’est une méthode de conception et de développement des systèmes


d’informations

Deux versions de MERISE

Ø MERISE 1 : Conception et développement des bases de données relationnelles

Ø MERISE 2 : Conception et développement des bases de données avec l’aspect


Orienté Objet : Notion d’héritage,…
P10
26
L'analyse des données - Introduction Page 2 / 4

L'analyse des données


2 L'analyse des données
Le but de l’analyse des données est d’obtenir un schéma de l’organisation
Le but de l’analyse des données est d’obtenir un schéma de l’organisation des données
des données
stable stable
et invariantetpermettant
invariant permettant
de construire une solutionde construire
physique, une
c'est à dire solution
la base de
données.

physique,Pour
c'est à dire
parvenir la base
à ce résultat, de données.
on procède par étapes :

Chaque étape conduit à la création de documents qui permet de formaliser les


galement appelée recueil d'information.
27

Cette phaseLededictionnaire des données


recueil est effectuée : le étapes
en plusieurs résultat
: de la phase de collecte des données
28

La localisation des informations

Le premier problème à résoudre est de trouver l’information. On recherchera dans :


• Les documents
• Les règlements
• Les normes, les procédures,
• Les bases de données, les fichiers •...
Certaines informations sont difficiles à mettre en évidence car elles ne sont pas
formalisées. Il faudra alors rechercher dans des domaines similaires le besoin

d'information.
Les techniques de recueil
Pour recenser les informations, on utilise essentiellement :
• L’étude de documents
• Les entrevues

• Parfois les questionnaires


29

Classification des données


On peut distinguer :

• Les données élémentaires : l’information se confond avec la valeur prise par


la donnée. Par exemple, un nom, une date... Ces données doivent être
recensées de manière exhaustive.

• Les données calculées ou déduites: elles sont obtenues par l’application d’un
traitement mathématique ou logique. Ces données sont associées à des règles
de calcul (règles de gestion). Il faut penser à bien identifier et conserver la règle

de gestion qui permet d’arriver au résultat. Cette règle permettra ensuite par
traitement d'obtenir le résultat désiré.

• Les données composées : certaines données sont regroupées en une même


entité sémantique (par exemple une adresse). Ces informations doivent être
décomposées en données élémentaires. Toutefois, s’il est montré qu’une donnée
composée n’est jamais décomposée dans la chaîne de traitement de
l’information, on peut envisager de la conserver telle quelle.
30

Typologie des données

Notion de domaine
On appelle domaine l’ensemble des valeurs prises par une donnée,

indépendamment du contexte de son utilisation.


Exemples :
•domaine exhaustif : permis de conduire (A, A1, B, C, D, C1, E, F)
•domaine borné : notes (min 0, max 20)
•domaine typé : noms (30 caractères alphabétiques)
Types de données
le type est une contrainte physique liée à la manière dont sera stockée la donnée

dans le système d’information


Les principaux types à retenir sont :
•Alphanumérique (AN) (on cherchera à déterminer la taille maximale)
•Numérique (on peut préciser entier, réel, monétaire...)
•Date (Date/Heure, Date, Heure )
•Logique ou booléen (L ou B)
31

Le dictionnaire des données


Formalisme
Les données sont présentées dans un tableau.
Nom Description Domaine ou Commentaire
symbolique (rôle) type s Contraintes, règles de
calcul

NoClient N° de client N (entier) N° séquentiel Automatique

Nom ou raison
sociale, format
Nom du : tout en
NomClient AN 50 Obligatoire
client
majuscules

Prix unitaire
HT du Format :
PrixCde N (monétaire) Obligatoire
produit 9999,99 EUR
commandé

Quantité
QteCde commandée N (entier) Obligatoire, > 0

Montant HT
MntCde de la N (monétaire) Format : Somme (PrixCde *
9999,99 EUR QteCde)
commande

!
32
• Soit la liste des données recensées dans un établissement scolaire :

• Numéro salle
• Nom et Prénoms élève
• Nom et Prénoms professeur
• Matière enseignée
• Note
• Nombre d'heures prévisionnelles par matière et par classe.
• Moyenne
• Mention
Nom Description Domaine ou Commentaire
Contraintes, règles de
symbolique (rôle) type s
calcul

NoClient N° de client N (entier) N° séquentiel Automatique

Nom ou raison
sociale, format
Nom du : tout en
NomClient AN 50 Obligatoire
client
majuscules

Prix unitaire
11 PrixProd PrixProduit X 34
12 QteComm
L'analyse Qte
des Commandée
dépendances X
Elle a pour but de rechercher les liens entre les différentes données également
NumBon ! DatComm, NumClient, NumRep
appelés
NumClient ! les dépendances.
Nomclient, RueClient, Villeclient DF partie gauche composée
, elle !
NumRep NomRep comme document un diagramme ou un graphe des dépendances.
produira
RefProduit ! LibProd, PrixProd
NumBon, RefProd ! QteComm

NumBon RefProduit

DatComm NumRep NumClient LibProd PrixProd


QteComm

NomRep Nomclient RueClient VilleClient


35
Matrice des dépendances fonctionnelles
Méthodologie Merise - Cours du cycle B du Cnam.doc
______________________________________________________________________________
Une matrice des dépendances fonctionnelles admettant une ligne et une
colonne par propriétés du dictionnaire. Un « 1 » placé à l’intersection de la
L’exemple
ligne i et suivant
de la illustre
colonnecettej technique
indique sur l’exemple classique
la présence d’une de gestion des
dépendance
commandes d’une entreprise.
fonctionnelle entre la propriété Pj et Pi (PjàPi).
1 2 3 4 5 6 7 8
1 NoCommande 1 NoClient NomClient
2 DateCommande 1 1
3 NoClient 1 1
4 NomClient 1 1 1
5 RefProduit 1
6 Designation 1 1
7 PrixUnitaire 1 1
8 QtéCommandée 1

Cette
Cette première phase
première phase metmet
en évidence deux types
en évidence deuxde propriétés
types de: propriétés :
üles propriétés identifiantes
les propriétés identifiantesrepérées dansla lamatrice
repérées dans matricepar par
des des colonnes
colonnes qui
qui comportent au moins
comportent au moinsdeux
deux «« 11».».Dans
Dans l’exemple
l’exemple ci-dessus
ci-dessus les propriétés
les propriétés 1, 3 et 5
1, 3 et 5 sont sources
sont sources de de dépendances
dépendances fonctionnelles
fonctionnelles et joueront et joueront
donc donc le rôle
le rôle d’identifiant
d’entités dans le modèle conceptuel.
d’identifiant d’entités dans le modèle conceptuel.
les propriétés qui ne sont destination d’aucune dépendance fonctionnelle et qui
ont donc, dans la matrice des dépendances fonctionnelles, leur ligne vide. Dans
l’exemple ci-dessus, les propriétés TauxTVA et QtéCommandée ont ces
36
Les propriétés qui ne sont destination d’aucune dépendance fonctionnelle
et qui ont donc, dans la matrice des dépendances fonctionnelles, leur ligne
vide. Dans l’exemple ci-dessus, la propriété QtéCommandée a ces
caractéristiques. Parmi ces propriétés il convient alors de distinguer :
- les propriétés paramètres telles que le taux de TVA
- les autres propriétés pour lesquelles ont doit rechercher les dépendances
fonctionnelles ayant des sources multi-attributs qui permettent de les

atteindre.
La source de ces dépendances sera constituée d’un sous-ensemble des rubriques
identifiantes repérées à l’étape précédente. Ainsi, la propriété QtéCommandée, est
déterminée à partir d’un numéro de commande et d’une référence produit ce qui revient à
écrire la dépendance fonctionnelle suivante : RefProduit, NoCommandeàQtéCommandée
Les notions de dépendances fonctionnelles 37

Il s’agit de mettre en évidence les liens qui existent entre les données. Deux données
X et Y sont en dépendance fonctionnelle lorsque la connaissance de X entraîne de
façon unique la connaissance de Y.

Soient A et B les ensembles de valeurs prises par deux données. Il y a dépendance


fonctionnelle entre A et B lorsque, connaissant une valeur de A, quelque soit
cette valeur, on détermine une et une seule valeur de B.

Dans ce qui suit, dépendance fonctionnelle sera abrégée par DF


On symbolise la dépendance fonctionnelle par A → B où
• A est appelé source de la DF (on dit aussi déterminant ou partie gauche)
• et B la cible (on dit aussi but, déterminé ou partie droite) de la DF.
Exemple :

•NumClient → NomClient
•NumCLient → AdresseClient
RefProduit → LibProduit
38
Dépendance fonctionnelle forte et faible
Définition stricte → DF forte :
•La DF associe à chaque valeur de A une et une seule de B: il y a unicité au
départ
•La DF est vérifiée pour toutes les valeurs de A : il y a totalité au départ
(toutes les valeurs de A ont une image dans l’ensemble d’arrivée B)

Exemple :
la dépendance fonctionnelle NumCommande → NumClient est une DF
forte car il n’y a pas de commande sans client.

Définition large → DF faible :


•Il y a dépendance fonctionnelle entre A et B lorsque, connaissant une valeur
de A, quelque soit cette valeur, on détermine au plus une valeur de B.
•Cette définition supprime la contrainte de totalité au départ. On parle de DF
faible. Certaines valeurs de A n'ont pas de valeurs de B
39

• Une dépendance fonctionnelle est forte si à


une valeur de X correspond une et une seule
valeur de Y.

• Une dépendance fonctionnelle est faible, si à


une valeur de X correspond 0 ou 1 valeur de
Y.
40

Dépendance fonctionnelle à partie gauche composée

Une dépendance fonctionnelle peut comporter dans sa partie gauche plusieurs


attributs. On parle dans ce cas de dépendance fonctionnelle à partie gauche
composée.
Pour connaître une valeur de l’ensemble d’arrivée C, il faut connaître un couple
(ou plus) de valeurs provenant de A et de B.

Ce type de DF est noté : (d , d ) → d


1 2 3

Exemples :
(NoFacture, CodeProduit) → QtéFacturée,
(NoElève, Matière, Date) → Note
41
Dépendance fonctionnelle élémentaire

Une dépendance fonctionnelle est élémentaire s’il n’existe aucune donnée ou


sous-ensemble de données de la partie gauche assurant une dépendance
fonctionnelle vers le même but. Autrement dit, il ne doit pas y avoir de propriété
superflue dans la source de la DF.
Par définition les dépendance fonctionnelle à deux rubriques (AàB) sont

toujours élémentaires.

Exemples :
•RefProduit → LibProduit est élémentaire (deux rubriques)
•(NumFacture, RefProduit) → QtéFacturée est élémentaire (ni la référence
produit seule, ni le numéro de facture seul permettent de déterminer la quantité)
•(NumFacture, RefProduit) → LibProduit n’est pas élémentaire puisque la
référence du produit suffit à déterminer le libellé.
42

Dépendance fonctionnelle directe

• Une dépendance fonctionnelle d → d est directe s’il n’existe aucune donnée


1 2
d qui engendrerait une dépendance fonctionnelle transitive telle que
3
d →d →d
1 3 2
• Si on a A → B → C, il est inutile d’indiquer sur le diagramme que A → C, cette
relation n’apporte aucune information supplémentaire.

Par exemple, soient les dépendances fonctionnelles :


NumFacture → NumReprésentant et NumReprésentant → NomReprésentant

NumFacture → NomReprésentant n’est pas une dépendance fonctionnelle


directe puisqu’elle est obtenue par transitivité. Il conviendra alors de ne
considérer que la premiére DF.
43

Dépendances fonctionnelles symétriques

Certaines dépendances fonctionnelles sont symétriques, c’est à dire que la


partie gauche détermine la partie droite et inversement.

Par exemple :
NoSérieVéhicule → NoImmatriculation et NoImmatriculation →
NoSérieVéhicule

Dans ce cas, il faut choisir de privilégier une des dépendances fonctionnelles,


en fonction des règles de gestion.

S'il s'agit d'assurer le suivi du véhicule tout au long de sa vie, le no


d'Immatriculation pouvant changer, on choisira la premiére DF

(NoSérieVéhicule → NoImmatriculation).
44
La recherche et la formalisation des dépendances fonctionnelles

La recherche passe par deux phases, à savoir quels sont les objets du
domaine de gestion observé, quels éléments du dictionnaire des données sont
rattachés à cet objet, puis ensuite l'analyse des DF entre ces éléments. Le tout

sera ensuite formalisé dans un diagramme ou un graphe des DF.

La recherche des objets

Un objet est un élément du système d’information pourvu d’une existence propre,


conforme aux règles de gestion de l’organisation.

Le repérage des objets de gestion permet ensuite de faciliter la recherche des DF


et la construction du diagramme des DF.

Exemple :

Les véhicules .... font l'objet d'un suivi dans des garages ...

Ce texte fait apparaître 2 objets qui sont VEHICULE et GARAGE.


45
La recherche des dépendances
Cette représentation se fait à l'aide de deuxfonctionnelles
outils qui sont la matrice ou le graphe des DF. Le graphe
des DF permettant de mieux représenter les liens, et surtout les DF à partie gauche composée.
Un objet est représenté par une donnée particulière : l’identifiant.
Exemple à partir d'une gestion de commande réduite (Matrice puis graphe des DF)

l’identifiant
1
est en
No Propriété
NumBon
dépendance
Signification fonctionnelle
1 2
No Bon Commande X X X
3 4 5avec
6 toutes
7
X
8 9les10autres
11 12 propriétés de
C
l’objet. 2 DatComm DateCommande X
3 NumClient No de Client X X X X
4 NomClient X
Repérer5 lesRueClient
objets du système d’information X permet d’avancer très vite dans
6 VilleClient X
l’étude des
7 dépendances
NumRep fonctionnelles.
No représetant La démarche X Xconsistera alors à partir du
DF élémentaire et directe
dictionnaire
8 des données
NomRep et du repérage des identifiants
Nom représentant X à rechercher les DF
9 RefProduit Référence Produit X X X C
élémentaires et directes
10 LibProduit Nom Produit X
11 PrixProd PrixProduit X
12 QteComm Qte Commandée X
Exemple :
NumBon ! DatComm, NumClient, NumRep
Les véhicules
NumClient sont repérés
! Nomclient, par
RueClient, leur numéro d'immatriculation
Villeclient et caractérisé par
DF partie gauche composée
une couleur...
NumRep ! NomRep
RefProduit ! LibProd, PrixProd
Le dictionnaire des!données
NumBon, RefProd QteComm comprendra comme information Immat et couleur.
Immat étant repéré comme un identifiant, on en déduira la DF Immatà Couleur
NumBon RefProduit

DatComm NumRep NumClient LibProd PrixProd


QteComm

NomRep Nomclient RueClient VilleClient


47

MCD : Il permet de « dessiner » la structure des données du système

d’information à implanter.
48
Concepts et formalisme
Le formalisme retenu est le modèle Entité-Association (MEA), mais on parlera
souvent de MCD (Modèle Conceptuel des Données).

Les entités
Elles correspondent aux objets du système d’information. Par exemple, l’entité
CLIENT rassemble toutes les informations communes aux clients de l’entreprise.
• Les entités sont nommées.
• Leur nom est unique dans le modèle et s'écrit en majuscule
Occurrence
Dans le système d’information, l'entité CLIENT représentera l'ensemble des
clients. Chaque client constitue alors une occurrence de l’entité. Une occurrence
représente un « exemplaire » de l’objet.
49
Propriétés
Une entité possède toujours au moins une propriété. Chacune de ces
propriétés doit pouvoir être valorisée de manière unique.
Les propriétés des entités sont issues du dictionnaire des données.
Identifiant
Parmi les propriétés d’une entité, il y en a une qui joue un rôle particulier :
L’identifiant
s au moins uned’une l’entité est
propriété. une propriété
Chacune de cestellepropriétés
qu’à chaquedoit
valeur de la être
pouvoir
propriété corresponde une et une seule occurrence de l’entité.
Par conséquent
nt issues :
du dictionnaire des données.
• on ne peut trouver deux occurrences d’une entité ayant le même identifiant
• l’identifiant se confond avec l’entité: l’entité existe si on peut valoriser
l’identifiant
ntité, •ilsiyl’entité
en a une qui joue
ne possède un rôle
qu’une particulier
propriété, :
cette propriété est l’identifiant
propriété
• toutestelleles
qu’à chaque sont
propriétés valeuren de la propriétéfonctionnelle
dépendance correspondeélémentaire
une et une et
nséquent
directe: avec l’identifiant
urrences d’une entité ayant le même identifiant
• L’identifiant est représenté souligné dans le modèle.
vec l’entité : l’entité existe si on peut valoriser

e propriété, cette propriété est l’identifiant


Dans l'exemple ci-dessus, un micro est équipé d'un ou plusieurs type de périphériq
50
dur, cd rom, souris …) et dans l'autre sens, un type de périphérique équipe plusieur
2.2 LesLes associations
associations
ssociation est un lien entre
Une association est undeslien
entités.
Laentre Contrairement
devient : aux
des entités.
transformation entités, les associations
Contrairement aux entités,n'ont
lespas
ence associations
propre mais elles peuvent porter des MICRO (Num_Micro, Marque_Micro)
propriétés.
n'ont pas d’existence propre mais elles peuvent
PERIPHERIQUE porter
(Type_Periph, des propriétés.
Marque_Periph)
Les associations sont nommées, généralement à l’aide d’un(Num_Micro#,
EQUIPER verbe d’action.
Type_Periph#)
• Les associations sont nommées, généralement
Une association peut lier plus de deux entités. à l’aide d’un verbe d’action.
ére
BTS CGO 1 année Chapitre 11 - Cours
• Une association peut lier plus de deux entités. P10
les :
2.2.6 Association binaire x,1 -x,n et porteuse de données
Le modèle relationnel Page 7 / 8
ation binaire :
Association binaire : Ce cas est une extension du cas précédent, la propriété portée par l'association
attribut de2.3
la table issue de n-aires
Associations l'association
2.3.1 Associations ternaires
Exemple :
Le traitement de ce type d'association est en fait une généralisation du cas précédent.
L'association génère une table, cette table reçoit en clé étrangère les attributs clés primaires
PRODUIT COMMANDE
des autres tables, la composition de chaque clés étrangères devenant la clé primaire composée
ation Association
porteuse porteuse
de de 1,n figurer 1,n
des trois attributs. Si l'association est porteuse de données, les données portées deviennent des
num_produit
attributs de la table composée. num_cde
été : propriété : qte_cde
date_cde
nom_produit
Exemple :

PRODUIT
ECURIE (Num_Produit, Nom_Produit)
SAISON
Association ternaire : nom_ecurie
engager
0,n 0,n
id_saison
COMMANDE (Num_Cde, Date_Cde)
LIGNE_CDE (Num_Cde#, Num_Produit#, Qte_Cde)
ation ternaire : 0,n
PILOTE
num_pilote
nom_pilote

Cet exemple peut se lire : Une écurie engage un ou plusieurs pilote pour une ou plusieurs
saison. Ce qui peut se lire dans tous les sens de l'association. Le modèle relationnel résultant
51

Rôles d’une association


Chaque2.2.2« patte
Rôles»d’une
d’uneassociation
association vers une entité représente le rôle joué par
haque «l’association.
patte » d’une Ces rôles peuvent
association vers une être
entiténommés, cela
représente peut joué
le rôle aiderparà l’association.
clarifier le Ces
uvent être nommés, cela peut aider à clarifier le modèle dans certaines situations complexes.
modèle dans certaines situations complexes.

Cardinalités
es rôles sont généralement faciles à identifier sur des associations binaires, ce n’est pas le ca
sociations
La n-aires.
cardinalité représente le nombre d’occurrences minimum et maximum d’une
association par rapport à une entité.
2.3• La Cardinalités
cardinalité minimale représente le nombre de fois « au minimum » où une
2.3.1 de
occurrence Définition
l’association participe aux occurrences de l’entité. Cette cardinalité
a cardinalité représente
est choisie parmile 0nombre
ou 1. d’occurrences minimum et maximum d’une association par rapp
e entité.
• La cardinalité maximale représente le nombre de fois « au maximum » où une
• La cardinalité minimale représente le nombre de fois « au minimum » où une occurren
occurrenceparticipe
l’association de l’association participe
aux occurrences deaux occurrences
l’entité. de l’entité.
Cette cardinalité Cette cardinalité
est choisie parmi 0 ou 1.
• Laestcardinalité
choisie parmi
maximale1 ou représente
n où n indique une cardinalité
le nombre maximale
de fois « au maximum supérieure
» où une àoccurren
1
l’association participe aux occurrences de l’entité. Cette cardinalité est choisie parmi 1 ou n
mais non quantifiée. Si la valeur de n est connue, on peut la mentionner.
indique une cardinalité maximale supérieure à 1 mais non quantifiée. Si la valeur de n est connu
52
2.3.2 Formalisme
Formalisme
ardinalités sont mentionnées
Les cardinalités par couple par
sont mentionnées du côté dedu
couple l’entité à considérer.
côté de La cardinalité
l’entité à considérer.
sentée en premier, la maximale en second.
La cardinalité minimale est représentée en premier, la maximale en second.
ple :

un employé
un employé peutpeut suivre
suivre (0) (0)
ou ou plusieurs
plusieurs (n)(n) affaires
affaires
une affaire est suivie
• une affaire par unpar
est suivie (etunun(etseul) employé
un seul) employé
une affaire est passée avec un (et un seul) client
• une affaire est passée avec un (et un seul) client
un client passe une (sinon ce n’est pas un client) ou plusieurs (n) affaires
• un client passe une (sinon ce n’est pas un client) ou plusieurs (n) affaires
rdinalité
Laminimale
cardinalitéàminimale
1 ou à 0 àdépend
1 ou à des règles des
0 dépend de gestion.
règles deSigestion.
sur le schéma
Si sur leprécédent,
schéma o
he une cardinalité 0,n cela voudrait dire qu'il existe des clients n'ayant pas passé d'affaire.
précédent, on admettait à gauche une cardinalité 0,n cela voudrait dire qu'il existe

2.4 desAssociations
clients n'ayant pas passé d'affaire.
réflexives
nt des associations qui relient deux fois la même entité.
53
Cardinalités d’une Association
E1 E2 E1 E1 E2
Assoc E2 Assoc
Assoc

0,1 1,1 1,1 1,1 1,1


E1 E2 0,N
Assoc Cardinalités mini :
0 : Certaines occurrences de l’entité peuvent ne pas participer à l’assoc
1 : Toute occurrence de l’entité participe obligatoirement à l’association
Cardinalités maxi :
1 : Toute occurrence de l’entité participe au plus une fois à l’association
N : Toute occurrence de l’entité peut participer plusieurs fois à l’assoc
0,N 1,N

Conclusion
• La cardinalité mini traduit la capacité d ’une occurrence à exister
indépendamment ou non des occurrences de l’association.
• La cardinalité maxi traduit la capacité associative de l’association pour
l’entité considérée
54
inalité minimale à 1 ou à 0 dépend des règles de gestion. Si sur le schéma précédent, on adm
une cardinalité 0,n cela voudrait dire qu'il existe des clients n'ayant pas passé d'affaire.
Associations réflexives
Ce sont des associations qui relient deux fois la même entité.
2.4 Associations réflexives
des associations qui relient deux fois la même entité.

èce (en mécanique par exemple) est composée de 1 ou plusieurs pièce.

Dans
s associations les associations
réflexives, la notionréflexives, la notion
de rôle prend de rôle
tout son prend tout son sens.
sens.

2.5 Petit aparté sur les contraintes d’intégrité fonctionnelle


55

Démarche de construction du MCD


On peut les repérer intuitivement ou s’aider du
1- Repérage des entités
graphe des dépendances fonctionnelles.

2- Repérage des associations

3- Placement des cardinalités

4- Vérification du modèle

Toutes les propriétés doivent être élémentaires (non décomposables)


• Chaque entité possède un et un seul identifiant, rôle joué par une seule propriété.
• Les propriétés d’une entité doivent être en dépendance fonctionnelle avec l’identifiant.
• Les propriétés d’une association doivent être en dépendance fonctionnelle élémentaire avec
l’identifiant implicite de l’association.
• Une propriété ne peut figurer qu’une fois dans le modèle (pas de redondance)
• Une propriété d’une entité ne peut être en dépendance fonctionnelle avec une autre propriété non
identifiant de cette entité (pas de transitivité).
• Une propriété portée d’une association doit être en dépendance fonctionnelle élémentaire avec la «

concaténation » des identifiants des entités participant à l’association.


56

Normalisation des entités


Première forme normale (1FN) : toutes les propriétés sont élémentaires et il existe au
moins une clé. Si une clé est unique, elle sera
prise comme identifiant
Deuxième forme normale (2FN) : toute propriété doit dépendre de la clé par une DF
élémentaire
Troisième forme normale (3FN) : toute propriété doit dépendre de la clé par une DF
élémentaire directe
Forme normale de Boyce-Codd (BCFN) : si une entité possède un identifiant concaténé, un des
éléments de cet identifiant ne doit pas dépendre d'une
autre propriété.
Exemples :

CLIENT

Nom, adresse

Pas FN1 car pas de clé et adresse pas élémentaire (concaténée)


57

Dans la phase de conception d’une base de données, au niveau


conceptuel, on ne doit pas ?

a. Dégager les objets et leur identifiant ;


b. Dégager les relations et leur identifiant ;
c. Déterminer les cardinalité des relations ;
d. Attacher les propriétés aux relations et aux objets.

Dans la phase de conception d’une base de données, au niveau


conceptuel, on :

a) Recense les règles d’organisation

b) Défini le type de base données

c) Recense les règles de gestion

d) Défini l’architecture réseau


58

Dans un modèle conceptuel de données, trouver l’affirmation


fausse :

a) une propriété peut se retrouver dans plusieurs endroit du modèle

b) une relation peut relier plus de deux objets

c) une ou plusieurs propriétés permettent d’identifier de manière


unique un objet

d) la dimension d’une relation est le nombre d’objets rentrant dans la


liaison

Une clé primaire :

a) c’est un champ qui n’accepte pas de doublon

b) permet d’identifier de façon unique un enregistrement dans une


table

c) premier enregistrement dans une table


59

De quel(s) élément(s) est composée une table dans un MCD ?


• association(s)
•attribut(s)
•Cardinalité (s)
•identifiant(s)

Parmi les différents logiciels suivants, un seul n'est pas du domaine de


gestion des bases de données

•ORACLE
•VISUAL BASIC
•MYSQL
•ACCESS
60

les objectifs du modèle relationnel des données sont :

• Sauvegarde des données


• Chiffrement des données
• Indépendance physique des donnéesIndépendance logique
des données
• Non redondance des données
• Sécurité des données
• Rapidité d'accès aux données

Que signifie SGBDR ?

1.Système graphique de Dessin.


2.système de gestion de base de donnée relationnelle
3.Un fichier Excel
4.La suite bureautique Microsoft Office
61

En matière de dépendance fonctionnelle, si X => Y et Y = Z quelle affirmation


est vraie ?

1. Y => Y
2. X => Z
3. Y => X
4. Z => X

À quoi sert une cardinalité ?


1. compter toutes les données
2. calculer des probabilités
3. compter une occurrence minimum et une occurrence maximum
62

Cocher les cardinalités possibles d'un MCD


1. 0,1
2. 1,1
3. 0,n
4. 1,n
5. 2,n
6. n,2

Remplir le champ vide du nom du mot clé adéquat


Les ………1……. ………2…… peuvent être
symétriques, transitives, réflexives
de la quatrième étape de l'analyse des données, à savoir la traduction logique. Cette étape a 63
pour but de fournir le modèle relationnel à partir du modèle conceptuel. Si cette phase est
Le MLD (Modèle
réalisée Logiquepardes
en automatique les Données ou MRD (Modèle
outils de modélisation relationnel
(Power Amc, Windesign,des données)
Analyse SI),
il n'est pas inutile d'en connaître les règles, ne serais-ce que pour en comprendre les modes de
Cettetraduction.
étape a pourCette but
étapede
defournir le modèle
traduction relationnel
correspond à partir
à la quatrième phasedu modèle des
de l'analyse conceptuel.
données

Le MLD
Le (Modèle Logique
MLD (Modèle des des
Logique Données
Donnéesouou MRD
MRD (Modèle relationneldes
(Modèle relationnel desdonnées)
données)
restereste
indépendant
indépendant du SGBD
du SGBD utilisé.utilisé.
64

Les Règles de passage


2.1 Le traitement des entités
Le traitement des entités
• Chaque entité du MCD est transformé en table
üChaque entité du MCD est transformé en table
• Les propriétés de l'entité deviennent les attributs de la table
üLes propriétés de l'entité
• L'identifiant deviennent
de l'entité lesprimaire
devient clé attributs de la table

üL'identifiant de l'entité devient clé primaire


Exemple :

AUTEUR
LIVRE
num_auteur
num_livre
nom_auteur
titre_livre
date_naissance

AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)


LIVRE (Num_Livre, Titre_Livre)

ü AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)

ü LIVRE (Num_Livre, Titre_Livre)


Cette association correspond à une paire de cardinalité 1,1 et 0,n ou 1,n. Ce cas65 e
dénommé sous le vocabulaire de CIF (Contrainte d'Intégrité Fonctionnell
Les associations
d'association binairesappelée association 1,n
est également
Association binaire 1,1 – (0,n ; 1,n)
Dans ce cas, la table issue de l'entité coté cardinalité 1,1 reçoit comme clé étra
Dans ce
primaire decas, la table
l'entité liée.issue de l'entité coté cardinalité 1,1 reçoit comme clé
étrangère la clé primaire de l'entité liée.
Exemple :

AUTEUR
LIVRE
num_auteur 1,n écrit 1,1 num_livre
nom_auteur
titre_livre
date_naissance

AUTEUR (Num_Auteur, Nom_Auteur, Date_Naissance)


ü AUTEUR (Num_Auteur,
LIVRE Nom_Auteur,
(Num_Livre, Date_Naissance)
Titre_Livre, Num_Auteur#)

ü LIVRE (Num_Livre, Titre_Livre, Num_Auteur#)


Explication : Dans l'exemple ci-dessus, un livre est écrit par un et un seul auteu
normal de retrouver l'auteur associé au livre dans la table livre.
66
Cette association correspond à une paire de cardinalité 1,1 et 0,1. Dans ce cas, il y a plusieurs
Association
solution, une binaire
bonne et 0,1 -1,1 bonne. Je vous les cite toutes les deux dans la mesure où
une moins
vous êtes susceptibles de retrouver les deux possibilités.
Cette association correspond à une paire de cardinalité 1,1 et 0,1.
Dans ce cas,
Exemple : il y a plusieurs solution, une bonne et une moins bonne.

MICRO CD_ROM
0,1 équiper 1,1
num_micro num_cd
marque_micro marque_cd

La meilleure solution est que la table CD_ROM reçoivent comme clé étrangère
Cet exemple illustre le fait qu'un Micro est équipé de 0 ou 1 CD-Rom. Les nos
Num_Micro. Car un àCD_Rom
correspondent des numéros est
de affecté
série. à un et un seul micro.
Ce qui donne :
üMICRO (Num_Micro,
La meilleure solutionMarque_Micro)
Car un(Num_Cd,
est que la table CD_ROM reçoivent comme clé étrangère Num_Micro.
CD_Rom estMarque_Cd,
affecté à un et un seul micro. Ce qui donne :
üCD_ROM Num_Micro#)
Une autre solution àMICRO
proscrire est l'échange
(Num_Micro, des clés primaires entre les 2 tables,
Marque_Micro)
CD_ROM (Num_Cd, Marque_Cd, Num_Micro#)
ce qui donnerait :

üMICRO
Une(Num_Micro,
autre solution Marque_Micro,
donnerait :
Num_Cd#)
à proscrire est l'échange des clés primaires entre les 2 tables, ce qui

üCD_ROM (Num_Cd, Marque_Cd, Num_Micro#)

Dans ce cas, un micro pouvant ne pas avoir de CD_Rom, la clé étrangère num_CD
peut être nulle, ce qu'il faut éviter au maximum.
67
Association
Exemple : binaire 0,1 -0,1

MICRO CD_ROM
équiper
num_micro num_cd
0,1 0,1
marque_micro marque_cd

Partant qu'une clé étrangère ne peut être nulle, la seule solution est de créer une
table
Cetintermédiaire qui illustre
exemple illustre le faitle que
fait que l'on mémorise
certains CD_Romles cas d'association
n'équipent entre (cas de
pas de micro
l'on ne de
un lecteur saitCD-Rom
connaît pas
et unlaMicro.
destination du cd-rom.
Ce cas d'association
En reprenant nécessite la création
le modèle d'uneetautre
relationnel, table
partant (ici EQUIPER)
qu'une prenant
clé étrangère ne peut êtr
seuleclé
comme solution estlade
primaire créer une table
composition intermédiaire
des clés qui autres
primaires des illustretables
le faitdevenant
que l'on mémor
d'association entre un lecteur de CD-Rom et un Micro. Ce cas d'association né
clé étrangère dans la table COMPOSER:
création d'une autre table (ici EQUIPER) prenant comme clé primaire la compositio
üMICRO (Num_Micro,
primaires Marque_Micro)
des autres tables devenant clé étrangère dans la table COMPOSER:
üCD_ROM (Num_Cd, Marque_Cd)
üEQUIPER (Num_Micro#, Num_Cd#) Marque_Micro)
MICRO (Num_Micro,
CD_ROM (Num_Cd, Marque_Cd)
EQUIPER (Num_Micro#, Num_Cd#)
68
• La premiére solution
Association binaire 0,1 -0,n ou 1,n
assimile la cardinalité 0,1 à une cardinalité 1,1 et
migration de la clé primaire de la table coté 1,n vers la table coté 0,1 ce
Il existe plusieurs solutions, et de la même façon que précédemment l'une meilleure
que l'autre.
possibilité d'une valeur nulle pour la clé étrangère.
• La deuxième
• La première condition
solution assimile consiste 0,1
la cardinalité à créer une
à une table intermédiaire
cardinalité 1,1 et donc ilavec
y a une
migration decomposée.
la clé primaire de la table coté 1,n vers la table coté 0,1 ce qui laisse la
possibilité d'une valeur nulle pour la clé étrangère.
• La deuxième
Exemple : condition consiste à créer une table intermédiaire avec une clé primaire
composée.

EQUIPE RESPONSABLE
diriger num_responsable
nom_equipe
0,1 1,n nom_responsable

Solution 1Cet
: ü RESPONSABLE (Num_Responsable, Nom_Responsable)
exemple illustre le fait qu'une équipe est dirigée par un responsable
peut n'être dirigéeEQUIPE
par personne.
ü (Nom_Equipe, Num_Responsable#)

Solution
Solution 2 :1 : EQUIPE (Nom_Equipe)
ü RESPONSABLE (Num_Responsable, Nom_Responsable)
üRESPONSABLE (Num_Responsable,
EQUIPE (Nom_Equipe, Nom_Responsable)
Num_Responsable#)

Solution 2 :üDIRIGER (Nom_Equipe#, Num_Responsable#)


Le modèle relationnel Page 6 / 8
69
Association binaire x,n - x,n
Ce cas regroupe toutes les associations
2.2.5 Association où-x,n
binaire x,1 la cardinalité maximale de part et
d'autre est à n, la cardinalité minimale pouvant être 0 ou 1.
Ce cas regroupe toutes les associations où la cardinalité maximale de part et d'autre est à n,
Dans ce cas, la règle
cardinalité est simple
minimale pouvantetêtre
consiste
0 ou 1. à la création d'une table issue de
Dans ce cas, la règle est simple et consiste à la création d'une table issue d
l'association, cette table
l'association, recevant
cette comme
table recevant clé clé
comme étrangère
étrangère les clésprimaires
les clés primaires
des des 2 table
2 autres
La clé primaire de cette table résultant de l'association étant la composition des deux cl
autres tables. La clé primaire de cette table résultant de l'association étant la
étrangères.
composition des deux clés étrangères.
Exemple :

MICRO PERIPHERIQUE
num_micro 0,n équiper 0,n
type_periph
marque_micro marque_periph

Dans l'exemple ci-dessus, un micro est équipé d'un ou plusieurs type de périphérique (disqu
ü MICRO dur,
(Num_Micro, Marque_Micro)
cd rom, souris …) et dans l'autre sens, un type de périphérique équipe plusieurs micro.

ü PERIPHERIQUE (Type_Periph,
La transformation devient : Marque_Periph)
MICRO (Num_Micro, Marque_Micro)
ü EQUIPER (Num_Micro#, Type_Periph#)
PERIPHERIQUE (Type_Periph, Marque_Periph)
EQUIPER (Num_Micro#, Type_Periph#)
2.2.6 Association binaire x,1 -x,n et porteuse de données 70
Association binaire x,n-x,n et porteuse de données
Cecas
Ce casestestune
uneextension
extension
du du
cas cas précédent,
précédent, la propriété
la propriété portéeportée
par par l'a
attribut de la table issue de l'association
l'association devient un attribut de la table issue de l'association
Exemple :

PRODUIT COMMANDE
1,n figurer 1,n
num_produit num_cde
qte_cde
nom_produit date_cde

PRODUIT (Num_Produit, Nom_Produit)


COMMANDE (Num_Cde, Date_Cde)
üPRODUIT (Num_Produit,
LIGNE_CDE (Num_Cde#, Num_Produit#, Qte_Cde)
Nom_Produit)

üCOMMANDE (Num_Cde, Date_Cde)


üLIGNE_CDE (Num_Cde#, Num_Produit#, Qte_Cde)
71
Associations n-aires 2.3 Associations n-aires
Associations ternaires
2.3.1 Associations ternaires
Le traitement de ce type d'association est en fait une généralisation du cas
Le traitement de ce type d'association est en fait une gén
précédent. L'association génère une table, cette
L'association génèretable reçoit
une table, entable
cette clé reçoit
étrangère
en clé étrangè
des autres tables, la composition de chaque clés étrangères deve
les attributs clés primaires des autres tables,
des trois laSicomposition
attributs. l'association estde chaque
porteuse clés les d
de données,
étrangères devenant la clé primaire
attributs decomposée des trois attributs. Si
la table composée.

l'association est porteuse de données,


Exempleles
: données portées deviennent des
attributs de la table composée.
ECURIE SAISON
0,n engager 0,n
nom_ecurie id_saison

0,n
PILOTE
num_pilote
ü SAISON (Id_Saison) nom_pilote

ü PILOTE (Num_pilote, Nom_pilote)


Cet exemple peut se lire : Une écurie engage un ou plusieurs
ü ECURIE (Num_Ecurie, Nom_Ecurie)
saison. Ce qui peut se lire dans tous les sens de l'association. L
est donc :
ü ENGAGER (Id_Saison#, Num_Ecurie#, Num_Pilote#)
SAISON (Id_Saison)
72

Associations n-aires
Ce cas n'est qu'une généralisation du traitement de
l'association ternaire. La table issue de l'association est
composée des identifiants de toutes les entités participant à
l'association comme clé étrangère et comme clé primaire
composée. Les propriétés portées par l'association devenant
des attributs de cette table.
2.4 Associations réflexives 73

Associations réflexives
Ces associations sont en en fait des associations binaires, leur traitement
Cescardinalités.
associations sont en en fait des associations binaires,
leur traitement dépend donc des cardinalités.
Exemple

mari
0,n
PERSONNE épouser
num_personne date_mariage
nom_personne
0,n
femme

PERSONNE (Num_Personne,
ü PERSONNE (Num_Personne, Nom_Personne)
Nom_Personne)
EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
ü EPOUSER (Num_Mari#, Num_Femme#, Date_Mariage)
74

Règles de gestions

Contraintes d'intégrité du modèle (lois de l'univers réel modélisé dans le SI)


Contraintes statiques
Portent sur : - une propriété (liste de valeurs possibles ...)
- plusieurs pptés d'une même relation ou entité
cde(no,date-cde,date-livr) avec date-cde < dte-livr
- les cardinalité
- les dépendances fonctionnelles

Contraintes dynamiques : règles d'évolution


ex: un salaire ne doit pas baisser
75

Exemple

RG1 : Tout enseignant enseigne en principe au moins une matière, mais certains d’entre
eux peuvent être dispensés d’enseignement en raison de leur travaux de recherche

RG2 : Toute matière est enseignée dans au moins une classe

RG3 : Toute classe a au moins trois enseignements

1,n MATIERE
0,n
ENSEIGNANT ENSEIGNE
3,n
CLASSE
76
Les Contraintes d’Intégrité :

Elles représentent un ensemble de règles fondamentales dont l’application permet de garantir


la cohérence du schéma relationnel d’une base de données .

Ces règles contrôlent la cohérence des valeurs prises par :

* les attributs par rapport à leur domaine de valeurs (contrainte d’intégrité de


domaine)
Exemple : Si l’attribut ‘ N° Client ’ est défini sur un domaine de valeurs numériques , il ne
peut pas contenir de lettres .

* les clés primaires des relations ( contraintes d’intégrité de relations )


L’intégrité de relation concerne les valeurs d ’une clé primaire qui doivent être uniques
( pas de doublons ) et non nulles ( toujours spécifiées ) .

* les clés étrangères des relations ( contraintes d’intégrité référentielles )


L’intégrité référentielle stipule qu’une clé étrangère ne peut prendre que les valeurs définies
dans le domaine primaire de la clé primaire à laquelle elle est associée .
77

Exemples

Ligne-Commande
Pas FN2 car Df avec clé n'est pas élémentaire
N°cde,Réf, Dés, Qté

Commande 1,n Concerne 0,n Produit


N°cde Qté Réf, Dés

Client
Pas FN3 (Pas de transitivités)
Codecli,nomcli, codecaté, nomcaté

Client 1,n Appartient à 0,n Catégorie


Codecli, nomcli Codecaté, nomcaté
78

Exemples

COURS
N'est pas BCFN
Matière, N°classe, Code-prof

PROF Fait cours CLASSE


1,n 1,n

Code-prof , matière N°classe


79
Construction du Modèle Logique de Données Relationnel
4 ) Application : Schéma relationnel d’un service clientèle dans un café

SERVEUR MLDR
1# 1,N 0,N CALENDRIER
AFFECTER
2 SERVEUR ( 1 # , 2 )
9#

1,N 0,N
CALENDRIER ( 9 # )

0,N AFFECTER ( 1 #, 9 # , 3 # )
SUIVRE 0,N TABLE
3#
CONCERNER TABLE ( 3 # )
1,1 TRAITER
1,1 COMMANDE ( 11 #, 12, 10 ,
1,1
COMMANDE 1 #, 3 #, 9 # )
11 # CONSOMMATION
12 FIGURER 0,N FIGURER ( 11 # , 4 # , 7 , 8 )
1,N 4 #
10 5
7 CONSOMMATION ( 4#, 5 , 6 )
8 6

Dictionnaire de données

1 - N° de serveur 7 - Quantité d ’une consommation commandée


2 - Nom de serveur 8 - Montant d ’une ligne de commande
3 - N° de table 9 - Date de commande
4 - N° de consommation 10 - Heure de la commande
5 - Libellé consommation 11 - N° de la commande
6 - Prix unitaire consommation 12 - Montant total de la commande
80

BASE DE DONNEES
81

Qu’est-ce qu’une base de données ? ( BD )

Une base de données ( BD ) est un ensemble structuré de données enregistrées avec le minimum de redondance
sur un support de stockage informatique et accessibles à plusieurs utilisateurs de manière sélective et simultanée au
moyen d’un système de gestion de base de données ( SGBD ) .

Un SGBD permet de répondre simultanément aux interrogations ( requêtes ) de plusieurs utilisateurs exprimées
sur une même base de données déployée sur un réseau informatique .

Exemple : Base de données d’une compagnie aérienne


Les requêtes sont très variées , par exemple :

- Une réservation : « Liste des passagers qui ont réservé un vol déterminé ? »

- Un équipage : « Quel est le pilote du vol Royal Air Maroc Casablanca – Londres du 15 Octobre
Départ 15 H 30 ? »

- Un appareil : « Quelle est la date de la dernière révision de l’avion N ° 97 ? »


82
Un Système de Gestion de Bases de Données

offre la possibilité à l’utilisateur de manipuler les représentations abstraites des données (


métadonnées ) indépendamment de leur organisation et de leur implantation sur les supports
physiques .

Fonctions principales d’un SGBD

- Décrire et organiser les données sur les mémoires secondaires


( disques, bandes magnétiques , etc… )
- Rechercher, sélectionner et modifier les données

Fonctions complémentaires d’un SGBD

- Sécurité : vérifier les droits d’accès des utilisateurs sur les données

- Intégrité : définir des règles qui maintiennent une cohérence entre les données
compte tenu de leur structure ( contraintes d’intégrité )

- Concurrence d’accès : détecter et traiter les cas où il y a conflit d’accès entre


plusieurs utilisateurs et les traiter correctement .
83

Requêtes SQL
84

Qu'est-ce-que le SQL ?

•Structured Query Language = Langage d'interrogation structuré


•Permet de consulter une base de données (requêtes sélection) et aussi de
créer, modifier, supprimer tables et enregistrements
•Langage normalisé
•mais implémentations parfois différentes (dialectes)
•L4G (langage de quatrième génération)
•Langage déclaratif, non procédural (procédural : C, Pascal...)
•Inspiré du modèle d'algèbre relationnel de E.F. Codd (1970)
•Utilisé sur Oracle, MySQL, PostGreSQL, Access...
85
LE LANGAGE DE REQUETES SQL

Les 3 niveaux du langage SQL

* Langage de définition de données ( LDD ) : Il permet de spécifier un schéma


conceptuel de BD
CREATE , ALTER et DROP ( tables , indexes et vues )

* Langage de manipulation de données ( LMD ) : Il permet d’interroger et de manipuler


les données
SELECT , INSERT , UPDATE , DELETE , OPEN , FETCH , CLOSE , etc…

* Langage de contrôle de données ( LCD ) : Il permet de gérer la sécurité des données,


les transactions et les accès concurrents
GRANT et REVOKE , BEGIN et END TRANSACTION , COMMIT et ROLLBACK, etc…
86
Les Ordres SQL

Les ordres LMD sont des instructions SQL créées à partir des commandes suivantes :
Commande Rôle
SELECT Interroger une base de données en vue d’extraire les enregistrements qui répondent à
des critères particuliers
INSERT Insérer ( charger ) des lots de données dans la base de données en une seule opération
UPDATE Modifier ( mettre à jour ) des valeurs d’attributs dans une table ou bien des valeurs
d’enregistrements entiers répondant à des critères particuliers
DELETE Supprimer des enregistrements dans une table de base de données sélectionnés ’après
un critère donné .

Chaque commande peut utiliser une ou plusieurs clauses obligatoires et des clauses optionnelles .
Les clauses permettent de définir l’origine et la nature des données qu’il faut sélectionner ou manipuler .
Clause Rôle
FROM Nommer une ou plusieurs tables ou vues à partir desquelles les enregistrements
doivent être sélectionnés
WHERE Spécifier des conditions de jointure et / ou de sélection sur les enregistrements
GROUP BY Spécifier les attributs de regroupement lors d’une opération de calcul et / ou
regroupement
HAVING Spécifier des conditions de sélection sur les enregistrements obtenus après une
opération de regroupement
ORDER BY Trier les enregistrements sélectionnés pour être projetés dans un ordre particulier
COMMANDE SELECT 87

SELECT [ALL/DISTINCT] < liste d’attributs de projection simples , calculés ou renommés>


FROM < liste de tables ou vues >
[WHERE < critère de jointure naturelle, théta-jointure, jointure externe > ]
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
[GROUP BY < liste d’attributs de regroupement > ]
[HAVING < critère de sélection sur des attributs calculés ou regroupés > ]
[UNION / INTERSECT / EXCEPT ( autre requête SELECT ) ]
[ORDER BY < liste d’attributs de tri avec ordre de tri > ]

Critère de sélection simple


* arithmétique ( = , < , > , <= , >= , <> )
* textuel ( LIKE )
* sur intervalle ( BETWEEN )
Critère de sélection complexe ( imbrication d’ordres SELECT )
* clause IN ou NOT IN , EXISTS ou NOT EXISTS
* clauses ALL , ANY , etc…
* sous-requêtes dépendantes ou corrélées
88

SELECT [ALL / DISTINCT] nom_attribut1 [, nom_attribut2, ......]


FROM nom_table1 [, nom_table2, ....]

WHERE <condition de recherche> ;

• L’option ALL est l’option par défaut qui permet de sélectionner l’ensemble des lignes satisfaisant
à la condition de recherche.

• L’option DISTINCT permet de ne conserver que des lignes distinctes, en éliminant les doublons.

• La liste des attributs indique la liste des colonnes choisies, séparées par des virgules. Pour
sélectionner l’ensemble des colonnes d’une table, il est possible d’utiliser l’option *.

• La liste des tables indique l’ensemble des tables (séparées par des virgules) sur lesquelles
portent les opérations.

• La condition de recherche permet d’exprimer des critères de recherche complexes à l’aide


d’opérateurs logiques et/ou de comparateurs arithmétiques.
89

Construction d'une requête SQL

Le raisonnement est le suivant :

Quoi ? quelles informations obtenir ?


Où ? dans quelles tables ?
Comment ? (jointures, restrictions…)
90
La projection
Une projection est une instruction permettant de
sélectionner un ensemble de colonnes dans une
table.

Notation :
R2 = PROJECTION R1(Nom-Champ, Nom-
Champ...)
Requête :
Afficher la liste des adhérents (Nom,
Prénom, Code postal, Ville)

En langage algébrique :
R1 = PROJECTION adhérents (Nom_adh,
Prénom_adh, Cp_adh, Ville_adh)

Quoi ? SELECT Nom_adh, Prénom_adh, Cp_adh, Ville_adh


Où ? FROM ADHERENT
91

La restriction
Une restriction consiste à sélectionner les lignes satisfaisant à une condition logique
effectuée sur leurs attributs. En SQL, les restrictions s'expriment à l'aide de la
clause WHERE suivie d'une condition.

Afficher la liste des adhérents (numéro, nom, prénom, index) dont l’index est
inférieur à 20

Quoi ? SELECT Num_adh, Nom_adh, Prénom_adh, Index_adh


Où ? FROM ADHERENT
Comment ? WHERE Index_adh < 20
no-film titre durée production cod
Soient les tables FILM et CATÉGORIE qui permettent de gérer une vidéothèque.
10 Camille Claudel 150 Gaumont CO
92
20 Fenêtre sur cour 120 FILM Pathé CO
Les jointures 25 no-filmSueurs
titrefroides 115
durée Pathé
production CO
code
50 10 Cendrillon 140 UGC DES
La jointure consiste à combiner deux tables ligne à ligne en vérifiant la concordance
64 20
Camille Claudel
Super Mondet
Fenêtre II
sur cour
150
10
120
Gaumont
Universal
Pathé
COMD
DO
COMD
65 25 La vie des froides
Sueurs coccinelles 60.
115 UGC
Pathé DO
COMD
entre certaines colonnes des deux tables. Autrement dit, cela permet de relier deux
71 50 Cendrillon
La guerre des étoiles I 140
120 UGC
Paramounth DESA
CO
64 Super Mondet II 10
Universal DOCU
tables
Exemple :
ayant un champ commun et de faire ...
65
correspondre
... les lignes
La vie des coccinelles 60.
qui …ont une
UGC
...
DOCU
Soient les tables FILM et CATÉGORIE qui permettent de gérer une vidéothèque.71 La guerre des étoiles I 120 Paramounth COMD
même valeur. ... ...
CATÉGORIE
… ...
FILM
code-catégorie libellé-catégorie
no-film titre durée production code-catégorie
COMD comédie dramatique
CATÉGORIE
10 Camille Claudel 150 Gaumont COMD DESAcode-catégorie dessin animé
libellé-catégorie
20 Fenêtre sur cour 120 Pathé COMD DOCUCOMD documentaire
comédie dramatique
25 Sueurs froides 115 Pathé COMD ... DESA ...
dessin animé
50 Cendrillon 140 UGC DESA DOCU documentaire
64 Super Mondet II 10 Universal On souhaiterait ...
DOCU avoir le titre des films ainsi que les ... libellés de leurs catégories
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des étoiles I 120 Paramounth On souhaiterait
algébrique avoir
En langageCOMD : le titre des films ainsi que les libellés de leurs catégories (
... ... … R1 = FILM ... CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
En langage algébrique :
R2 = R1
PROJECTION
= FILM
R1(titre, libellé-catégorie)
CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
CATÉGORIE
En langage algébrique : code-catégorie libellé-catégorie
R2 = PROJECTION R1(titre, libellé-catégorie)
Traduction en SQL :
COMD comédie dramatique
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
Traduction en SQL :
R1 = FILM CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie)
DESA dessin animé
FROMSELECT
FILM, CATÉGORIE
FILM.titre, CATÉGORIE.libellé-catégorie
DOCU documentaire
WHEREFROM FILM, CATÉGORIE = CATÉGORIE.code-catégorie;
FILM.code-catégorie
R2 = PROJECTION R1(titre, libellé-catégorie)
... ... WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie;

On souhaiterait avoir le titre des films ainsi que les libellés de leurs catégories (et non leur code…). RÉSULTAT REQUÊTE
RÉSULTAT REQUÊTE
titre libellé-catégorie
titre libellé-catégorie
Traduction
En langage algébrique en
: SQL : Camille Claudel
Camille Claudel
comédie dramatique
comédie dramatique
R1 = FILM CATÉGORIE (FILM.code-catégorie = CATÉGORIE.code-catégorie) Fenêtre sur cour comédie dramatique
Fenêtre sur cour comédie dramatique
R2 = SELECT
PROJECTIONFILM.titre, CATÉGORIE.libellé-catégorie
R1(titre, libellé-catégorie) Sueurs froides comédie dramatique
Sueurs froides comédie dramatique
Cendrillon
Cendrillon dessin animé
dessin animé
FROM
Traduction FILM,
en SQL : CATÉGORIE Super
SuperMondet
MondetIIII documentaire
documentaire
SELECT FILM.titre, CATÉGORIE.libellé-catégorie
FROM FILM, CATÉGORIE La vie des coccinelles
La vie des coccinelles documentaire
documentaire
WHERE FILM.code-catégorie = CATÉGORIE.code-
WHERE FILM.code-catégorie = CATÉGORIE.code-catégorie; La La guerre
guerre desdesétoiles
étoilesII comédie
comédie dramatique
dramatique
Remarque n°1 :
catégorie; RÉSULTAT REQUÊTE Remarque n°1 :
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de table
titre libellé-catégorie
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tab
93

Remarque n°1 :
Il est bien évidement possible de faire plusieurs jointures, autant qu’il y a de tables
à relier entre elles.

•Equijointure : le pivot utilise l’opérateur = (jointure naturelle)


•Thétajointure : le pivot utilise les opérateurs <, <=, >, >=, != ou <>
Remarque n°2 :
Il est possible d’utiliser des alias (pour simplifier) pour nommer une table
différemment dans la requête.

Par exemple :

SELECT F.titre, C.libellé-catégorie


FROM FILM F, CATÉGORIE C

WHERE F.code-catégorie = C.code-catégorie;


94
Jointure simple en SQL de base
COMMANDES (CNUM, FNOM, PNOM, QUANTITE)
Jointure simple en SQL de base
FOURNITURE (PNOM, PRIXA)
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)

•Requête: nom, prix dʼachat,


FOURNITURE (PNOM,fournisseur
FNOM, PRIXA)des Produits commandés par Paul
Algèbre : ! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul

Algèbre : !PNOM, PRIX, FNOM ( "CNOM= ʻPAULʻ (COMMANDES) (FOURNITURE))


En SQL de base :
En SQL de base :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES, FOURNITURE
WHERE CNOM = ’PAUL’
SELECT COMMANDES.PNOM, AND FNOM
PRIXA, COMMANDES.PNOM = FOURNITURE.PNOM
FROM COMMANDES,
En utilisant lesFOURNITURE
alias :
WHERE FNOM = ’PAUL’
SELECT AND COMMANDES.PNOM
COMMANDES.PNOM, PRIXA, FNOM = FOURNITURE.PNOM
FROM COMMANDES C, FOURNITURE F
WHERE CNOM = ’PAUL’ AND C.PNOM = F.PNOM
Remarques :
Remarques :
1- Cette requête
1- Cetteest équivalente
requête à une jointure
est équivalente naturelle.
à une jointure LesLes
naturelle. attributs
attributsde
de jointure sont
jointure sont
explicités.
explicités. 2- SELECT COMMANDES.PNUM, PRIXA, FNUM FROM COMMANDES, FOURNITURE équivaut
à un produit cartésien des 2 tables, suivi dʼune projection.
2- SELECT COMMANDES.PNUM, PRIXA, FNUM
FROM COMMANDES,
Bernard ESPINASSE FOURNITURE
- Le langage SQL 13

Équivaut à un produit cartésien des 2 tables, suivi d'une projection.


95

La clause INNER JOIN a fait son apparition avec la version 2 de SQL, parce que le besoin
s'était fait sentir de préciser à quel type de jointure appartenait une relation.

Plus précisément, on distingue :

•la jointure interne (INNER JOIN) : Ne sont incluses dans le résultat final que les lignes
qui se correspondent dans les deux tables.

•la jointure externe gauche (LEFT OUTER JOIN) : Toutes les lignes de la première table
sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la seconde table ;

•la jointure externe droite (RIGHT OUTER JOIN) Toutes les lignes de la seconde table
sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la première table.
96

Dans Access, la syntaxe des jointures gauche et droite est simplifiée en LEFT
JOIN et RIGHT JOIN, comme le montrent les deux exemples suivants :

SELECT Nom, Prénom, Adresse, commune, [code postal]


FROM Personnes LEFT JOIN Communes ON Communes.code_commune =
Personnes.Code_commune;

SELECT Nom, Prénom, Adresse, commune, [code postal]


FROM Personnes RIGHT JOIN Communes ON Communes.code_commune =
Personnes.Code_commune;

La jointure peut également être précisée dans la fenêtre graphique de définition


d'une requête.
97

Jointures dans SQL2


Jointures dans SQL2
Opérations de Jointure :
Opérations de Jointure :

SQL2 Opération Algèbre


R1 CROSS JOIN R2 produit cartesien R1 X R2
R1 JOIN R2 ON prédicat R1 R1.A<R2.B R2
théta-jointure
(R1 JOIN R2 ON R1.A<R2.B)

R1 FULL/LEFT/RIGHT OUTER R1 R2
R1.A<R2.B
JOIN R2 ON prédicat
théta-jointure
R1 R1.A<R2.B R2
externes
R1 R1.A<R2.B R2
R1 NATURAL JOIN R2 jointure naturelle R1 R2
R1 NATURAL FULL/LEFT/RIGHT R1 R2
OUTER JOIN R2 jointure externes R1 R2
R1 R2

Bernard ESPINASSE - Le langage SQL 14


98
Jointure en SQL2 : « INNER JOINT »
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)
FOURNITURE (PNOM, FNOM, PRIXA)

Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul

En SQL2 :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES INNER JOINT FOURNITURE ON COMMANDES.PNOM =
FOURNITURE.PNOM
WHERE CNOM = ’PAUL’

Remarques :
• INNER est facultatif dans la plupart des SGBDR
• Cette notation rend plus lisible la requête en distinguant clairement les conditions
de jointures, derrière ON, et les éventuelles conditions de sélection ou restriction,
derrière WHERE.
• L'oubli du ON empêche l'exécution de la requête (évite de lancer un couteux

produit cartésien en SQL de base)


99

Jointure « naturelle »:
Jointure naturelle

•but: créer toutesJointure


les combinaisonsnaturelle
significatives entre tuples de deux

• relations.
but: créer toutes les combinaisons significatives
•entre tuples
significatives de deux
= portent relations
la même valeur pour les attributs de même domaine
! – significatives = portent la même valeur pour les
attributs de même domaine !
•précondition: les deux relations ont au moins un attribut de même domaine
• précondition: les deux relations ont au moins un
attribut de même domaine
• exemple :
R A B S B C D R|X|S
a b b c d A B C D
b c a a b a b c d
c b d a c c b c d
100

JJointure
o i n t u rnaturelle
e naturelle
Exemple de jointure naturelle :
Table EMP : Table DEPT :
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris

Jointure naturelle : les tuples qui ne peuvent pas être joints sont éliminés :
EMPLOYE DEPT

Résultat :
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris

Bernard ESPINASSE - Le langage SQL 16


xemple de jointure naturelle :
101
Table EMP : Table DEPT :
EMPNO Jointure
DEPNO
en SAL: « NATURAL JOINT
SQL2 DEPNO» (1) DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Tables :
Karim 3 15000 4 Technique Paris
EMPLOYE (EMPNO, ENOM, DEPTNO, SAL)
DEPT (DEPNO, DNOM, LOC)
ointure naturelle : les tuples qui ne peuvent pas être joints sont éliminés :
EMPLOYE DEPT

Requête: Noms des départements avec les noms de leurs employés :


En SQL de base : Résultat :
SELECT DNOM,
EMPNO ENOM DEPNO SAL DNOM LOC
FROM DEPTTomNATURAL JOIN1 EMP 10000 Commercial Marseille
Jim 2 20000 Administration Paris
Remarques :
1. Comme en algèbre DEPT NATURAL JOIN EMP fait la jointure naturelle (sur lʼattribut DEPNO)

2. lʼattribut DEPNO nʼapparaît quʼune seule fois dans la table résultat.


rnard ESPINASSE - Le langage SQL 16
102

Jointure en SQL2 : « NATURAL JOINT » (2)


Tables :
COMMANDES (CNUM, CNOM, PNOM, QUANTITE)
FOURNITURE (PNOM, FNOM, PRIXA)

! Requête: nom, prix dʼachat, fournisseur des Produits commandés par Paul
En SQL de base :

SELECT COMMANDES.PNOM, PRIXA, FNOM


FROM COMMANDES, FOURNITURE
WHERE CNOM = ’PAUL’ AND COMMANDES.PNOM = FOURNITURE.PNOM

On a une jointure naturelle car les attributs de jointure ont le même nom

En SQL2 :
SELECT COMMANDES.PNOM, PRIXA, FNOM
FROM COMMANDES NATURAL JOINT FOURNITURE WHERE CNOM = ’PAUL’

Remarque :

• Il est possible de restreindre ou préciser le ou les attributs de jointure avec USING PNOM
103
Bernard ESPINASSE - Le langage SQL 17 Bern

Auto-Jointure (1)
- Il est possible de joindre une table sur elle-même dans une jointure réflexive
- nécessite l'utilisation de synonymes pour les relations
Auto-Jointure (1) Au
Table
Table EMPLOYE
EMPLOYE (EMPNO,
(EMPNO, ENOM,
ENOM, DEPTNO,
DEPTNO, SAL) SAL) T
! Requête: Nom et Salaire des Employés gagnant plus que l'employé de numéro 12546
! Requête: Nom et Salaire des Employés gagnant plus que lʼemployé de numéro 12546 ! R
Algèbre
Algèbre : :
En
R1 := !SAL ( "EMPNO=12546 (EMPLOYE) Récupération Salaire

R2 := !ENOM, EMPLOYE.SAL (EMPLOYE) ((EMPLOYE.SAL>R1.SAL) (R1))

EndeSQL
En SQL basede: base :
Re
SELECT
SELECT E1.ENOM,
E1.ENOM, E1.SAL
E1.SAL
FROM EMPLOYE E1, EMPLOYE E2
FROM
WHERE EMPLOYE
E2.EMPNO E1, EMPLOYE
= 12546 AND E2
E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546 AND E1.SAL > E2.SAL
Remarque :

E1Remarque
et E2 sont 2: instances différentes de la table EMPLOYE
((EMPLOYE.SAL>R1.SAL) (R1))

E1 et E2 sont 2 instances différentes de la table EMPLOYE


104

Auto-Jointure (2)

Table FOURNISSEUR (FNOM, STATUT, VILLE)

! Requête: Fournisseurs qui habitent deux à deux dans la même ville

En SQL de base :
SELECT PREM.FNOM, SECOND.FNOM
FROM FOURNISSEUR PREM, FOURNISSEUR SECOND
WHERE PREM.VILLE = SECOND.VILLE
AND PREM.FNOM < SECOND.FNOM

Remarques :
1. PREM et SECOND sont 2 instances différentes de FOURNISSEUR

2. la 2° condition permet d'éliminer les paires (x,x) et éviter d'obtenir à la fois (x,y) et (y,x)
106

Theta-jointure : JOINT ... ON prédicat


Theta-jointure : JOINT … ON prédicat
Table EMPLOYE(EMPNO, ENOM, DEPNO, SAL)
Table EMPLOYE(EMPNO, ENOM, DEPNO, SAL)

EMPLOYE1 [E1.SAL > E2.SAL] EMPLOYE2

! Requête: Nom et salaire des employés gagnant plus que lʼemployé 12546
! Requête: Nom et salaire des employés gagnant plus que l'employé 12546
(AUTOJOINTURE)
(AUTOJOINTURE)
SELECT E1.ENOM, E1.SAL
SELECT E1.ENOM, E1.SAL
FROM EMPLOYE
FROM E1 JOIN
EMPLOYE E1EMPLOYE E2
JOIN EMPLOYE E2 ON E1.SAL > E2.SAL
ON E1.SAL > E2.SAL
WHERE
WHERE E2.EMPNO
E2.EMPNO = 12546
= 12546
107

Jointures externes

• But: créer toutes les combinaisons significatives entre tuples de deux


relations

• Mettre
Jointures externes
en évidence les tuples qui n’apparaissent que dans une table
• but:(gauche
créer toutes les combinaisons significatives entre
ou droite)
tuples de deux relations •
•– Valeuren
Mettre NULL pourles
évidence lestuples
table (gauche ou droite)
attributs de l’autre tableque dans une
qui n’apparaissent

– Valeur NULL pour


au les attributs de l’autre
de table

•précondition: au moins un attribut de même domaine
Précondition: moins un attribut même domaine

• exemple
exemple: :

R|gX|S
R A B S B C D
a b b c d A B C D
b c a a b a b c d
c b d a c b c Null
c b c d
Q
108

Jointure externe pleine : FULL OUTER JOIN


Jointure externe pleine : FULL OUTER JOINT
Table EMP : Table DEPT ::
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris

• les tuples qui ne peuvent pas être joints ne sont pas éliminés.
• On garde tous les tuples des 2 tables
EMP DEPT
SQL:
EMP NATURAL FULL OUTER JOIN DEPT
Résultat :
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial. Marseille
Jim 2 20000 Administration Paris
Karim 3 15000 NULL NULL
NULL 4 NULL Technique. Paris

Bernard ESPINASSE - Le langage SQL 23


109

Jointure externe droite/gauche : LEFT/RIGHT OUTER JOIN


Jointure externe droite/gauche : LEFT/RIGHT
OUTER JOIN
Table EMP : Table DEPT ::
EMPNO DEPNO SAL DEPNO DNOM LOC
Tom 1 10000 1 Commercial Marseille
Jim 2 20000 2 Administration Paris
Karim 3 15000 4 Technique Paris
• Jointure externe gauche: On garde tous les n-uplets de la première table (gauche) :
EMP NATURAL LEFT OUTER JOIN DEPT
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris
Karim 3 15000 NULL. NULL.
• Jointure externe droite: On garde tous les n-uplets de la deuxième table (droite) :
EMP NATURAL RIGHT OUTER JOIN DEPT
EMPNO DEPNO SAL DNOM LOC
Tom 1 10000 Commercial Marseille
Jim 2 20000 Administration Paris
NULL 4 NULL Technique Paris

Bernard ESPINASSE - Le langage SQL 24


110

Jointures et théta-jointures externes dans SQL2

Jointures (équi-jointures) externes :


• R1 NATURAL FULL OUTER JOIN R2 : Remplir R1.* et R2.* avec NULL quand
nécessaire
• R1 NATURAL LEFT OUTER JOIN R2 : Remplir R2.* avec NULL quand nécessaire
• R1 NATURAL RIGHT OUTER JOIN R2 : Remplir R1.* avec NULL quand nécessaire

Théta-Jointures externes :
Elles sont définies de façon similaire :

• R1 FULL OUTER JOIN R2 ON prédicat


• R1 LEFT OUTER JOIN R2 ON prédicat

• R1 RIGHT OUTER JOIN R2 ON prédicat


MPNO J o i n t1uDEPNO
r e e x10000
t e r nSAL
e p l e i n e : F U L L 1DEPNO
O U T E R J Commercial
OINT DNOM 111
Ma
Tom 2 1 Table 10000
EMP
20000 : 2 1 Commercial
TableAdministration
DEPT :: M
P
Jim EMPNO3 2DEPNO SAL
20000
1500010000
DEPNO
4 2 DNOM Administration
LOC
Technique P
Tom 1 1 Commercial Marseille
Karim Jim 3 2 15000
20000 2
4 Administration Technique
Paris
Karim 3 15000 4 Technique Paris
les qui ne peuvent pas être joints ne sont pas éliminés.
s tuples qui ne peuvent pas êtrejoints
joints ne sont pas éliminés.
de tous
• les les tuples
tuples
les tuples qui
qui ne des 2pas
peuvent tables
pas être ne sont pas éliminés.
être joints ne sont pas éliminés. • On garde tous les tuples
n garde
• On tous
garde les
tous tuples
les tuplesdes
des 22tables
tables
des 2 tables EMP
EMP
DEPT
DEPT
EMP DEPT
SQL:
: SQL:
EMP NATURAL FULL OUTER JOIN DEPT
NATURAL FULL OUTER JOIN DEPT
MP NATURAL
EMP NATURAL FULLFULL OUTER
OUTER JOIN JOIN DEPT
Résultat
DEPT : :
Résultat
EMPNO DEPNO RésultatSAL : DNOM LOC
Tom 1
Résultat :
10000 Commercial. Marseille
EMPNO DEPNO SAL DNOM LOC
EMPNO Jim DEPNO
2 20000 SAL
AdministrationDNOM
Paris LOC
Tom Karim 1 3 10000 NULL
15000 Commercial. NULL Marseille
Tom 1 10000 Commercial. Marseille
Jim NULL 2 4 NULL Technique.
20000 Administration Paris Paris
Jim 2 20000 Administration Paris
Karimlangage SQL
Bernard ESPINASSE - LeKarim
3 15000 NULL NULL
3 15000 NULL NULL
23
NULL NULL 4 4 NULLNULL Technique.
Technique. Paris
Paris
112

Theta-jointure
a-jointure : JOINT … ON prédicat
MPLOYE(EMPNO,Table
ENOM, DEPNO, SAL)
EMPLOYE(EMPNO, ENOM, DEPNO, SAL)

EMPLOYE1 [E1.SAL > E2.SAL] EMPLOYE2

Requête: Nom et salaire des employés gagnant plus que lʼemployé 12546
e: Nom et salaire des employés gagnant plus que lʼemployé 12546
(AUTOJOINTURE)
OINTURE)
SELECT E1.ENOM, E1.SAL
FROM EMPLOYE E1 JOIN EMPLOYE E2 ON E1.SAL > E2.SAL
WHERE E2.EMPNO = 12546
T E1.ENOM, E1.SAL
EMPLOYE E1 JOIN EMPLOYE E2
.SAL > E2.SAL
E2.EMPNO = 12546
113
115

Le tri
Avec SQL il est possible d’effectuer des tris selon différents critères grâce à la
clause ORDER BY et aux mots clés ASC, DESC. Par défaut le tri est par ordre

croissant.
Afficher la liste des adhérents (nom, prénom, code postal, ville)
dans l’ordre alphabétique du nom.
Tri sur le nom

Quoi ? SELECT Nom_adh, Prénom_adh, Cp_adh,


Ville_adh
Où ? FROM ADHERENT
ORDER BY Nom_adh
116
Les Fonctions Statistiques
Le langage SQL offre la possibilité de récupérer des données chiffrées sur des tables ou
des vues .
On peut par exemple obtenir le nombre de tuples répondant à un critère de sélection avec
la fonction COUNT , la valeur moyenne d’une colonne avec la fonction AVG , la valeur
maximale ou minimale et la somme d’une colonne avec les fonctions MAX , MIN et SUM
.

=> Compter le nombre de dépôts où le produit N° 122 est stocké

SELECT COUNT(*) AS Compte FROM STOCKER WHERE [ N_Produit# ] = 122

=> Calculer la somme globale , la moyenne , le maximum et le minimum des quantités stockées du
produit N° 122

SELECT SUM ( Qté_Stockée ) , AVG ( Qté_Stockée ) , MAX ( Qté_Stockée ) , MIN (


Qté_Stockée )
FROM STOCKER WHERE [ N_Produit# ] = 122

=> Compter les noms de produits différents

SELECT COUNT ( DISTINCT Libellé_Produit ) AS Compte FROM Produit


COMMANDE SELECT : Les Regroupements 117

On appelle « Groupe » un ensemble de lignes ( tuples ) dans une relation qui possèdent une valeur identique dans
une ou plusieurs colonnes . Cette colonne ( ou ensemble de colonnes ) peut être définie comme un
« facteur de regroupement » à l’aide de la clause « GROUP BY » de la commande SELECT .
SQL permet alors d’effectuer des calculs sur les autres colonnes ( qui ne sont pas des facteurs de regroupement )
en utilisant les fonctions statistiques ( fonctions d’agrégation ) : COUNT , SUM , AVG, MAX et MIN .
La clause « HAVING » permet d’appliquer une condition de sélection ( restriction ) à chaque groupe dans la
relation résultat de la requête au niveau des colonnes de regroupements et / ou de calcul .
Remarque : Dans la commande SELECT , les colonnes de calcul sont toujours spécifiées dans la liste des
attributs de projection . Toutes les autres colonnes ( non calculées ) figurant dans cette liste sont alors
considérées comme des facteurs de regroupement et doivent figurer dans la clause « GROUP BY » .

=> Liste du nombre de produits par type de produit


SELECT TYPE_Produit , COUNT(*) AS [Nombre articles ] FROM PRODUIT
GROUP BY TYPE_Produit ORDER BY 1 ;
=> Liste des N° de produits stockés dans plus de 2 dépôts
SELECT [ N_Produit# ] , COUNT(*) AS [Nombre dépôts] FROM STOCKER
GROUP BY [ N_Produit# ]
HAVING COUNT(*) > 2 ORDER BY 1 ;
=> Lister les dépôts de la ville de Rabat dont la valeur marchande est supérieure à 100 000 DH
SELECT Nom_Dépôt , SUM ( Prix_U*Qté_Stockée ) As [ Valeur en DH ]
FROM Dépôt As D , Stocker As S , Produit As P
WHERE D.N_Dépôt = S.[N_Dépôt#] AND S.[N_Produit#] = P.N_Produit AND Ville = ‘ Rabat ’
GROUP BY Nom_Dépôt
HAVING SUM ( Prix_U*Qté_Stockée ) > 100 000 ORDER BY 2 DESC
118

Les regroupement
Intérêt des regroupements
Clause de regroupement et opérateurs de regroupement pour
des requêtes avec comptage, comme :
•Moyenne des élèves qui ont candidaté en GI?
•Nombre de candidatures pour chaque université́ ?

Syntaxe d’une requête SQL avec regroupement :

SELECT att1 [, att2 [ AS att2′ ], ... ]


FROM nom_table1 [, nom_table2 [ alias ]] [ WHERE
condition ]
GROUP BY attk, attl, ...
[ ORDER BY atti, ...];
119

Le group by, exécuté́ après le where, indique de procéder à une répartition


du résultat en groupes de n-uplets :
•Deux n-uplets sont dans un groupe s’ils ont mêmes valeurs sur les attributs
attk , attl , . . .
•Si deux n-uplets sont dans deux groupes, alors il y a au moins un attribut
parmi attk , attl , . . . pour lequel ils ont une valeur différente

Conséquences du regroupement :
•La requête ne renvoie qu’un seul n-uplet par groupe
•Le select et le order by ne peuvent utiliser que des attributs présents dans le
group by
•Dans un groupe, la valeur pour les attributs du group by est fixe, on peut donc
l’utiliser
•Mais la valeur pour les autres attributs peut varier, d’où leur utilisation directe
impossible (quelle valeur utiliser ?)
idE nomU departement decision
120
⇤)
123 INSA informatique O

SELECT
Déroulement pas à pas nomU,
de la requête COUNT( :
FROM C
avec regroupement
123
123
123
UCB
UCB
UJM
Opérateurs ensemblistes
234 INSA
electronique
informatique
electronique
N
O
O
biologie Sous-requêtes
N Regrou

GROUP
SELECT nomU, COUNT(∗) BYC nomU
FROM ORDER
GROUP BY BY nomU
nomU Opérateur ; (6)
COUNT
345
345
345
345
UJF
UJM
UJM
UJM
bioinformatique
bioinformatique
electronique
informatique
O
N
N
O

ORDER BY nomU ; 543


678
765
UJF
UCB
UCB
informatique
histoire
Déroulement pas à pas de la requête
histoire
N
O
O
765 UJM histoire N

SELECT nomU, COUNT(⇤)


765 UJM psychologie O
idE nomU departement decision 876
876
UCB
UJF
informatique
biologie
N
O
123 INSA informatique O 876 UJF GROUP BY nomU ORDER
biologie marine N
898 INSA informatique O
123 UCB electronique N 898 UCB informatique O

idE aux nomU departement decision


123 UCB informatique O LIF4 - Initiation
123
Bases de Données
INSA
et Réseaux // SQL
informatique O
partie 2

123 UCB electronique N


123 UJM electronique O 123 UCB informatique O
123 UJM electronique O
234 INSA biologie N 234 INSA biologie N
345 UJF bioinformatique O
345 UJF bioinformatique O 345 UJM bioinformatique N
SELECT
345 nomU, COUNT(∗)
UJM bioinformatique N
345 UJM electronique N
345 UJM informatique O
nomU count
543 UJF informatique N
345 UJM electronique N
FROM C GROUP BY nomU ORDER BY nomU ; UJM
678
6
765
UCB
UCB
histoire
histoire
O
O
345 UJM informatique O
)
765 UJM histoire N
UCB 6
765 UJM psychologie O
543 UJF informatique N 876 UCB informatique N
UJF 4
876 UJF biologie O
678 UCB histoire O 876 UJF biologie marine N
INSA 3
898 INSA informatique O
765 UCB histoire O 898 UCB informatique O

765 UJM histoire N LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2

765 UJM psychologie O


SELECT
876 nomU, COUNT(
UCB ∗) FROM NC
informatique
876 UJF biologie O
GROUP
876 BY
UJF nomUbiologie
ORDER BY nomU
marine N ;
898 INSA informatique O
898 UCB informatique O

4 - Initiation aux Bases de Données et Réseaux // SQL partie 2


SELECT nomU, COUNT(⇤) FROM C 121
SELECT nomU, COUNT(∗) FROM C
GROUP BY nomU ORDER BY nomU ;
GROUP BY nomU ORDER BY nomU ;
idE nomU departement decision
123 INSA informatique O
123 UCB electronique N
123 UCB informatique O
123 UJM electronique O
234 INSA biologie N
345 UJF bioinformatique O
345 UJM bioinformatique N
nomU count nomU count
345 UJM electronique N
UJM 6 INSA 3
345 UJM informatique O
543 UJF informatique N ) UCB
UJF
6
4
) UCB
UJF
6
4
678 UCB histoire O
INSA 3 UJM 6
765 UCB histoire O
765 UJM histoire N
765 UJM psychologie O
876 UCB informatique N
876 UJF biologie O
876 UJF biologie marine N
898 INSA informatique O
38/66
898 UCB informatique O

LIF4 - Initiation aux Bases de Données et Réseaux // SQL partie 2 UCBL Lyon 1
122

Langage SQL : opérations ensemblistes

Test sur les groupes Langage SQL : fonctions d’agrégat et regroupements

Exemple
Permet de sélectionner des groupes de la requête
de regroupement. select ville , sum(age) total
from client
Exemple : Langage SQL : opérations ensemblistes
group by ville;
Langage SQL : fonctions d’agrégat et regroupements

Test sur les groupes


Nom Client Prenom Age Ville
Permet de sélectionner des groupes de la requête de
select ville, avg(age) moyenne from client Dupont Jean 52 Tours
regroupement.
Duval Paul 25 Tours
group by ville having avg(age) < 40;
Exemple : Martin Martine 39 Blois
Bon Jean 41 Blois
select ville , avg(age) moyenne
from client Résultat :
group by ville Ville Total
having avg(age) < 40;
Tours 77
Résultat : Blois 80
Ville Moyenne
Sébastien Limet, Denys Duchier Langage SQL (2)

Résultat : Tours 38.5

Sébastien Limet, Denys Duchier Langage SQL (2)


123

Différence entre where et having

Trouver pour chaque ville la moyenne d’âge des personnes de moins de 40 ans :
select ville, avg(age) agm
from client
where age < 40 group by ville;

Trouver les villes dont l’âge moyen des habitants est inférieur à 40 ans :
select ville, avg(age) agm
from client
group by ville
having avg(age) < 40;

• where sélectionne les lignes de la requête avant de faire les groupes. Il agit
donc avant les regroupements

• having sélectionne les groupes une fois qu’ils sont constitués. Il agit donc après

les regroupements
124
Les regroupements de regroupements.
Quel est le regroupement qui a la plus grande valeur ?
Pour certaines questions, on voudrait faire un regroupement de regroupement. Par
exemple : Quel est le plus gros chiffre d'affaires réalisé par un commercial ?

SELECT MAX(SUM(MontantTTC)) FROM Ventes GROUP BY Commercial_id ;

Malheureusement, cette formulation ne marche pas :


On va donc décomposer en deux requêtes. Le résultat de la première requête sera
stocké dans une vue.
Requête 1 : elle calcule le chiffre d'affaires par commercial.

CREATE VIEW requête1 AS SELECT SUM(MontantTTC) as ChiffreAffaires FROM


Ventes GROUP BY Commercial_id ;

Requête 2 : elle affiche le maximum.


SELECT MAX(ChiffreAffaires) FROM requête1;
125

Notion de vue

• Permet de donner un nom à une requête qui sera utilisée ensuite comme
une table (pour la consultation)

• Les vues peuvent être considérées comme des tables virtuelles.

• à chaque appel de la vue la requête est réexécutée

• Attention : ce n’est pas une vraie table !

• La variante ⟨vue⟩(⟨cols⟩) permet de renommer les colonnes

La syntaxe pour la création d’une vue est comme suit :


CREATE VIEW "nom de vue" AS "instruction SQL";
126
La sélection : exemples

Permet d’extraire les lignes d’une table qui vérifient la réalisation d’une certaine condition (on
parle parfois de critère).

Notation :

R2 = SELECTION R1(Expression conditionnelle)


R1 et R2 sont deux relations, entre parenthèses figure le critère de sélection.

En langage algébrique :

R1 = SELECTION FILM(production = "Path")


R2 = PROJECTION R1(titre)
127
Relation utilisée : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Poids , Couleur )

* Liste des données sur les produits dont le poids est supérieur à 15 Kg
SELECT * FROM Produit WHERE Poids > 15 ;

* Liste des libellés de produits différents dont le poids est compris entre 15 et 40 Kg
SELECT DISTINCT Libellé _Produit FROM Produit WHERE Poids BETWEEN 15 AND 40 ;

* Liste des produits dont le poids n’est pas compris entre 15 et 40 Kg et dont la couleur est
verte , rouge ou bleue
SELECT * FROM Produit
WHERE Poids NOT BETWEEN 15 AND 40
AND Couleur IN ( ‘Vert’, ‘Rouge’, ‘Bleu’ ) ;

* Liste des produits dont dont la couleur est verte ou bleue


SELECT * FROM Produit
WHERE Poids NOT BETWEEN 15 AND 40
AND Couleur =‘Vert’ or Couleur = ‘Bleu’;

* Liste des produits dont le libellé ne commence pas par la lettre D


SELECT * FROM Produit WHERE Libellé _Produit NOT LIKE ‘D%’

* Liste des produits dont la couleur est renseignée


SELECT * FROM Produit WHERE Couleur IS NOT NULL ;

* Liste des produits dont la couleur est n’est pas renseignée


SELECT * FROM Produit WHERE Couleur IS NULL ;
128
Les Sélections avec sous-requête
Schéma relationnel : DEPOT ( N_Dépôt, Nom_Dépôt, Ville )
STOCKER ( N_Dépôt # , N_Produit # , Qté_Stockée )
PRODUIT ( N_Produit , Libellé_Produit , Prix_U, Poids, Couleur )

•Sous-requête renvoyant une seule valeur ( relation à une seule ligne et une seule colonne ) :

Liste des dépôts situés dans la même ville que le dépôt N° 12


SELECT Nom_Dépôt FROM Dépôt
WHERE Ville = ( SELECT Ville FROM Dépôt WHERE N_Dépôt = 12 )
Liste des produits dont le prix unitaire est supérieur à celui du produit N° 36
SELECT Libellé_Produit FROM Produit
WHERE Prix_U > ( SELECT Prix_U FROM Produit WHERE N_Produit = 36 )

•Sous-requête renvoyant plusieurs valeurs ( relation à une seule colonne et plusieurs lignes ) :

L’opérateur : IN
Liste des produits dont la couleur est la même que celle de l’une des tables
SELECT Libellé_Produit FROM Produit
WHERE Couleur IN ( SELECT Couleur FROM Produit WHERE Libellé_Produit = ‘Table’ )
Liste des produits dont le prix unitaire est différent de celui de toutes les armoires
SELECT Libellé_Produit FROM Produit
WHERE Prix_U NOT IN ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = ‘Armoire’ )
129
Les Sélections avec sous-requête (suite 1)
* Sous-requête renvoyant plusieurs valeurs ( relation à une seule colonne et plusieurs lignes ) :

Les opérateurs : ANY et ALL


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.
La forme ( = ANY ) est équivalente à la forme ( IN )
Les formes ( <> ANY ) et ( <> ALL ) sont équivalentes à la forme ( NOT IN )
=> Liste des produits dont le prix unitaire est inférieure à celui de l’armoire la plus chère
SELECT Libellé_Produit FROM Produit
WHERE Prix_U < ANY ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = ‘Armoire’ )
=> Liste des produits dont le prix unitaire est inférieure à celui de l’armoire la moins chère
SELECT Libellé_Produit FROM Produit
WHERE Prix_U < ALL ( SELECT Prix_U FROM Produit WHERE Libellé_Produit = ‘Armoire’ )

* Sous-requête renvoyant plusieurs colonnes ( relation à une plusieurs colonnes ) :

=> Liste des produits dont le poids et la couleur sont identiques à ceux de l’article N° 125
SELECT Libellé_Produit FROM Produit
WHERE ( Poids , Couleur ) = ( SELECT Poids , Couleur FROM Produit WHERE N_Produit = 125 )
130
COMMANDE SELECT : Les Sélections ( restrictions ) avec sous-requête (suite 2)

* Sous-requête renvoyant au moins 1 ligne ( relation à 1 ou plusieurs colonnes comportant au moins 1 ligne ) :

L’opérateur : EXISTS
=> Liste des produits stockés dans au moins un dépôt avec une quantité supérieure à 1000 unités ?
SELECT Libellé_Produit FROM Produit AS P
WHERE EXISTS ( SELECT * FROM STOCKER WHERE [N_Produit#] = P. N_Produit
AND Qté_Stockée > 1000 )
=> Liste des produits qui ne sont stockés dans aucun dépôt ?
SELECT Libellé_Produit FROM Produit AS P
WHERE NOT EXISTS ( SELECT * FROM STOCKER WHERE [N_Produit#] = P. N_Produit )

* Sous-requêtes multiples

Lorsque les attributs de projection appartiennent tous à la requête principale , on peut utiliser plusieurs
sous-requêtes imbriquées au lieu d’utiliser des jointures
=> Liste des produits ( Libellé, Prix_U et Poids ) stockés à Tanger dans le dépôt ‘Grossisterie Znibar‘ ?
SELECT Libellé_Produit, Prix_U, Poids FROM Produit
WHERE N_Produit IN ( SELECT [ N_Produit# ] FROM STOCKER
WHERE [ N_Dépôt# ] IN ( SELECT N_Dépôt FROM Dépôt
WHERE Ville = ‘Tanger’
AND Nom_Dépôt = ‘Grossisterie Znibar’ )
D. Autres opérateurs (ensemblistes) 132

Les opérations portant sur des ensembles


D.1. L’union (ou / or)
L’algèbre relationnelle permet l’utilisation d’opérateurs ensemblistes. Il
en existe trois : L’union consiste à combiner deux relations (compatibles) pour créer une
troisième relation qui contient toutes les occurrences appartenant à l’une ou à
•INTERSECT,
UNION, l’autre des relations de départ.

•EXCEPT. Notation :
• R3 = R1 R2
Ou
R3 = UNION (R1, R2)

L’union (ou / Instructions


or) SQL :
SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table1
L’union consiste à combiner deux relations (compatibles) pour créer une
UNION
SELECT Nom-Champ, Nom-Champ, …
troisième relation qui contient toutes les occurrences appartenant à l’une ou à
FROM Nom-Table2;

l’autre des relations de départ.


On peut utiliser UNION [ALL] pour avoir toutes les lignes communes aux deux tables (y compris celles
en double), sans cela les doublons sont éliminés.

Instructions SQL :
Notation : SELECT
Ch.1 - Algèbre Relationnelle, Introduction Nom-Champ,
au Langage SQL.doc page 7 / Nom-Champ,
10 ... om (2001-2005)
R3 = R1 ∪ R2
FROM Nom-Table1
Ou
UNION
R3 = UNION (R1, R2)
SELECT Nom-Champ, Nom-Champ, ...

FROM Nom-Table2;
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves d

ANGLAIS
133
Soient les tables nocandidat nomcandidat prénomcandidat numétablissement
ExempleANGLAIS
: et ESPAGN qui permettent de gérer les candidats à des épreuves de
10123 DUPONT Patrick 94010
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de langue.
langue. 10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
ANGLAIS
10405 MAGNAN Hélène 75250
nocandidat nomcandidat prénomcandidat numétablissement
10123 DUPONT
10505
Patrick
SERRES
94010
Sylvia 94010
10216 GRANGETTE Didier 75100
ESPAGN
10309 HERISSON Patrick 94010
nocandidat nomcandidat prénomcandidat numétablissement
10405 MAGNAN Hélène 75250
10025 ACQUINO Patricia 91260
10505 SERRES Sylvia 94010
10216 GRANGETTE Didier 75100
10505
ESPAGN SERRES Sylvia 94010
nocandidat nomcandidat prénomcandidat numétablissement
On souhaiterait obtenir la liste des candidats passant les épreuves d’anglais ou d’espagn
10025 ACQUINO Patricia 91260
des deux tables) (sans doublons).
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
En langage algébrique :
R1 = ANGLAIS ESPAGN
On souhaiterait obtenir la liste des candidats passant les épreuves d’anglais ou d’espagnol (l’union
On souhaiterait obtenir
des deux tables) la liste
(sans des candidats passant les épreuves d’anglais ou d’espagnol
doublons).
Traduction en SQL :
(l’union desEndeux tables)
langage (sans
algébrique : doublons).
SELECT *
R1 = ANGLAIS ESPAGN
FROM ANGLAIS
UNION
En langageTraduction
algébriqueen SQL :
: R1 = ANGLAIS ∪ ESPAGN
SELECT *
FROM ESPAGN;
SELECT *
Traduction en SQL :
FROM ANGLAIS
RÉSULTAT REQUÊTE
UNION
nocandidat nomcandidat prénomcandidat numétablissement
SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN;
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
UNION 10309
RÉSULTAT REQUÊTE
10405
HERISSON
MAGNAN
Patrick
Hélène
94010
75250
nocandidat nomcandidat prénomcandidat numétablissement
10505 SERRES Sylvia 94010
SELECT * 10123
10216
DUPONT
GRANGETTE
Patrick
10025
Didier
94010
ACQUINO
75100 Patricia 91260
10309 HERISSON Patrick 94010
FROM ESPAGN; 10405
10505
MAGNAN Hélène
D.2. L’intersection
SERRES Sylvia
75250
(et 94010
/ and)
10025 ACQUINO Patricia 91260

L’intersection consiste à combiner deux relations (compatibles) pour créer une


10505 SERRES Sylvia 94010
10025 ACQUINO Patricia 91260
134
L’intersection (etD.2.
/ and)
L’intersection (et / and)

L’intersection consiste
L’intersection àconsistecombiner deux (compatibles)
à combiner deux relations relations pour créer une
troisième relation qui contient toutes les occurrences appartenant à l’une et à
(compatibles) pour l’autre
créer une troisième
des relations de départ. relation qui contient
toutes les occurrences appartenant à l’une et à l’autre des
Notation :
R3 = R1 R2
relations de départ. Ou
R3 = INTERSECTION (R1, R2)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, …
Notation : FROM Nom-Table1
R3 = R1 ∩ R2 INTERSECT
SELECT Nom-Champ, Nom-Champ, …
Ou FROM Nom-Table2;
R3 = INTERSECTION (R1, R2)
Ch.1 - Algèbre Relationnelle, Introduction au Langage SQL.doc page 8 / 10 om (2001-2005)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table1
INTERSECT
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2;
Exemple :
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de lang
135
Exemple :
Soient les tables ANGLAIS
Soient et ESPAGN
les tables ANGLAIS quiquipermettent
et ESPAGN permettent dede gérer
gérer lesANGLAIS
les candidatscandidats à des
à des épreuves épreuves de
de langue.
nocandidat nomcandidat prénomcandidat numétablissement
10123 ANGLAIS DUPONT Patrick 94010
langue. 10216 prénomcandidat
GRANGETTEnumétablissement
Didier 75100
nocandidat nomcandidat
10123 DUPONT 10309 Patrick HERISSON 94010 Patrick 94010
10216 GRANGETTE 10405 Didier MAGNAN 75100Hélène 75250
10309 HERISSON10505 Patrick SERRES 94010Sylvia 94010
10405 MAGNAN Hélène 75250
10505 SERRES Sylvia 94010 ESPAGN
nocandidat nomcandidat prénomcandidat numétablissement
10025 ESPAGNACQUINO Patricia 91260
nocandidat nomcandidat 10216 prénomcandidat
GRANGETTEnumétablissement
Didier 75100
10025 ACQUINO 10505 Patricia SERRES 91260Sylvia 94010
10216 GRANGETTE Didier 75100
10505 On SERRES
souhaiterait obtenir souhaiterait obtenir
Sylvia 94010 la liste des candidats passant les épreuves d’anglai
d’espagnol (l’intersection des deux tables).
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les épreuves d’anglais et
d’espagnol (l’intersectionEn langage
des algébrique :
deux tables).
R1 = ANGLAIS ESPAGN
On souhaiteraitEnobtenir
langage souhaiterait
algébrique : obtenir la liste des candidats passant les épreuves d’anglais
R1 = ANGLAIS ESPAGN Traduction en SQL :
et d’espagnol (l’intersection des deux tables).
SELECT *
Traduction en SQL :
FROM ANGLAIS
En langage algébrique
SELECT *
: R1 = ANGLAIS ∩ ESPAGN
INTERSECT
FROM ANGLAIS SELECT *
INTERSECT FROM ESPAGN;
Traduction en SQL : *
SELECT
FROM ESPAGN; RÉSULTAT REQUÊTE
nocandidat nomcandidat prénomcandidat numétablissement
SELECT * 10216 GRANGETTE
RÉSULTAT REQUÊTE Didier 75100
FROM ANGLAIS nocandidat 10505 prénomcandidat
nomcandidat SERRES Sylvia
numétablissement 94010
10216 GRANGETTE Didier 75100
INTERSECT 10505 SERRES Sylvia 94010
SELECT * D.3. La différence (non / not)
D.3. La différence (non / not)
FROM ESPAGN; La différence consiste à combiner deux relations
(compatibles) pour créer une troisième relation qui
La différence consistecontient toutes les
à combiner occurrences
deux relationsappartenant à l’une des
relations
(compatibles) pour créer une et non contenues
troisième relationdans
qui l’autre des relations de
D.3. La différence (non / not) 136

La différence (non / not)


La différence consiste à combiner deux relations
(compatibles) pour créer une troisième relation qui
contient toutes les occurrences appartenant à l’une des
La différence consiste à noncombiner
relations et contenues dansdeux relations
l’autre des relations de
départ. Deux différences sont possibles.
(compatibles) pour créer une troisième relation qui contient
Notation :
toutes les occurrences appartenant
R3 = R1 - R2 R3 = R2à– l’une
R1 des relations et
Ou
non contenues dans R3l’autre des relations
= DIFFERENCE (R1, R2) de R3
départ. Deux (R1, R2)
= DIFFERENCE

Instructions SQL :
différences sont possibles.
SELECT Nom-Champ, Nom-Champ, … SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table2 FROM Nom-Table1
Notation : MINUS MINUS
SELECT Nom-Champ, Nom-Champ, … SELECT Nom-Champ, Nom-Champ, …
FROM Nom-Table1; FROM Nom-Table2;
R3 = R1 - R2 R3 = R2 – R1

Ou Ch.1 - Algèbre Relationnelle, Introduction au Langage SQL.doc page 9 / 10 om (2001-2005)

R3 = DIFFERENCE (R1, R2) R3 = DIFFERENCE (R1, R2)

Instructions SQL :
SELECT Nom-Champ, Nom-Champ, ...
FROM Nom-Table2
MINUS
SELECT Nom-Champ, Nom-Champ, ...

FROM Nom-Table1;
ANGLAIS
137
nocandidat nomcandidat prénomcandidat numétablissement
Exemple :
10123 DUPONT Patrick 94010
Soient les tables ANGLAIS
10216 et ESPAGN qui
Exemple
GRANGETTE
: permettent de gérer les candidats à des épreuves de
Didier 75100
Soient les tables ANGLAIS et ESPAGN qui permettent de gérer les candidats à des épreuves de
10309 HERISSON Patrick 94010
langue. 10405 MAGNAN Hélène 75250 ANGLAIS
10505 SERRES Sylvia 94010 prénomcandidat numétablissement
nocandidat nomcandidat
10123 DUPONT Patrick 94010
On souhaiterait obtenir souhaiterait obtenir 10216 GRANGETTE Didier 75100
ESPAGN
la liste des candidatsnocandidat
passant lesnomcandidat
épreuves 10309 HERISSON Patrick
prénomcandidat numétablissement
94010
10405 MAGNAN Hélène 75250
d’anglais seulement.10025 ACQUINO Patricia
10505 SERRES91260 Sylvia 94010
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010 ESPAGN
nocandidat nomcandidat prénomcandidat numétablissement
On souhaiterait obtenir souhaiterait obtenir 10025
la liste des ACQUINO Patriciales épreuves
candidats passant 91260
d’anglais
seulement. 10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010

On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les épreuves
En En langage
langage algébrique
algébrique = :
: R1 ANGLAIS - ESPAGN
seulement.
R1 = ANGLAIS - ESPAGN
Traduction en SQL :
Traduction en SQL : En langage algébrique :
SELECT * FROM ANGLAIS R1 = ANGLAIS - ESPAGN
MINUSSELECT *
Traduction en SQL :
FROM ANGLAIS
SELECT * FROM ESPAGN;
MINUS SELECT *
SELECT * FROM ANGLAIS
FROM ESPAGN; MINUS
Il est possible de combiner les opérateurs
SELECT * UNION, INTERSECT et MINUS, il faut pour cela
FROM ESPAGN;
Il est possible de combiner les opérateurs UNION, INTERSECT et MINUS, il faut pour cela utiliser des
utiliserparenthèses
des parenthèses pour déterminer
pour déterminer les ordres
les ordres de priorité deopérateurs.
de ces priorité de ces opérateurs.
Il est possible de combiner les opérateurs UNION, INTERSECT et MINUS, il faut pour cela uti
parenthèses pour déterminer les ordres de priorité de ces opérateurs.
ANGLAIS
nocandidat nomcandidat Prénomcandidat numétablissement
ANGLAIS
10123 DUPONT nocandidat nomcandidat
Patrick 94010 Prénomcandidat numétablissement
10309 HERISSON 10123
Patrick DUPONT94010 Patrick 94010
10309 HERISSON Patrick 94010
10405 MAGNAN Hélène 75250
10405 MAGNAN Hélène 75250
138
COMMANDE INSERT : Forme générale

1ère Forme
INSERT [INTO] < Nom de Table >
[ < Liste d’attributs entre parenthèses > ]
VALUES < Liste de valeurs correspondant aux attributs entre parenthèses >
2ème Forme
INSERT [INTO] < Nom de Table >
[ < Liste n° 1 d’attributs entre parenthèses > ]
SELECT < Liste n°2 d’attributs correspondant en type à ceux de la Liste n°1 >
FROM < liste de tables ou vues >
[WHERE < critère de jointure naturelle, théta-jointure, jointure externe > ]
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
[etc… ]
Remarques :
- Les attributs non spécifiés dans la liste n°1 restent à NULL ou à leur valeur par défaut après l’insertion de tuple
- On doit toujours fournir une valeur dans l’ordre INSERT pour les attributs déclarés NOT NULL
( déclaration effectuée lors de la création de la table )
139

COMMANDE INSERT : Exemples


Schéma relationnel : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Poids , Couleur )
ARTICLE ( N_Article , Désignation , Prix_U )

* Insertion d’une ligne ( un tuple ) dans la table PRODUIT


INSERT INTO PRODUIT VALUES ( 20 , ‘VASE DE CHINE’ , 250 , 15 , ‘BLEU’ )

* Insertion de 2 lignes ( 2 tuples ) dans la table PRODUIT avec certaines valeurs nulles
INSERT INTO PRODUIT VALUES ( 21 , ‘VERRE CRISTAL’ , 50 , 0.25 , NULL ) ,
( 22 , ‘FOURCHETTE INOX’, 10 , NULL , NULL )

* Insertion de 2 lignes dans la table PRODUIT avec spécification des attributs d’insertion
INSERT INTO PRODUIT ( N_Produit , Libellé_Produit )
VALUES ( 23 , ‘CUILLERE INOX’ ) , ( 24 , ‘COUTEAU INOX’ )

* Insertion de tous les tuples de la table PRODUIT dont le prix est supérieur à 200 DH dans la Table ARTICLE :
( la structure des colonnes dans la table cible doit être la même que celle des colonnes dans la table source )
INSERT INTO ARTICLE
SELECT N_Produit , Libellé_Produit , Prix_U FROM PRODUIT
WHERE Prix_U > 200 ;

* Requête interdite : la duplication des tuples d’une table par un INSERT avec une sous-requête sur la même table
INSERT INTO PRODUIT
SELECT * FROM PRODUIT ;
140
COMMANDE UPDATE : Forme générale

1ème Forme
UPDATE < Nom de Table >
SET < Attribut1 = Valeur1 > ,
< Attribut2 = Valeur2 > , etc …
[WHERE < critère de sélection simple
ou critère de sélection complexe appelant une sous-requête > ]
2ème Forme
UPDATE < Nom de Table >
SET < Attribut1 = Valeur1 > ,
< Attribut2 = Valeur2 > , etc …
FROM < liste de tables ou vues >
WHERE < critère de jointure naturelle, théta-jointure, jointure externe >
[ AND < critère de sélection simple > ]
[ AND < critère de sélection complexe appelant une sous-requête > ]
141

COMMANDE UPDATE : Exemples


Schéma relationnel : PRODUIT ( N_Produit , Libellé_Produit , Prix_U , Qté_Stock )
ACHETER ( N_Produit , N_Client , Qté_Achetée , Date_Achat )
CLIENT ( N_Client , Nom , Adresse , Tél , Chiffre_Affaire )

• Mise à jour du prix de tous les produits pour tenir compte d’une augmentation de 10 DH
UPDATE PRODUIT SET Prix_U = Prix_U + 10 ;

• Mise à jour des produits de luxe dont le prix est supérieur à 1000 DH seulement ( augmentation de
15 % )
UPDATE PRODUIT SET Prix_U = Prix_U * 1.15
WHERE Prix_U > 1000 ;

• Mise à la valeur nulle des adresses et téléphones et initialisation du chiffre d’affaires réalisé avec
tous les clients dont le nom commence par la lettre B ( dans le but de recommencer leur saisie )
UPDATE CLIENT SET Adresse = Null , Tél = Null , Chiffre_Affaire = 0
WHERE Nom LIKE ‘ B% ’ ;

• Mise à jour de la Qté en stock de tous les produits ayant fait l’objet de ventes durant la journée
du 19/05/2008 ( seule une vente par produit sera prise en compte à cette date )
UPDATE PRODUIT SET Qté_Stock = Qté_Stock - A.Qté_Achetée
FROM PRODUIT P , ACHETER A
WHERE P.N_Produit = A.N_Produit
AND A.Date_Achat = ‘ 19/05/2008’
143
COMMANDE DELETE : Forme générale et Exemples

DELETE FROM < Nom de Table >


[WHERE < critère de sélection simple
ou critère de sélection complexe appelant une sous-requête > ]

Exemple : PILOTE ( N_Pilote , Nom , Prénom , Adresse , Salaire )


AVION ( N_Avion , Type , Capacité )
VOL ( N_Pilote , N_Avion , Date_Vol , Heure_Dép , Heure_Arr , Ville_Dép , Ville_Arr )

* Suppression de tous les vols ( tous les tuples de la table VOL )


DELETE FROM VOL ;
* Suppression de tous les vols qui datent d’avant le 28 Février 2000
DELETE FROM VOL WHERE Date_Vol < ‘ 19/05/2008’ ;
* Suppression de tous les vols assurés par le pilote ‘ DRISSI ’
DELETE FROM VOL WHERE N_Pilote IN
( SELECT N_Pilote FROM PILOTE WHERE Nom = ‘ DRISSI’ )
* Suppression de tous les pilotes qui n’ont effectué aucun vol
DELETE FROM PILOTE P WHERE NOT EXISTS
( SELECT * FROM VOL WHERE N_Pilote = P.N_Pilote )
144

LE LANGAGE DE DEFINITION DE DONNEES ( LDD )

Les ordres LDD sont des instructions SQL créées à partir des commandes suivantes :

Commande Rôle

CREATE Création de la structure d’une table , d’un index ou d’une vue de


données en spécifiant des contraintes structurelles ou d’intégrité
référentielle à respecter sur les données

DROP Supprimer une table , un index ou une vue ( structure et données )

ALTER Modifier la structure d’une table ( ajout , suppression ou mise à jour


d’un ou plusieurs attributs )

Chaque commande peut utiliser une ou plusieurs clauses obligatoires et des clauses
optionnelles
145
COMMANDE CREATE TABLE : Forme générale

CREATE TABLE < Nom de Table >


[ < Nom attr. > < Type > ] , …
ou [ < Nom attr. > < Type > < Contrainte d’attr. > ] , …
ou [ < Nom attr. > < Type > CONSTRAINT <Nom contrainte> <Contrainte d’attr.> ] ,
ou [ CONSTRAINT < Nom contrainte > < Contrainte de Table > ] , etc ...

Les contraintes constituent une méthode normalisée par l’ANSI pour assurer
l’intégrité des données .
Chaque type d’intégrité ( de domaine , d’entité ou référentielle ) est mis en œuvre
à l’aide de types de contraintes spécifiques ( voir tableau ).

Les contraintes garantissent la validité des valeurs saisies dans les colonnes et le
maintien des relations entre les tables .
Les principales contraintes sont DEFAULT , CHECK , PRIMARY KEY , UNIQUE
et FOREIGN KEY .
L’écriture d’un ordre CREATE TABLE utilisant ces contraintes peut différer
légèrement suivant le SGBD utilisé ( ACCESS , SQL Server , ORACLE , SYBASE ,
INFORMIX , etc… )
COMMANDE CREATE TABLE : Les Contraintes d’intégrité 146

Type d’intégrité Type de Contrainte Description


---------------------------------------------------------------------------------------------------------------------
Domaine DEFAULT Spécifie la valeur qui sera placée dans la colonne si aucune
valeur n’est spécifiée explicitement dans l’instruction
INSERT au moment de la saisie
CHECK Spécifie une règle de validité s’appliquant aux valeurs d’une
colonne .
FOREIGN KEY Les valeurs de colonne de clé étrangère doivent
correspondre aux valeurs des colonnes de clé primaire de la
table référencée .
Entité PRIMARY KEY Identifie chaque ligne de façon unique , interdit l’entrée de
valeurs en double et garantit la création d’un index pour
améliorer les performances . Les valeurs NULL ne sont pas
acceptées .
UNIQUE Empêche la création des doublons dans les colonnes qui ne
constituent pas une clé primaire et garantit la création d ’un
index pour améliorer les performances . Les valeurs NULL
sont acceptées .
Référentielle FOREIGN KEY Définit une colonne ou un ensemble de colonnes dont les
valeurs sont égales à la clé primaire de leur table ou d ’une
autre table .
Définie par CHECK Spécifie une règle de validité s’appliquant aux valeurs de
l’utilisateur colonnes .
147
COMMANDE CREATE TABLE : Exemples
* Spécification de contraintes d’attributs
CREATE TABLE Etudiant
( Matricule INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Nom CHAR(25) NOT NULL ,
Prénom CHAR(25) NOT NULL ,
Sexe CHAR(1) NOT NULL CHECK ( Sexe IN ( ’M', ’F ’ ) ) ) ;

CREATE TABLE Employé


( Code CHAR(9) NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY NONCLUSTERED
CHECK ( Code LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][MF]' OR
Code LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9] [0-9][MF]’ ) ,
Nom VARCHAR(30) NOT NULL,
Prénom VARCHAR(30) NOT NULL,
N_Fonction SMALLINT NOT NULL DEFAULT 1 REFERENCES Fonction ( N_Fonction ) ,
Date_Embauche DATETIME NOT NULL DEFAULT ( GETDATE() ) ) ;

CREATE TABLE Fonction


( N_Fonction SMALLINT IDENTITY( 1 , 1) PRIMARY KEY CLUSTERED ,
Libellé_Fonction VARCHAR(50) NOT NULL DEFAULT ’ Fonction ? ',
Echelle TINYINT NOT NULL CHECK ( Echelle <= 11 ) ) ;

Remarque : L’utilisation du qualificatif IDENTITY(Valeur_initiale , Incrément ) permet de spécifier


un attribut qui doit faire l’objet d’une incrémentation automatique par le système à chaque ajout de tuple
148
COMMANDE CREATE TABLE : Exemples ( Suite )
* Spécification de contraintes de table
- Contrainte d’unicité : Il ne peut y avoir 2 dépôts de même nom dans la même ville :
CREATE TABLE DEPOT
( N_Dépôt INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Nom_Dépôt CHAR(25) NOT NULL ,
Ville VARCHAR(25) NOT NULL ,
CONSTRAINT C_Dépôt UNIQUE ( Nom_Dépôt , Ville ) ) ;

- Contrainte sur les domaines de valeurs de plusieurs attributs


CREATE TABLE Produit
( N_Produit INT NOT NULL CONSTRAINT Clé_Primaire PRIMARY KEY ,
Désignation CHAR(25) NOT NULL ,
Poids DECIMAL(8,2) NULL ,
Prix_U DECIMAL(10,2) NULL ,
CONSTRAINT C_Produit CHECK ( Poids > 0 AND Prix_U > 0 AND Prix_U <= 10000 ) ) ;

- Contrainte de type Clé primaire composée


CREATE TABLE STOCKER
( N_Produit INT NOT NULL REFERENCES Produit ( N_Produit ) ,
N_Dépôt INT NOT NULL REFERENCES Dépôt ( N_Dépôt ) ,
CONSTRAINT C_Stocker PRIMARY KEY (N_Produit , N_Dépôt ) ) ;
149
COMMANDE ALTER TABLE : Forme générale
But : Modifier la définition d'une table en changeant, en ajoutant ou en supprimant des colonnes ou des contraintes

1ère Forme :
ALTER TABLE < Nom de Table >
[ ADD < Nom attr. > < Type > [ < Contrainte d’attr. > ] ] , …
ou [ ADD CONSTRAINT < Nom contrainte > < Contrainte > ] , …
2ème Forme :
ALTER TABLE < Nom de Table >
[ DROP COLUMN < Nom attr. > ] , ...
ou [ DROP CONSTRAINT < Nom contrainte > ] , …
3ème Forme :
ALTER TABLE < Nom de Table >
[ ALTER COLUMN < Nom attr. > < Nouveau Type > [ < Contrainte d’attr. > ] ] , .
150
COMMANDE ALTER TABLE : Exemples ( Suite )
- Ajout d’une colonne simple à la structure d’une table

ALTER TABLE Vente ADD Commission MONEY NULL ;

- Ajout d’une colonne ou de plusieurs colonnes avec contraintes

ALTER TABLE Client ADD Code_Client INT IDENTITY ( 1,1 )


CONSTRAINT PK_Client PRIMARY KEY ;

ALTER TABLE Employé ADD


N_Dép INT NOT NULL CONSTRAINT C_Dép REFERENCES Département ( N_Dép ) ,
Tél VARCHAR ( 10 ) NULL CONSTRAINT C_Tél CHECK ( Tél IS NULL OR
Tél LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR
Tél LIKE " [0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] " ) ,
Salaire DECIMAL ( 8, 2 ) CONSTRAINT C_Salaire DEFAULT 5000 ;

- Ajout d’une contrainte

ALTER TABLE Employé ADD CONSTRAINT C_Employé CHECK ( Date_Embauche > ‘ 01/01/98 ’ ) ;

- Suppression d’une colonne ou d’une contrainte

ALTER TABLE Personne DROP Age ;

ALTER TABLE Employé DROP CONSTRAINT C_Employé ;


151
COMMANDE CREATE INDEX : Forme générale et Exemples

CREATE [UNIQUE ] INDEX < Nom de l’indexe >


ON < Nom de Table >
( < Nom Attr. > , < Nom attr. > , ….. )

On utilise un index sur un attribut ou un groupe d’attributs de table dans les situations suivantes :
* Pour implémenter l’intégrité de relation ( de table ) permettant de garantir l’unicité des valeurs
de la clé primaire ( Commande CREATE INDEX avec le qualificatif UNIQUE )
* Pour définir une ou plusieurs clés candidates ( attributs à valeurs distinctes ) dans une table
* Pour accélérer le temps de réponse de certaines opérations de traitement sur la base de données
lorsque le nombre d’enregistrements des tables est très important :
- Recherche ou Tri croissant / décroissant sur une ou plusieurs colonnes
- Requête de sélection utilisant un filtre sur une ou plusieurs colonnes avec une clause WHERE
- Requête utilisant des jointures sur certains attributs communs à 2 ou plusieurs tables
On définit alors un indexe sur la ou les colonnes en question ( colonnes de recherche , de tri ,
de sélection , de jointure , etc… )
Exemples :
CREATE UNIQUE INDEX PK_Pilote ON Pilote ( N_Pilote ) ; // Clé primaire simple
CREATE UNIQUE INDEX PK_Stocker ON Stocker ( N_Produit , N_Dépôt ) ; // Clé primaire composée
CREATE INDEX IX_Vente ON Vente ( Date_V DESC , Réf_Produit ) ; // Indexe sur un couple
d’attributs de tri

Vous aimerez peut-être aussi