Vous êtes sur la page 1sur 11

Synthse de Bases de Donnes

Synthse Bases de Donnes


Motivation et introduction
Structure dune BDD
-

Chaque ligne dune table reprend les donnes relatives une entit.
Chaque colonne dune table dcrit une proprit commune des entits.
Les lignes dune table sont distinctes. Cest sur une (voire plusieurs) colonne(s) que se joue cette unicit.
Le jeu de colonnes dont les valeurs sont uniques constitue un identifiant de la table.

Importance du SGBD
-

Organisation des donnes : tables permanentes stockes sur disque; il cre les mcanismes garantissant
un accs rapide aux donnes; il informe les utilisateurs sur ces structures.
Gestion des donnes garantit l'volution cohrente des donnes; il vrifie que les contraintes (unicit,
rfrence entre tables, etc.) sont respectes.
Accs aux donnes : permet l'accs aux donnes la fois par l'utilisateur occasionnel et par les
programmes de traitement de donnes.
Protection contre les accidents : garantit l'intgrit et l'accessibilit des donnes en cas d'incident
Gestion des accs concurrents : permet l'accs simultan aux donnes
Contrle des accs : garantit que seuls les utilisateurs autoriss peuvent accder aux donnes.

Concepts des bases de donnes


Identifiant
Sous-ensemble des attributs tel quil ne peut exister aucun moment plus dune ligne possdant les mmes
valeurs de ces attributs.
Une table peut avoir plusieurs identifiant, on en choisit un quon dclare primaire, il est constitu de colonnes
obligatoires.
Un identifiant est minimal si chacune de ses colonnes est ncessaire pour garantir la contrainte dunicit.

Cl trangre
Une cl trangre est un groupe de colonnes d'une table S tel qu'il existe, tout moment, dans une table T, une
ligne dont l'identifiant a pour valeur(s) celle(s) de ce groupe. La valeur de la cl trangre sert rfrencer une
ligne de la table T.
Si une des colonnes d'une cl trangre est facultative, il est recommand de les rendre toutes facultatives.
Une cl trangre et l'identifiant qu'elle rfrence ont la mme composition : mme nombre de colonnes et
colonnes de mmes types prises deux deux.
Il se peut que les colonnes d'une cl trangre appartiennent, en tout ou en partie, un identifiant.

Table
Le schma d'une table dfinit sa structure. Il spcifie notamment :
-

le nom de la table,
pour chaque colonne, son nom, son type, son caractre obligatoire,
l'identifiant primaire (liste des colonnes)
les identifiants secondaires ventuels (liste des colonnes)
les cls trangres ventuelles (liste des colonnes et table cible).

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 1 | 11

Synthse de Bases de Donnes

Contraintes dintgrit
-

colonne obligatoire
contrainte d'unicit (pas 2 lignes avec la mme valeur)
contrainte rfrentielle.

Oprateurs lmentaires de modification


-

insrer une ligne


supprimer une ligne
modifier une valeur de colonne dune ligne

COMMANDE
NCOM
NCLI
DATECOM
id: NCOM
ref : NCLI

CLIENT
NCLI
NOM
ADRESSE
id: NCLI

Supprimer une ligne client qui tait cl trangre d'une autre table de commandes. 4 Comportements :
-

no action bloque l'opration si lignes dpendantes


cascade supprime la ligne client et toutes ses commandes (lignes + dpendantes)
set null remplace par null ce qu'on a supprim (si NCLI de commande facultative)
set default idem mais remplace par dfaut

Redondances internes et dpendance fonctionnelle


Dans une relation R (A, B, C, D), il existe une
dpendance fonctionnelle AB si, tout instant,
deux lignes de R qui ont mme valeur de A ont aussi
mme valeur de B.
Si deux lignes ont le mme ISBN alors elles ont le
mme titre et auteur.
-

Dpendance fonctionnelle de ISBN vers TITRE et AUTEUR


ISBN dtermine TITRE et AUTEUR

Il y a redondance interne ds qu'il existe un dterminant qui n'est


pas un identifiant de la table. Une dpendance fonctionnelle dont
le dterminant n'est pas un identifiant est dite anormale. On va
sparer la table en dterminant et dtermin pour supprimer la
redondance
-

