Vous êtes sur la page 1sur 53

Bases de données

avancées

Madjid Meziane
m_meziane@hotmail.com
madjid.meziane@mpsa.com
Objectifs du cours
• BD relationnelles

• BD objet

• BD Relationnel Objet

• XML et les BDs (Web)

• Entrepôts de données, fouilles de données


Bases de données et SGBD relationnels (1)

• Une base de données représente


– un ensemble de données d’entreprise,
– mémorisé par un ordinateur,
– organisé selon un modèle de données
– accessible à de nombreuses personnes.
• Un Système de Gestion de Bases de Données
(SGBD) représente
– un ensemble coordonné de logiciels
– permettant de décrire, mémoriser, manipuler, traiter,
interroger les ensembles de données constituant la base.
Bases de données et SGBD relationnels (2)

• Un SGBD doit satisfaire 5 conditions :


– être une bonne représentation du monde réel, fiable
et à jour : des contraintes d’intégrité doivent assurer
un état cohérent de la base.
– assurer la non-redondance de l’information : une
information doit être implantée une et une seule fois.
– maintenir l’indépendance des programmes par
rapport aux données, permettant aux applications
de partager les mêmes données.
Bases de données et SGBD relationnels (3)

– assurer la sécurité et la confidentialité des données :


les données doivent être protégées contre les accès
non autorisés et contre les pannes intempestives.

– autoriser le partage des données, permettant à


plusieurs utilisateurs de modifier des données
quasiment en même temps tout en assurant un résultat
cohérent pour un utilisateur consultant la base.
Modules d’un SGBD
Module Dictionnaire de
d’implantation données
physique
Administration
Langage d ’interrogation
et de manipulation
Utilisation

Module Module d’intégrité et


d’optimisation de de confidentialité
requêtes SGBD

BASE DE DONNEES
Métiers associés aux BD
Historique des SGBD (1)

• Première génération (années 70) : modèle


hiérarchique ou modèle en réseau.

– Modèle hiérarchique : les données sont représentées sous


forme d’une hiérarchie arborescente à plusieurs niveaux.
Chaque niveau est constitué d’un ou de plusieurs groupes de
données pouvant se décomposer à leur tour.

– Modèle en réseau : extension du précédent, où les liens entre


objets peuvent exister sans restrictions, indépendamment de la
structure de l’arbre.
Historique des SGBD (2)

• Deuxième génération (années 80) : modèle relationnel.


– Les données sont représentées sous forme tabulaire,
avec indépendance totale entre les logiciels et le
support de stockage.
– Langages spécifiques permettant d’accéder aux
données de manière assez naturelle : QBE, SQL.
– Quelques SGBD relationnels : ORACLE, INGRES,
SYBASE, DBASE2, ACCESS, mySQL.
• Troisième génération (fin des années 90) : modèle
objets.
– SGBD objets : O2, ORACLE.
Objectifs d’un modèle relationnel

• Les principaux objectifs d’un modèle relationnel sont :


– utiliser des structures de données simples 
• une table relationnelle est un tableau
– proposer des langages permettant d’accéder aux
données de manière assez naturelle 
• QBE, SQL
– proposer l’indépendance entre les données et
les traitements exécutés sur ces données
– permettre à chaque utilisateur d’avoir une vue de
la base de données appropriée à ses besoins.
Le modèle relationnel (1)

• Le concept de base du modèle relationnel est la


relation, de structure tabulaire
• Une relation a plusieurs attributs 
• Le degré de la relation est le nombre de ces attributs
• Exemple : la relation PRODUIT, de degré 3, comporte
les attributs : num_produit, nom_produit et stock

num_produit nom_produit stock


N101 table 25
N201 chaise 120
N251 fauteuil 36
N541 lit 12
… … …
Le modèle relationnel (2)

num_produit nom_produit stock


