Introduction aux bases de données relationnelles

publicité
Introduction aux bases de données relationnelles
O Gense
9 mai 2014
Table des matières
1
Avant propos
2
2
Un exemple
2
3
4
2.1
2.2
2.3
2.4
2.5
Une base de données .
Des requêtes simples .
Séléction . . . . . . . .
Requêtes combinées . .
Requêtes avec jointure
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
4
4
4
Algèbre relationnelle
5
Architecture Client-serveur
7
3.1 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Algèbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Architecture de trois tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
5
5
7
7
7
1 Avant propos
Avant propos
Un des objectifs de l'informatique est la gestion et le traitement de l'information.
Nous avons déjà vu une organisation hiérarchique de l'information avec la structure arborescente des
chiers
Nous allons voir les notions élémentaires sur les bases de données relationnelles.
Nous utiliserons SQLITE à travers l'extension SQLite Manager de Firefox.
Nous disposerons de deux notions :
Les relations qui contiennent eectivement l'information.
Un langage de requête, le SQL
Sigle de Structured Query Language,
en français langage de requête structurée)
2 Un exemple
2.1 Une base de données
Nous allons commencer par un exemple très simple.
Nous allons modéliser le déroulement d'une semaine dans un centre de vacances.
Une première relation
La première information que nous avons sont les conditions météo
Météo :
date
1
2
3
4
5
6
ciel
soleil
soleil
nuage
pluie
pluie
nuage
vent
calme
fort
fort
calme
fort
calme
temps
chaud
tiède
tiède
froid
froid
tiède
Vocabulaire :
Un tableau comme celui là est une relation .
La première ligne est la lignes des attributs .
{ date,ciel,vent,temps} est le schéma relationnel de la relation Météo, c'est une relation d' arité 4.
Les autres lignes sont des enregistrements , leurs cases sont des champs .
Un enregistrement d'une relation R est une famille indexée par le schéma relationnel de R.
L'ensemble des valeurs possibles pour les champs s'appelle un domaine .
Nous nous intéressons aussi aux activités des membres,
Activités : Id date membre activité
0 1
Luc
sieste
1 1
Jose
planche
2 1
Marc
planche
Luc
voile
3 2
4 2
Jose
planche
5 2
Marc
planche
6 3
Luc
planche
7 3
Jose
nage
2
8
9
10
11
12
13
14
15
16
17
3
4
4
4
5
5
5
6
6
6
Marc
Luc
Jose
Marc
Luc
Jose
Marc
Luc
Jose
Marc
pêche
pêche
sieste
planche
voile
planche
planche
voile
planche
planche
Remarquez l'attribut champs Id qui prend une valeur diérente pour chaque enregistrement, on parle de
clé primaire.
Chaque table table doit posséder une telle clé primaire , dans la table précédente la date joue le rôle de
clé primaire.
L'ensemble des deux relations précédentes forment une base de données que nous appellerons Stage.
On dit que le schéma de la base de données Stage est
{Météo[date ciel vent temps] ;Activités[Id date membre activité]}
On peut représenter notre base de données par le schéma
Météo
* |date
Activités
* |Id
| ciel
|date
| vent
|membre
| temps
|activité
Les * désignent les clés primaires et les èches, les champs qui sont reliés.
À savoir faire
1. Créer une base de données vide avec SQLite manager.
2. Créer un relation (table)
3. Remplir une petite table à la main
4. Importer un chier .CSV pour remplir une table.
2.2 Des requêtes simples
Maintenant que nous avons nos tables voyons comment on peut les interroger.
Pour cela nous utiliserons le langage SQL
Des requêtes simples
Pour accéder aux enregistrement de la table Météo , on utilisera la commande
SELECT * FROM Météo
Si on ne veut que les champs vent et temps, on utilisera
SELECT vent,temp FROM Météo
Si on ne veut pas de répétition, on fera
SELECT DISTINCT vent,temp FROM Météo
Remarque :
Pour les commandes, SQL ne tient pas compte de la casse des caractères.
3
2.3 Séléction
Qui a fait une sieste ?
On peut mettre une condition pour sélectionner les enregistrements qui nous intéresse .
Par exemple pour savoir qui a fait au moins une sieste, on fera
SELECT DISTINCT membre FROM Activités
WHERE activité='sieste'
Si on veut savoir quels sont les jours où il y a eu de la pluie, on fera
SELECT date FROM Météo WHERE ciel='pluie'
À savoir faire
Faire une requête SQL
Comment déterminer le vent et la température les jours de pluie ?
Exporter le résultat d'une requête dans un chier .csv
Créer une vue avec une requête SQL.
Une vue est une table virtuelle créée par une requête, elle est utilisable dans d'autres requêtes.
2.4 Requêtes combinées
Requêtes combinées
Il est aussi possible de combiner plusieurs requêtes pour en construire une plus complexe.
Par exemple si on veut savoir qui n'a jamais de sieste, il va falloir comparer la liste des membres avec
ceux qui ont fait au moins une sieste.
SELECT DISTINCT membre FROM Activités
WHERE membre NOT IN
( SELECT membre FROM Activités WHERE activité ='sieste')
2.5 Requêtes avec jointure
Si on veut savoir : Qui a fait de la planche un jour de pluie ?
Il faut relier les deux tables ( "to join" in english )
pour cela nous indiquons comment les tables sont liées, ici il s'agit des dates qui doivent être identique
dans les deux tables.
SELECT DISTINCT activités.membre
FROM Météo JOIN activités ON Météo.date=activités.date
WHERE Météo.ciel='pluie'
AND activités.activité='planche'
Une autre question
Qui, un jour, a fait la même activité que Marc ?
Il est aussi possible de créer une table temporaire
CREATE TEMP table <nom la table > AS SELECT ....
Faisons une petite statistique
La question : pour chacune des activités , combien de fois a elle était choisie.
La commande SQL correspondante est
SELECT activité, COUNT(activité)
FROM activités GROUP BY activité
4
3 Algèbre relationnelle
3.1 Vocabulaire
Vocabulaire
Précisons notre vocabulaire.
Dénition 1 (Attribut - Domaine). Un attribut est identiant ( nom)
Un domaine est un ensemble non vide.
Il s'agit de la nature des informations à stocker, les principaux domaines que l'on peut rencontrer sont
les nombres entiers
les nombres à virgule
les dates
les chaînes de caractères
Dénition 2 (Enregistrement). Étant donnés n ∈ N∗ ,
un ensemble de n d'attributs N = {nom1 , . . . , nomn }
et n domaines D1 , . . . , Dn
on appelle Enregistrement de type {(nom1 , D1 ), . . . , (nomn , Dn )}
toute famille R indexée par N vériant , pour tout i , Rnomi noté aussi R.moni soit dans Di
nom1 , . . . , nomn sont les noms des champs de la relation R
Par exemple
Un tableau informatique de 10 cases peut être vus une relation indexée par les entiers de 0 a 9 .
Un vecteur de R3 comme une relation indexé par les clés {x, y, z} à valeurs dans le domaine Nombre réel.
Dénition 3 (Relation). Une relation R est un ensemble ni d'enregistrements du même type.
Ce type est aussi appelé schéma relationnel de R
Voici une exemple de relation de type {(nom,string),(prénom,string),(age,entier) } écrite en tableau
nom
Celui
Celui
Cet
Remarque : L'ordre des champs n'est pas
prénom nom
même table peut s'écrire : là
Celui
...
...
prénom
là
ci
Autre
age
25
15
35
signicatif , seuls comptent le nom et le type des champs, la
age
25
...
Dénition 4 (Clé primaire). Soit une relation R et c l'un des ses attributs
c peut être utilisé comme clé primaire de R si et seulement si l'application f ∈ R 7→ f.c est injective.
Dans l'exemple ci dessus prénom et age peuvent être utilisés comme clé primaire mais pas nom.
Les clés primaires permettent d'identier de façon unique une relation, cela est utile sur des grandes tables
munies d'index.
Dénition 5 (Base de données). Une base de données est un ensemble ni de relations
3.2 Algèbre relationnelle
Opérations sur les relations
Les requêtes SQL sont basées sur un certain nombre d'opérations sur les relations.
L'ensemble des ces opérations forment l'algèbre relationnelle.
On a déjà des opérations ensemblistes classiques
L'union de deux relations ayant le même schéma relation relationnel.
On l'obtient en SQL avec un commande du type
5
SELECT ... FROM ... UNION SELECT ... FROM ...
Le produit cartésien de deux relations
On l'obtient en SQL avec un commande du type
SELECT R1.C1,..,R1.CN,R2.c1,.. FROM R1,R2
En général on évite car il crée vite des résultats énormes
Autres opérations
La sélection σcond (R) = {f ∈ R |cond(f )}
La sélection permet de choisir les enregistrement suivant une condition
Exemple
R
nom
Celui
Celui
Cet
prénom
là
ci
Autre
σage>20 (R)=
nom prénom
Celui là
Cet
Autre
age
25
15
35
age
25
35
Code SQL
SELECT * FROM R WHERE age> 20
La projection : C 0 étant une partie de C la projection suivant C 0 de R est : πC 0 (R) = {(fn )n∈C 0 , |f ∈ R}
La projection sert à supprimer des attributs.
Exemple
R
nom prénom age
Celui là
25
Celui ci
15
Cet
Autre
35
πnom,prénom (R)=
nom prénom
Celui là
Celui ci
Cet
Autre
Commande SQL
SELECT nom,prenom FROM R
La jointure R et R0 étant deux relations et cond étant une relation liant les champs de R et R0 ,
pose R ./cond S = σcond (R × S)
Exemple
Pour R1 = a b et R2 = c
1 1
1
2 4
2
R1 ./R1.a=R2.c R2 = R.a R.b
1
1
2
4
d
-1
-2
R'.c R'.d
1
-1
2
-2
Cela permet d'indiquer les liens existants entres les champs des diérentes tables
Code SQL
SELECT * FROM R1 JOIN R2 ON R1.a=R2.c
6
NB : Le code LATEXpour ./ est \bowtie
La jointure est programmée de façon plus ecace que d'appliquer sa dénition.
Il aussi possible de changer les attributs d'une relation.
Exemple
SELECT a AS abscisse , b AS ordonnee FROM R
4 Architecture Client-serveur
4.1 Principe
En général, contrairement à l'exemple que l'on a vu , la base de données n'est directement sur la machine
sur laquelle on travaille.
Par exemple wikipédia est une base de données d'articles consultable par le WEB.
Architecture Client-Serveur
On parle d'architecture Client-Serveur quand deux programmes communiquent directement.
Les deux programmes peuvent être sur la même machine ou non.
On utilise le client pour faire une requête, de façon adapté à l'humain, sans avoir à connaître l'organisation des données.
Le client transmet la requête au serveur qui lui renvoie la réponse.
Le client transmet la réponse à l'utilisateur.
4.2 Inconvénients
La diculté de la méthode Client-Serveur est que les deux programmes doivent être compatibles.
En particulier il faudrait installer sur chaque machine un Client pour chacune des bases susceptibles
d'être consultées à partir cette machine.
Suivant le système d'exploitation, on n'est pas sur que le client soit développé
4.3 Architecture de trois tiers
Pour éviter ces problèmes, on utilise l'architecture des trois tiers ou plus précisément l'architecture des
trois niveaux
Premier niveau
Le premier niveau est l'interface, en général il s'agit d'un navigateur WEB.
Deuxième niveau
Le deuxième niveau est celui de l'application , elle sert d'intermédiaire entre l'interface et le serveur.
Troisième niveau
Le troisième niveau est le serveur, c'est le programme qui accède aux données.
L'avantage de l'architecture en trois niveaux est que seule l'application a besoin d'être spécialisée,
Pour l'interface , un navigateur web sut
Pour le serveur un gestionnaire standard de bases de données peut être utilisé.
7
Téléchargement