T1 (dterminant, dtermin)
T2 (dterminant, rsidu)
T2.dterminant cl trangre vers T1

Une table sans dpendance fonctionnelle anormale est dite normalise. Dcomposer une table de manire
liminer ses dpendances anormales consiste normaliser cette table

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 2 | 11

Synthse de Bases de Donnes

Index
On choisit une colonne indexe et la base de
donnes va crer des mtadonnes.
-

mtadonnes permettent d'utiliser les


donnes de dpart de manire plus
performante
Dans l'exemple, si on recherche
Toulouse, le programme sait dj
dans quelles lignes chercher

On dfinira gnralement un index sur les


colonnes qui constituent un identifiant (pour acclrer l'accs et la vrification avant insertion d'une ligne), sur
des cls trangres ou sur les colonnes qui constituent une condition de slection frquemment utilise.

Langage SQD DDL (Data Definition Language)


Cration dune table
create table CLIENT ( NCLI
NOM
ADRESSE
LOCALITE
CAT
COMPTE

char(10),
char(32),
char(60),
char(30),
char(2),
decimal(9,2) );

Dfinition et utilisation dun domaine


create domain MONTANT decimal(9,2);
create domain MATRICULE char(10);
create table CLIENT ( NCLI
MATRICULE,
COMPTE
MONTANT );

Colonnes obligatoires
Une colonne est facultative par dfaut, il faut dclarer explicitement les colonnes obligatoires
create table CLIENT ( NCLI

char(10) not null);

Valeur par dfaut dune colonne


Sera assigne la colonne si on ne spcifie pas de valeur lors de la cration d'une ligne
create table CLIENT (LOCALITE char(30) not null default 'Paris');

Cl primaire
create table CLIENT ( NCLI
char(10) not null,
primary key (NCLI) );

Identifiants secondaires
create table CLIENT ( NCLI
char(10) not null,
NOM
char(32) not null,
primary key (NCLI),
unique (NOM) );

Cl trangre
create table COMMANDE (NCOM
char(12) not null,
NCLI
char(10) not null,
primary key (NCOM),
foreign key (NCLI) references CLIENT);

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 3 | 11

Synthse de Bases de Donnes

Contraintes de colonne
create table CLIENT (NCLI char(10) not null primary key );
create table COMMANDE (NCOM
char(12) not null,
constraint COMPK primary key (NCOM));

Modification de colonne dune table


alter
alter
alter
alter

table
table
table
table

PRODUIT add column POIDS smallint;


PRODUIT drop column PRIX;
CLIENT modify column CAT set '00';
CLIENT modify column CAT drop default;

Ajout et retrait de contrainte


alter
alter
alter
alter
alter

table
table
table
table
table

PROSPECT add primary key (NCLI);


CLIENT add unique (NOM,ADRESSE,LOCALITE);
CLIENT modify CAT not null;
PROSPECT add constraint PROPK primary key (NCLI);
CLIENT add foreign key (CAT) references CATEGORIE ;

Les index
create index XCLI_LOC on CLIENT (LOCALITE);

Les espaces de stockage


create dbspace CLI_PRO_DAT;
create table CLIENT ( . . . ) in CLI_PRO_DAT;
drop dbspace CLI_PRO_DAT; (Seulement si espace vide)

Le Langage SQL DML


Le sous-langage DML de SQL permet de consulter le contenu des tables et de les modifier. Il comporte 4 verbes :
-

La requte select extrait des donnes des tables


La requte insert insre de nouvelles lignes dans une table
La requte delete supprime des lignes d'une table
La requte update modifie les valeurs de colonnes de lignes existantes

Select
select
select
select
select

LOCALITE CLIENT CAT = 'C1';


distinct LOCALITE CLIENT CAT = 'C1';
NCLI from CLIENT where CAT = null;
NCLI CLIENT where CAT is null

select NCLI from


select NCLI from
select NCLI from

CLIENT where
CLIENT where
CLIENT where

donnera des doublons


pas de doublons
impossible, null ne se compare pas
seule faon de comparer null

CAT in ('C1','C2','C3');
LOCALITE not in ('Toulouse','Breda');
COMPTE between 1000 and 4000;

select NCLI from CLIENT where CAT like 'B_';