N101 table 25
N201 chaise 120
N251 fauteuil 36
N541 lit 12
… … …
• Occurrence : chaque ligne du tableau (un n-uplet)
correspond à une occurrence de la relation.
• Cardinalité : nombre d’occurrences de la relation dans
la base. La relation PRODUIT est donc de cardinalité 4.
• Clé : chaque relation contient un attribut particulier (ou
un ensemble d’attributs) appelé clé, dont la valeur
permet de distinguer une occurrence de toutes les
autres. Pour la relation PRODUIT, l’attribut clé est
num_produit.
Le modèle relationnel (3)

• On représente symboliquement une relation R par un


schéma SR de la forme :
R(clé, attribut 2, attribut 3, …, attribut n).

• On aura donc :
PRODUIT(num_produit, nom_produit, stock).
Exemple de base de données relationnelle (1)

• Relation VOL (numvol, depart, arrivee, numav,


numpil, jdep, hdep, jarr, harr)
numvol : numéro du vol (clé) depart : ville de départ
arrivee : ville d’arrivée numav : numéro d’avion
numpil : numéro du pilote jdep : jour de départ (clé)
hdep : heure de départ jarr : jour d’arrivée
harr : heure d’arrivée
NUMVOL DEPART ARRIVEE NUMAV NUMPIL JDEP HDEP JARR HARR
V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
V0002 Londres Moscou A0003 P0001 15/05/2004 10:30 15/05/2004 17:00
V0003 Berlin Madrid A0002 P0003 15/05/2004 11:15 15/05/2004 18:00
V0004 Londres Madrid A0004 P0006 16/05/2004 06:20 16/05/2004 09:30
V0005 Bruxelles Rome A0006 P0005 16/05/2004 10:00 16/05/2004 15:10
V0006 Berlin Amsterdam A0005 P0001 16/05/2004 14:30 16/05/2004 17:00
V0007 Paris Bruxelles A0001 P0002 16/05/2004 18:00 16/05/2004 20:00
V0008 New York Paris A0001 P0003 17/05/2004 03:00 17/05/2004 21:30
V0009 Paris Bruxelles A0004 P0006 17/05/2004 06:00 17/05/2004 07:00
V0010 Berlin Madrid A0002 P0004 17/05/2004 08:00 17/05/2004 11:00
Exemple de base de données relationnelle (2)

• Relation PILOTE(numpilote, nom, prenom)

numpilote : numéro du pilote (clé) P0001


NUMPILOTE NOM
Dupuis
PRENOM
Antoine

nom : nom du pilote P0002


P0003
Simon
François
Georges
Luc
P0004 André Georges
prenom : prénom du pilote P0005 Arthur Louis
P0006 Mathieu François

• Relation AVION(numavion, type, cap)

numavion : numéro de l’avion (clé)A0001


NUMAVION TYPE
Boeing 747
CAP
420

type : type de l’avion A0002


A0003
Airbus 320
Airbus 300
300
280
A0004 Boeing 737 250
cap : capacité de l’avion A0005 DC 10 120
A0006 Boeing 747 410
Exemple de base de données relationnelle (3)

• Les liens entre ces relations sont appelés des


jointures :
– l’attribut NUMAV de VOL représente le même type
d’information que l’attribut NUMAVION de AVION.
On écrira :
VOL.NUMAV = AVION.NUMAVION
– l’attribut NUMPIL de VOL représente le même
type d’information que l’attribut NUMPILOTE de
PILOTE. On écrira :
VOL.NUMPIL = PILOTE.NUMPILOTE
Éléments de SQL, le langage
relationnel
Éléments de SQL, le langage relationnel (1)

• Le langage SQL (Structured Query Language) est le


langage d’interrogation le plus utilisé. Il permet de déclarer
les relations, de créer les occurrences, de les modifier,
d’interroger et de manipuler les SGBD relationnelles.
• La forme générale d’une interrogation SQL (appelée une
requête) est :
SELECT liste d’attributs FROM noms de relations WHERE
conditions ;
• Dans les conditions de la clause optionnelle WHERE, on
peut utiliser les opérateurs AND et OR.
Éléments de SQL, le langage relationnel (2)