remplace un caractre
select NPRO from PRODUIT where LIBELLE like '%SAPIN%'; remplace un string

Alias et donnes calcules


select NPRO as Produit, 0.21*PRIX*QSTOCK as Valeur_TVA

Fonctions SQL
trim(both ' ' from ADRESSE)||' '||upper(LOCALITE)
position('NEUVE' in upper(ADRESSE)) > 0
upper(ADRESSE) like '%'||upper(LOCALITE)||'%'
cast(DATECOM as char(12))
CLI.COMPTE - cast(QCOM*PRIX as decimal(9,2))
extract(year from DATECOM) + 1

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 4 | 11

Synthse de Bases de Donnes

Fonctions agrgatives
select 'Namur',avg(COMPTE) as Moyenne,
max(COMPTE)-min(COMPTE) as Ecart_max,
count(*) as Nombre$
select sum(QSTOCK*PRIX)
select distinct count(NCLI) SERA DIFFERENT DE select count(distinct NCLI)

Les Sous-requtes
Contrairement ce quon pourrait croire,
ceci nest pas un texte qui sert expliquer
le schma d ct, je trouvais juste que
un gros blanc comme a faisait vraiment
moche et je ne voulais pas non plus laisser
un schma qui aurait pris trop de place
sans aucun texte.
Jai hsit raconter ma vie au dbut puis
je me suis dit que au final, ctait toujours
plus intressant que de se manger encore
de la thorie pure parce que cest vrai
quoi, arriv ici dans la synthse, a
commence tre lourd.
En plus, le schma est relativement simple comprendre, il est self-explainatory comme ils disent en anglais
ou un truc du genre (non, je nirai pas vrifier lorthographe).

Formes ngatives des conditions dassociations


Exercice : Quelles sont les commandes qui ne spcifient pas le produit PA60 (qui ne sont pas associes un
dtail spcifiant PA60).
select NCOM, DATECOM, NCLI
from
COMMANDE
where NCOM not in (select NCOM
from
DETAIL
where NPRO = 'PA60');
select NCOM, DATECOM, NCLI
from
COMMANDE
where NCOM in (select NCOM
from
DETAIL
where NPRO <> 'PA60');

Rfrences multiples une mme page


select NCLI, NOM, LOCALITE, COMPTE
from
CLIENT as C
where COMPTE > (select avg(COMPTE)
from
CLIENT
where LOCALITE = C.LOCALITE);