Recherche des noms et prénoms des pilotes


SELECT NOM, PRENOM
FROM PILOTE 
réalise une projection, c’est-à-dire ne prend qu’un
sous-ensemble des attributs de la relation PILOTE.

NOM PRENOM
Dupuis Antoine
Simon Georges
François Luc
André Georges
Arthur Louis
Mathieu François
Éléments de SQL, le langage relationnel (3)

Recherche des attributs des pilotes de prénom


Georges
SELECT * FROM PILOTE
WHERE PRENOM= 'Georges' ;
réalise une sélection, c’est-à-dire affiche tous les
attributs de la relation PILOTE mais ne prend qu’une
partie des occurrences, celles vérifiant la condition :
prenom= 'Georges'.
NUMPILOTE NOM PRENOM
P0002 Simon Georges
P0004 André Georges
Éléments de SQL, le langage relationnel (4)

Attributs croisés de tous les pilotes et de tous les vols


SELECT *
FROM VOL, PILOTE ;
réalise le produit cartésien de la relation VOL par la
relation PILOTE, en combinant toutes les
occurrences de VOL avec toutes les occurrences de
PILOTE.
NUMPILOTE NOM PRENOM NUMVOL DEPART ARRIVEE NUMAV NUMPIL JDEP HDEP JARR HARR
P0001 Dupuis Antoine V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0002 Simon Georges V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0003 François Luc V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0004 André Georges V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0005 Arthur Louis V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0006 Mathieu François V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0001 Dupuis Antoine V0002 Londres Moscou A0003 P0001 15/05/2004 10:30 15/05/2004 17:00
P0002 Simon Georges V0002 Londres Moscou A0003 P0001 15/05/2004 10:30 15/05/2004 17:00
Éléments de SQL, le langage relationnel (5)

Recherche sur les vols et sur les pilotes effectifs de


ces vols
SELECT * FROM PILOTE, VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL
réalise une jointure naturelle, c’est-à-dire une
sélection sur le produit cartésien de la relation VOL
par la relation PILOTE, sélection réalisée par l’égalité
d’attributs identiques : PILOTE.NUMPILOTE =
VOL.NUMPIL.
NUMPILOTE NOM PRENOM NUMVOL DEPART ARRIVEE NUMAV NUMPIL JDEP HDEP JARR HARR
P0001 Dupuis Antoine V0006 Berlin Amsterdam A0005 P0001 16/05/2004 14:30 16/05/2004 17:00
P0001 Dupuis Antoine V0002 Londres Moscou A0003 P0001 15/05/2004 10:30 15/05/2004 17:00
P0002 Simon Georges V0007 Paris Bruxelles A0001 P0002 16/05/2004 18:00 16/05/2004 20:00
P0002 Simon Georges V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30
P0003 François Luc V0008 New York Paris A0001 P0003 17/05/2004 03:00 17/05/2004 21:30
P0003 François Luc V0003 Berlin Madrid A0002 P0003 15/05/2004 11:15 15/05/2004 18:00
P0004 André Georges V0010 Berlin Madrid A0002 P0004 17/05/2004 08:00 17/05/2004 11:00
P0005 Arthur Louis V0005 Bruxelles Rome A0006 P0005 16/05/2004 10:00 16/05/2004 15:10
P0006 Mathieu François V0009 Paris Bruxelles A0004 P0006 17/05/2004 06:00 17/05/2004 07:00
P0006 Mathieu François V0004 Londres Madrid A0004 P0006 16/05/2004 06:20 16/05/2004 09:30
Éléments de SQL, le langage relationnel (6)

Numéro des vols et noms des pilotes de ces vols


SELECT VOL.NUMVOL, PILOTE.NOM
FROM PILOTE, VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL
réalise une projection à partir d’une jointure naturelle.
NUMVOL NOM
V0006 Dupuis
V0002 Dupuis
V0007 Simon
V0001 Simon
V0008 François
V0003 François
V0010 André
V0005 Arthur
V0009 Mathieu
V0004 Mathieu
Éléments de SQL, le langage relationnel (7)

Numéro des vols sur l’avion de numéro ‘A0006’ et


noms des pilotes de ces vols
SELECT VOL.NUMVOL, PILOTE.NOM
FROM VOL, PILOTE
WHERE VOL.NUMPIL = PILOTE.NUMPILOTE
AND VOL.NUMAV='A0006' ;
réalise une projection d’une sélection sur une jointure
naturelle, sélection réalisée par une condition sur un
attribut : VOL.NUMAV='A0006'.
NUMVOL NOM
V0005 Arthur
Éléments de SQL, le langage relationnel (8)

Numéros de vols, types d’avion, capacités et noms des


pilotes de ces vols
SELECT VOL.NUMVOL, AVION.TYPE, AVION.CAP,
PILOTE.NOM FROM AVION, PILOTE, VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL
AND VOL.NUMAV = AVION.NUMAVION
réalise une projection V0006
NUMVOL
DC 10
TYPE CAP NOM
120 Dupuis
V0002 Airbus 300 280 Dupuis
sur le résultat de deux V0001
V0007
Boeing 747
Boeing 747
420 Simon
420 Simon
jointures naturelles V0003
V0008
Airbus 320
Boeing 747
300 François
420 François

entre trois relations. V0010


V0005
Airbus 320
Boeing 747
300 André
410 Arthur
V0004 Boeing 737 250 Mathieu
V0009 Boeing 737 250 Mathieu
Éléments de SQL, le langage relationnel (9)

Numéros de vols, types d’avion, capacités et noms des


pilotes des vols de capacité comprise entre 200 et 350
Deux formulations possibles :

1) SELECT VOL.NUMVOL, AVION.TYPE,


AVION.CAP, PILOTE.NOM
FROM AVION, PILOTE, VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL AND
VOL.NUMAV = AVION.NUMAVION
AND (AVION.CAP BETWEEN 200 AND 350)
Éléments de SQL, le langage relationnel (10)

2) SELECT VOL.NUMVOL, AVION.TYPE,


AVION.CAP, PILOTE.NOM
FROM AVION, PILOTE , VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL AND
VOL.NUMAV = AVION.NUMAVION
AND AVION.NUMAVION IN (SELECT
AVION1.NUMAVION FROM AVION AVION1
WHERE (AVION1.CAP BETWEEN 200 AND 350))
NUMVOL TYPE CAP NOM
V0010 Airbus 320 300 André
V0003 Airbus 320 300 François
V0002 Airbus 300 280 Dupuis
V0009 Boeing 737 250 Mathieu
V0004 Boeing 737 250 Mathieu
Éléments de SQL, le langage relationnel (11)

• Les fonctions ensemblistes


MAX fournit la valeur maximale d’un attribut
Capacité de l’avion de capacité maximale
SELECT MAX(AVION.CAP) FROM AVION
Max(CAP)
420

Capacité maximale des avions allant à Madrid


SELECT MAX(AVION.CAP) FROM AVION, VOL
WHERE AVION.NUMAVION = VOL.NUMAV
AND (VOL.ARRIVEE='Madrid') Max(CAP)
300
Éléments de SQL, le langage relationnel (12)

MIN fournit la valeur minimale d’un attribut


Capacité de l’avion de capacité minimale
SELECT MIN(AVION.CAP) Min(CAP)
120
FROM AVION
Heure de départ du premier vol du 15/5/2004
SELECT MIN(VOL.HDEP)
FROM VOL
WHERE (VOL.JDEP={d '2004-05-15'})
Min(HDEP)
10:00
Éléments de SQL, le langage relationnel (13)

COUNT permet de compter le nombre d’occurrences


Nombre d’avions au départ de Paris
SELECT COUNT(VOL.DEPART) Nombre(DEPART)
FROM VOL 3