C est une variable qui chaque instant rfrence la ligne courante de CLIENT dans la requte externe (on
suppose qu'on examine successivement les lignes de CLIENT)

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 5 | 11

Synthse de Bases de Donnes

Quantificateurs ensemblistes
Le prdicat exists(E), o E est une sous-requte, est vrai si l'ensemble dsign par E est non vide. Not exists(E),
est vrai si l'ensemble dsign par E est vide.
select NPRO, LIBELLE
from
PRODUIT as P
where exists (select *
from
DETAIL
where NPRO = P.NPRO);

Les jointures
La jointure permet de produire une table constitue de donnes
extraites de plusieurs tables.
select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE
from
COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI;

Cette requte ignore les lignes de client qui nont pas de ligne
correspondante dans COMMANDE.
Les lignes suivantes seront dites clibataires
select '--', NCLI, '--', NOM, LOCALITE
from
CLIENT
where not exists (select * from COMMANDE
where NCLI = CLIENT.NCLI);

On ne peut formuler une non association QUE dans


des sous-requtes.
Une jointure peut, comme une sous-requte, formuler
une condition dassociation.
On peut effectuer une jointure sur des tables qui nont
pas de cl primaire ni trangre.

Les unions
Union permettra davoir la liste de tous les rsultats
diffrents en supprimant les doublons.
Intersect donnera les lments en commun entre les
deux tables seulement, sans doublons.
Except prend uniquement les lments qui nont aucun
doublon. Ici, il renverra GILLET et PONCELET
All permet davoir les doublons sur chacune des commandes prcdentes. Sur except, il permet davoir les
rsultats qui seraient galement dans T1 en plus des deux dj prsents.

Ces oprateurs peuvent tre combins entre eux (ex : diffrence symtrique)

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 6 | 11

Synthse de Bases de Donnes

Les structures cycliques Directes


Dans une table personne, on retrouve une cl trangre qui pointe sur la
mme table (sur la cl primaire). On peut ainsi voir qui est le suprieur
de chaque personne.
create table PERSONNE ( NPERS char (4) not null,
NOM
char(25) not null,
RESPONSABLE char (4),
primary key (NPERS),
foreign key (RESPONSABLE)
references PERSONNE);

Exercice : Associer chaque subordonn le numro et le nom de son responsable.


select S.NPERS, R.NPERS, R.NOM
from
PERSONNE S, PERSONNE R
where S.RESPONSABLE = R.NPERS;

Les structures cycliques Indirectes


Un produit composite peur tre compos de plusieurs produits
composants. On a une table avec tous les produits diffrents et une
table qui nous dit quel composite comporte quels composants. (On le
fait avec des cls trangres)
Pour donner la composition du produit, on va utiliser deux fois la table
produit en la nommant diffremment (H composite et B composant)
create table PRODUIT ( NPRO
LIBELLE
PRIX_U
POIDS_U

char(4) not null primary key,


char(25) not null,
char(4),
char(4));

create table COMPOSITION ( COMPOSE


char(4) not null references PRODUIT,
COMPOSANT char(4) not null references PRODUIT,
QTE
decimal(4) not null,
primary key (COMPOSE,COMPOSANT));

La composition du produit p4 pourra tre donne comme ceci :


select
from
where
and
and

H.NPRO,H.LIBELLE,C.QTE,B.NPRO,B.LIBELLE
PRODUIT H, COMPOSITION C, PRODUIT B
C.COMPOSE = H.NPRO
C.COMPOSANT = B.NPRO
H.NPRO = 'p4';

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 7 | 11

Synthse de Bases de Donnes

Les donnes groupes


On doit obligatoirement effectuer un Group By lorsquon a des fonctions dagrgation et une colonne sans
fonction dagrgation. Le Group By est effectu sur la colonne sans
agrgation.
select LOCALITE, count(*) as NOMBRE_CLIENTS,
avg(COMPTE) as MOYENNE_COMPTE
from
CLIENT
group by LOCALITE;

Having permet de restreindre avec une fonction dagrgation. Il ne sutilise pas sans group by
select LOCALITE, count(*), avg(COMPTE)
from
CLIENT
group by LOCALITE
having count (*) >= 3;
slection des groupes

La requte suivante est donc invalide car il faut galement Group By sur base de QSTOCK
select P.NPRO, QSTOCK - sum(D.QCOM) as SOLDE
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
group by P.NPRO;
Correction : group by P.NPRO, QSTOCK

Ordre et interprtation des requtes SQL


6
1
2
3
4
5
7

select NCLI, count(*), sum(QCOM)


from
COMMANDE M, DETAIL D
where M.NCOM = D.NCOM
and
NPRO = 'PA60'
group by NCLI
having count(*) >= 2
order by NCLI

Cette structure explique pourquoi les alias de select ne peuvent tre utiliss que dans le Order By alors que
ceux de From peuvent tre utiliss partout.

Langage SQL avanc


Le contrle daccs
Une autorisation s'appelle un privilge. Un privilge prcise un objet et les oprations qu'il est possible
d'excuter sur cet objet.
-

l'utilisateur crateur d'un objet (table, vue, index, procdure, etc.) en devient le propritaire; il peut
effectuer sur cet objet toutes les oprations techniquement permises;
le propritaire d'un objet peut accorder un autre utilisateur un privilge sur cet objet pour certaines
oprations;
le propritaire d'un objet peut autoriser l'utilisateur auquel il a accord un privilge transmettre tout
ou partie de celui-ci un troisime utilisateur;
le propritaire d'un objet peut retirer un privilge accord.

grant select, update(QSTOCK,PRIX)


on
PRODUIT
to
P_MERCIER, S_FINANCIERS;

// select autoris sur tout le produit


// update autoris QUE pour QSTOCK et PRIX

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 8 | 11

Synthse de Bases de Donnes


grant
on
to
with

all privileges
// donne toutes les autorisations dont on dispose
CLIENT
P_MERCIER, S_FINANCIERS
grant option;
// donne le droit de donner les autorisation

grant run
on
SUP_DETAIL
to
public;

// donne le droit de lancer des scripts

revoke update(PRIX)
on
PRODUIT
from
P_MERCIER;

dans le dernier cas, si la personne avait transmis ses privilges dautres, il y a 2 cas possibles :
-

Mode cascade : tous les autres seront affects


Mode restrict : seulement lui sera affect

Notion de rles
Privilge associ un rle et rle
associ un utilisateur (permet de grer
les privilges plus simplement).
On peut rvoquer soit un privilge, soit
un rle entier. On ne peut pas donner
une partie de ses privilges, on donne
son rle.

Les vues SQL


Une vue se prsente comme une table virtuelle sans donnes stockes : ses donnes n'existent que lorsqu'on
demande les consulter. Seule sa dfinition est stocke sur disque.
create view COM_COMPLETE(NCOM,NCLI,NOMCLI,LOC,DATECOM)
as select NCOM,COM.NCLI,NOM,LOCALITE,DATECOM
from
CLIENT CLI,COMMANDE COM
where COM.NCLI = CLI.NCLI;

En consultation, une vue se comporte comme une table normale.


-

Vue non matrialise: Quand un traitement demande une vue, il l'excute.


Vue matrialise: vue prcalcule et son rsultat est stock.

Permet:
-

de donner des infos prcises un utilisateur qui n'a pas besoin de tout et qui en a besoin plusieurs fois
en peu de temps
limiter les accs en base de donnes
faire voluer la base de donnes (on cre une vue qui existe comme l'ancienne table existait)
crer des requtes complexes (une fonction agrgative sur le rsultat dune autre ne fonctionne pas)
o on cre une vue sur la 1re agrgative et une requte sur la vue pour la 2e agrgative.
On peut modifier les donnes depuis une vue (pas connaitre conditions)

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 9 | 11

Synthse de Bases de Donnes

Extensions de la structure des requtes SFW


Permet de mettre un select dans un select ou un from
select NCOM, (select sum(QCOM*PRIX)
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
and
D.NCOM = M.NCOM) as MONTANT
from
COMMANDE M
where MONTANT > 1000;
select NCLI, NOM
from ((select NCLI, NOM, LOCALITE from CLIENT)
except
(select NCLI, NOM, LOCALITE from BON_CLIENT)
union
(select NCLI, NOM, LOCALITE from PROSPECT))
where LOCALITE = 'Poitiers';

Permet lutilisation dun oprateur JOIN au niveau du from


-

natural join: peut s'utiliser sur certains SGBD => on va chercher la cl primaire de l'un et rechercher s'il
trouve une colonne avec la mme syntaxe dans une autre table et cre une jointure dessus
cross join: est le produit relationnel (select et from sans where => tous les rsultats)
outer join remplace union

select *
from
CLIENT cross join COMMANDE
where ...
select *
from
CLIENT C join COMMANDE M
on (C.NCLI = M.NCLI)
where ...

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 10 | 11

Synthse de Bases de Donnes

Le modle Entit-Association de base


Principe de fonctionnement
-

le monde est constitu d'objets ou entits


les entits sont classes en types d'entits
les entits d'un type ont des attributs spcifiques
les entits sont en association les unes avec les autres
les associations sont classes en types d'associations.

Les entits
Simples reprsentations de la ralit sous forme dobjet. Pour la gestion
dune cole, les diffrentes entits seraient par exemple : professeur,
tudiant, cours, local, examen.

Les attributs
Permettent de donner un caractre informationnel aux entits. Pour un tudiant, on peut avoir son nom, son
adresse ou une date de naissance.

Les types dassociations


Les entits vont tre lies entre elles par des actions : un tudiant suivra un cours qui se donnera dans un local.
Un dpartement occupera de 0 N employs mais un employ noccupera quun seul dpartement.

Identifiants
Mme principe quune cl primaire, chaque entit aura son ou ses
identifiant(s) propre(s).
-

Une seule entit CLIENT de NumClient donn


Une seule entit VOL de Ligne+Date donnes
Une seule entit PROJET de CodeProjet donn
Une seule entit PROJET de Titre donn

Exemple : Voyages en train (en gros, tu comprends le schma en dessous, tes bien parti)

Ramiro-Gonzalez Maxime 2TL2 2014-2015

P a g e 11 | 11

Vous aimerez peut-être aussi