WHERE (VOL.DEPART='Paris')
Nombre de Boeing 747
SELECT COUNT(AVION.NUMAVION)
FROM AVION
WHERE Nombre(NUMAVION)
2
(AVION.TYPE='Boeing 747')
Éléments de SQL, le langage relationnel (14)

SUM permet d’additionner des attributs


Capacité totale des avions Somme(CAP)
SELECT SUM(AVION.CAP) 1780

FROM AVION
Capacité totale des avions au départ de Paris
SELECT SUM(AVION.CAP) Somme(CAP)
FROM AVION, VOL 1090

WHERE VOL.NUMAV = AVION.NUMAVION


AND (VOL.DEPART='Paris')
Éléments de SQL, le langage relationnel (15)

AVG permet de calculer des moyennes d’attributs


Moyenne des capacités des Boeing 747
SELECT AVG(AVION.CAP) FROM AVION
Moyenne(CAP)
WHERE (AVION.TYPE='Boeing 747') 415
Moyenne des capacités des avions à destination
d’Amsterdam
SELECT AVG(AVION.CAP) FROM AVION, VOL
WHERE VOL.NUMAV = AVION.NUMAVION
Moyenne(CAP)
AND (VOL.ARRIVEE='Amsterdam') 120
Éléments de SQL, le langage relationnel (16)

VAR permet de calculer des variances d’attributs


Variance des capacités des avions
SELECT VAR(AVION.CAP) VAR(AVION.CAP)
FROM AVION 12346,66667

Variance des capacités des Boeing 747


SELECT VAR(AVION.CAP)
FROM AVION
WHERE (AVION.TYPE='Boeing 747')
VAR(AVION.CAP)
50
Éléments de SQL, le langage relationnel (17)

• Autres fonctions

DISTINCT permet de n’obtenir qu’une seule fois


chaque occurrence TYPE
Airbus 300
Types des avions Airbus 320
Boeing 737
SELECT DISTINCT AVION.TYPE Boeing 747
DC 10
FROM AVION
CAP
Différentes capacités des avions 120
SELECT DISTINCT AVION.CAP 250
280
FROM AVION 300
410
420
Éléments de SQL, le langage relationnel (18)

ORDER BY permet d’ordonner par ordre


croissant ou décroissant (DESC)
Type et capacité des avions par type croissant (ordre
alphabétique)
TYPE CAP
SELECT DISTINCT AVION.TYPE, Airbus 320
Airbus 300 280
300

AVION.CAP FROM AVION Boeing 737


Boeing 747
250
410
Boeing 747 420
ORDER BY AVION.TYPE DC 10 120

Liste des pilotes par ordre alphabétique décroissant


NOM
SELECT DISTINCT PILOTE.NOM Simon
Mathieu
FROM PILOTE François
ORDER BY PILOTE.NOM DESC Dupuis
Arthur
André
Éléments de SQL, le langage relationnel (19)

LIKE permet d’utiliser des jokers dans les chaînes


de caractères

_ veut dire un caractère quelconque


% veut dire un nombre quelconque de caractères

Numéros des vols dont le nom du pilote a pour


deuxième lettre la lettre “ r ”
SELECT VOL.NUMVOL FROM PILOTE, VOL
WHERE PILOTE.NUMPILOTE = VOL.NUMPIL
AND (PILOTE.NOM LIKE '_r%') V0008 NUMVOL
V0003
V0005
Éléments de SQL, le langage relationnel (20)

Villes de départ dont la deuxième lettre est la lettre “ o ”

SELECT DISTINCT VOL.DEPART


FROM VOL
WHERE
VOL.DEPART LIKE '_o%')

DEPART
Londres
Éléments de SQL, le langage relationnel (21)

GROUP BY permet d’effectuer des groupements


Sommes des capacités des avions, groupés par
ville de départ
SELECT VOL.DEPART, SUM(AVION.CAP)
FROM AVION, VOL
WHERE VOL.NUMAV = AVION.NUMAVION
GROUP BY VOL.DEPART
DEPART Somme(CAP)
Berlin 720
Bruxelles 410
Londres 530
New York 420
Paris 1090
Éléments de SQL, le langage relationnel (22)

GROUP BY est souvent utilisé avec la clause HAVING


pour spécifier des caractéristiques du groupement :
Heure de départ, ville de départ et d’arrivée du premier
vol du 15/5/2004
SELECT VOL1.HDEP, VOL1.DEPART, VOL1.ARRIVEE
FROM VOL, VOL VOL1
WHERE (VOL.JDEP={d '2004-05-15'})
AND (VOL1.JDEP={d '2004-05-15'})
GROUP BY VOL1.HDEP, VOL1.DEPART, VOL1.ARRIVEE
HAVING (VOL1.HDEP=MIN(VOL.HDEP))
HDEP DEPART ARRIVEE
10:00 Paris San Francisco
Éléments de SQL, le langage relationnel (24)

BETWEEN a AND b teste un intervalle


Départ et arrivée des vols partant entre 10 h et 14 h
30
SELECT DISTINCT VOL.DEPART, VOL.ARRIVEE
FROM VOL
WHERE
(VOL.HDEP BETWEEN '10:00' AND '14:30')
DEPART ARRIVEE
Berlin Amsterdam
Berlin Madrid
Bruxelles Rome
Londres Moscou
Paris San Francisco
Éléments de SQL, le langage relationnel (25)

Départ et arrivée des vols de capacité comprise entre


250 et 410
SELECT VOL.DEPART, VOL.ARRIVEE,
AVION.CAP FROM AVION, VOL
WHERE VOL.NUMAV = AVION.NUMAVION
AND (AVION.CAP BETWEEN 250 AND 410)

DEPART ARRIVEE CAP


Berlin Madrid 300
Berlin Madrid 300
Londres Moscou 280
Paris Bruxelles 250
Londres Madrid 250
Bruxelles Rome 410
Éléments de SQL, le langage relationnel (26)

IS NULL et IS NOT NULL permettent de vérifier si


l’attribut est renseigné ou pas
Numéros des vols auxquels sont affectés des pilotes
NUMVOL
V0001
SELECT VOL.NUMVOL V0002
V0003
FROM VOL V0004
V0005
WHERE V0006
V0007
(VOL.NUMPIL IS NOT NULL) V0008
V0009
V0010
Fonctionnalités des SGBD
relationnels
Fonctionnalités des SGBD relationnels (1)

• Un SGBD est dit relationnel s’il respecte une norme


composée de trois conditions :

– toutes les informations sont représentées par des


valeurs contenues dans des relations (tables).

– l’utilisateur n’a pas à établir des pointeurs entre les


relations (les jointures établissent ces relations).

– le SGBD permet la sélection d’occurrences


(sélection), la sélection d’attributs (projection) et
l’opération de jointure.
Fonctionnalités des SGBD relationnels (2)

• Un SGBD relationnel est dit totalement relationnel


s’il respecte en outre les deux conditions suivantes :
– il permet d’utiliser les (autres) opérateurs de
l’algèbre relationnelle (excepté la division).
– il permet de prendre en compte la contrainte
d’unicité des clés et l’intégrité référentielle.
• Query est un SGBD relationnel, mais pas totalement
relationnel car il ne gère pas les clés et ne respecte
pas l’intégrité référentielle.
• ACCESS est totalement relationnel (problème
d’unicité des clefs et d’intégrité référentielle à gérer).
Base et métabase

• Une base de données comporte des relations, dont


les descriptions sont elles-mêmes mémorisées dans
une base de données appelée métabase.
• Si on crée une nouvelle relation, on agit sur la
métabase ; si on crée une occurrence d’une relation,
on agit sur la base.
• Des mots différents sont employés par SQL pour
différencier la base destinataire : ainsi, CREATE
crée une relation et agit donc sur la métabase, tandis
qu’INSERT crée une occurrence et agit sur la base.
Gestion de la métabase : création de relations

• La plupart des SGBD permettent de créer les relations


de manière interactive à l’aide de fenêtres de dialogue
et d’assistants (Query, Access). La création d’une
relation est cependant prévue en SQL via l’instruction
CREATE TABLE (mySQL).

• Lors de la création d’une relation, de nombreux SGBD


imposent de préciser le (les) attribut(s) clé (Access,
mySQL).

• Une relation peut avoir une clé principale (un ou


plusieurs attributs) et d’autres clés secondaires. La clé
principale assure qu’il est impossible de donner la
même clé à deux occurrences différentes de la même
relation.
Gestion de la métabase : : gestion des clés

• Si la déclaration de la relation est faite directement en


SQL (mySQL), la clé principale est signalée par
PRIMARY KEY et les clés secondaires par UNIQUE :
CREATE TABLE Etudiant
num_etudiant NUMBER(6) NOT NULL, PRIMARY KEY,
nom CHAR(20),
adresse CHAR(30),
date_naissance DATE,
code_diplôme NUMBER(3),
num_ss NUMBER(13) UNIQUE ;
Gestion de la métabase : gestion des clés

• Si l’on souhaite que la clé principale soit composée de


plusieurs attributs, elle doit alors être définie à la fin de
l’instruction de la manière suivante :
CREATE TABLE Etudiant
num_etudiant NUMBER(6) NOT NULL,
nom CHAR(20),
adresse CHAR(30),
date_naissance DATE,
code_diplôme NUMBER(3),
num_ss NUMBER(13) NOT NULL,
PRIMARY KEY(num_etudiant, num_ss) ;
Gestion de la métabase : intégrité référentielle

• Lorsque les relations sont créées, les jointures naturelles


entre ces relations doivent être déclarées - avant
d’effectuer une requête (Access) ou dans la requête
(Query, mySQL).
• L’intégrité référentielle est respectée si, lors de la
création d’une occurrence d’une relation dont un attribut
fait référence à un attribut clé d’une autre relation, la
valeur correspondante de ce dernier attribut est déjà
définie.

• Exemple : puisqu’une occurrence de la relation VOL 


comporte les attributs numav et numpil, cette occurrence
ne peut être créée que si les occurrences de PILOTE et
AVION auxquelles elle fait référence existent déjà.
Gestion de la métabase : intégrité référentielle

Il faut donc (par exemple) que l’occurrence


NUMPILOTE NOM PRENOM
P0002 Simon Georges

de PILOTE
et que l’occurrence
NUMAVION TYPE CAP
A0001 Boeing 747 420

de AVION
existent avant que l’on puisse créer l’occurrence
NUMVOL DEPART ARRIVEE NUMAV NUMPIL JDEP HDEP JARR HARR
V0001 Paris San Francisco A0001 P0002 15/05/2004 10:00 16/05/2004 09:30

de VOL.
Gestion de la métabase : modification de relations

• On peut généralement modifier une relation par des


fenêtres de dialogue (manière graphique).
• Mais SQL permet de modifier une relation par
l’instruction ALTER, suivie d’une spécification de
l’opération à effectuer. L’ajout d’un attribut est déclaré
par le mot-clé ADD, la modification d’un attribut par
MODIFY :
ALTER TABLE Etudiant ADD (moyenne NUMBER(2)) ;
ALTER TABLE Etudiant MODIFY adresse CHAR(100) ;
• La suppression d’une relation se fait par DROP TABLE
Exemple : DROP TABLE Etudiant ;
Gestion de la base

• Insertion, suppression et modification


d’occurrences
– L’insertion d’une occurrence par SQL se fait grâce
à INSERT :
INSERT INTO TABLE Etudiant VALUES (.., …,…,…)

– La suppression d’une occurrence se fait par


DELETE :
DELETE FROM TABLE Etudiant WHERE num_etudiant = …
(valeur de la clé précisée)

– La modification d’une occurrence se fait par


UPDATE :
UPDATE Etudiant SET adresse=… WHERE num_etudiant =

FIN COURS 1

Vous aimerez peut-être aussi