1 Structure logicielle

publicité
Informatique
Cours S2.7
Bases de données
Les principales capacités développées sont :
• utiliser une application offrant une interface graphique pour créer une base de données et l’alimenter,
• utiliser une application offrant une interface graphique pour lancer des requêtes sur une base de
données,
• distinguer les rôles respectifs des machines client, serveur, et éventuellement serveur de données,
• traduire dans le langage de l’algèbre relationnelle des requêtes écrites en langage courant,
• concevoir une base constituée de plusieurs tables, et utiliser les jointures symétriques pour effectuer
des requêtes croisées.
1 Structure logicielle
Les bases de données sont largement répandues : pages dynamiques sur internet, catalogues en ligne,
données personnelles…
1.1 Structure client/serveur
La base de données (database) est connectée au réseau afin d'être plus largement accessible. L'accès est
contrôlé grâce à un serveur (SGBD : Système de Gestion de Base de Données).
L'utilisateur qui souhaite interroger ou compléter la base de données utilise un logiciel client.
Les instructions émises par le client à la base de données sont appelées des requêtes. En réponse, le
serveur renvoie les données correspondant à la requête (valeurs enregistrées ou collectées).
Les requêtes peuvent être écrites dans un Langage de reQuête Structurée et normalisée SQL (Structured
Query Language).
Client : lance les requêtes
Serveur : stocke les informations et transmet les réponses aux requêtes
[1]
Figure 1 : Relation client-serveur pour une base de données locale (serveur de fichiers iaca du lycée par exemple)
1.2 Structure 3 tiers
La structure 3 tiers repose sur la présence d'une couche intermédiaire (application) entre le client et la base
de données.
Figure 2 : Structure logicielle 3 tiers pour l'interrogation d'une base de données[2].
La structure 3 tiers apporte plusieurs avantages :
- permettre une modification du traitement des données sans modifier la base de données,
- s'adapter à des plateformes hétérogènes (systèmes d'exploitation différents),
- alléger le traitement du client,
- sécuriser la base de données,
- permettre de répartir les charges entre serveurs d'applications.
Lycée Jules Ferry Cannes
Page 1 sur 6
TSI1
Informatique
Cours S2.7
Bases de données
Figure 3 : Relation client-serveur pour des requêtes par internet (demande d'information météo par exemple)
2 Structure des bases de données
2.1 Table
Les bases de données sont structurées sous la forme de tables (ou relations) dont les colonnes
représentent les attributs (ou champs).
Chaque ligne de ces tables représentent les enregistrements successifs de la table. Ces enregistrements
sont appelées les instances.
Exemple la table suivante est composée :
o de 7 attributs (num_sta, nom_usuel…)
o de 3 enregistrements apparents (7005, 7015 et 7020).
Table RADOME
Figure 4 : Table RADOME (coordonnées GPS et altitude des différentes stations de Météo en France)
2.2 Domaine des données
On appelle domaine d'une donnée les contraintes qu'elle doit respecter : type, nombre entre 0 et 1, listes
de valeurs ou de caractère par exemple.
Pour un enregistrement, chaque attribut peut être d'un type différent.
Les types de variables sont nombreux mais peuvent être classés en 5 affinités (sorte de typage
dynamique) [3]:
- TEXT : chaine de caractères,
- INTEGER : entier,
- REAL : nombre à virgule,
- NONE (ou BLOB): du type de ce qui a été saisi,
- NULL : absence de valeur pour l'attribut correspondant
Exemple : num_sta est un INTEGER; nom_usuel est un TEXT, latitude est un REAL.
2.3 Clef primaire
Afin de distinguer chaque enregistrement, on utilise une clef primaire. Il s'agit d'un attribut dont la valeur est
différente pour chaque enregistrement. La clef primaire est généralement un entier positif que l'on
incrémente à chaque nouvel enregistrement.
La clef primaire peut aussi être un texte dont le SGDB s'assurera qu'il n'y a pas de répétition.
Lycée Jules Ferry Cannes
Page 2 sur 6
TSI1
Informatique
Cours S2.7
Bases de données
2.4 Association entre table
Dans une base de données, il existe des liens entre les tables.
Pour indiquer les liens entre tables on peut tracer le schéma relationnel suivant :
clef
primaire
clef
étrangère
Figure 5 : Association des tables RADOME et SYNOP par l'attribut primaire de RADOME
L'association se fait ici par une clef étrangère à SYNOP. Dans SYNOP apparait ainsi l'attribut
RADOME_num_sta. On peut aussi donner le même nom aux attributs qui créent le lien entre 2 tables (ici
ce serait num_sta mais ce n'est pas obligatoire).
Remarque sur l'exemple précédent :
- un enregistrement n'est possible dans SYNOP que pour une station de numéro défini dans
RANDOME; inversement on ne peut supprimer un numéro de station que s'il n'existe aucun
enregistrement dans SYNOP,
- RADOME_num_sta n'est pas une clef primaire car la même station aura plusieurs enregistrements
météorologiques,
- les icônes présents devant les attributs ne sont pas à connaitre et ne sont pas normalisés.
3 Algèbre relationnel et requête SQL
Les commandes SQL qui permettent d'interroger la base de données sont des instructions normalisées.
Les instructions SQL sont insensibles à la casse (pas de distinction entre les minuscules et les
majuscules). Par contre, certains domaines peuvent être paramétrés pour contenir des enregistrements
avec un type sensible à la casse.
Dans la suite de ce cours on écrira les instructions et les tables en majuscules et les attributs en
minuscules mais cela n'a que pour but d'améliorer la lisibilité des instructions.
3.1 Opérateurs relationnels
Projection : Sélection de certaines colonnes (ou élimination d’attributs).
- algèbre relationnel :
←
,
,… ( 1 )
-
requête SQL :
←SELECT
,
,. .. FROM
Exemples : « Quelle est la liste complète des enregistrements de la table RADOME ? »
o
o
!"#)
SQL : SELECT * FROM RADOME ;
Algebre relationnelle :
Lycée Jules Ferry Cannes
∗ (
Page 3 sur 6
TSI1
Informatique
Cours S2.7
Bases de données
« Quels sont les numéros de station et les communes correspondantes ? »
o
o
!"#)
SQL : SELECT num_sta, commune FROM RADOME ;
Algebre relationnelle :
$%&_()*,+,&&%$- (
L'instruction SELECT DISTINCT permet d'éliminer les enregistrements identiques lors de l'affichage.
Exemple : « Quels sont les communes équipés d'au moins une station météo? »
o SQL : SELECT DISTINCT commune FROM RADOME
Sélection (restriction) : Sélection de certaines lignes qui vérifient une condition.
- algèbre relationnel :
←.
/012345/523( 1 )
- requête SQL :
←SELECT ∗FROM
WHERE attribute == condition ;
Exemple : « Quels sont les numéros de station et les villes correspondantes situées dans le var ? »
$%&_()*,+,&&%$- 678é:*;)-&-$) 0<= (>?@ABC)D
o
algèbre relationnel :
o
requête SQL : SELECT
num_sta, commune FROM RADOME
WHERE département == 83 ;
Remarques sur l'écriture des conditions :
- les conditions utilisent les mêmes symboles de comparaison qu'en python : == !=
- les opérations standards + /
*
%
AND OR
NOT
- la concaténation de liste par contre se fait par les symboles
||
>=
<=
Jointure symétrique : Combiner deux tables en une seule table suivant un attribut commun.
- algèbre relationnel : E ← .F .
/0G .
/ ( 1 × R2 )
- requête SQL :
←SELECT ∗FROM
JOIN
ON R1.attribute1 == R2.attribute2 ;
Exemple : « Quelles sont les villes où la vitesse du vent moyen a dépassé les 20 m/s ? »
o algèbre relationnel :
+,&&%$- 67 K.$%&_()*0>L.MNO_PQR (>?@ABC ×
STUQVPPV_TVMQW X (YZ[A\))D
o requête SQL :
SELECT RADOME.commune
FROM RADOME JOIN SYNOP
ON RADOME.num_sta == SYNOP.RADOME_num_sta
WHERE SYNOP.vitesse_vent >20 ;
RADOME.num_sta peut aussi s'écrire num_sta en absence de confusion possible avec un attribut de la
table SYNOP.
De même pour tous les préfixes de la requête ce qui donne :
SELECT commune
FROM RADOME JOIN SYNOP
ON num_sta == RADOME_num_sta
WHERE vitesse_vent >20 ;
On peut changer le nom d'un attribut dans la requête, par exemple RADOME_num_sta en num :
SELECT commune, RADOME_num_sta as num FROM RADOME JOIN SYNOP
WHERE vitesse_vent >20 ON num_sta == num;
Lycée Jules Ferry Cannes
Page 4 sur 6
TSI1
Informatique
Cours S2.7
Bases de données
Fonctions d'agrégation : Ces fonctions qui ne sont pas couvertes par l’algèbre relationnelle classique,
permettent d’effectuer des calculs statistiques basiques sur les valeurs :
MIN, MAX, SUM (somme), AVG(moyenne), COUNT(comptage du nombre de lignes).
La clause GROUP BY permet de rassembler les enregistrements ayant l'attribut spécifié en commun.
La clause HAVING permet d'imposer une condition sur le résultat de l'agrégation (valeur minimum …)
La clause ORDER BY permet de trier l'affichage selon les attributs spécifiés.
Exemple : « Quelle est la ville et la valeur de la pression où la plus haute valeur a été mesurée ? »
o algèbre relationnel :
+,&&%$- ,]" ^(:;-((_,$) 67 K.$%&_()*0>L.MNO_PQR (>?@ABC × YZ[A\)D
o requête SQL :
SELECT RADOME.commune , MAX(SYNOP.pression)
FROM RADOME JOIN SYNOP ON RADOME.num_sta == SYNOP.RADOME_num_sta
ORDER BY RADOME.commune, SYNOP.pression
Bilan : formalisme général d'une jointure symétrique
SELECT <liste d’expressions>
FROM <liste de tables> ON <conditions de jointure>
WHERE <conditions>
GROUP BY <liste d’attributs>
HAVING <conditions>
ORDER BY <liste attributs>
3.2 Opérateurs ensemblistes
Union : Relation contenant les attributs appartenant à R1 ou à R2. Il y a suppression des lignes identiques.
- algèbre relationnel : R3 ← R1 ⋃ R2 :
- Syntaxe SQL : R3 ←R1 UNION R2
Exemple : « Quels sont les numéros de station situés dans le var et celles situées dans les alpesmaritimes ? »
o algèbre relationnel :
$%&_()* 678é:*;)-&-$)0<= (>?@ABC) ⋃ 78é:*;)-&-$) 0bc (>?@ABC)D
o
requête SQL :
SELECT num_sta FROM RADOME WHERE départment=83
UNION SELECT num_sta FROM RADOME WHERE départment=06
Intersection : Relation contenant les lignes appartenant à R1 et à R2.
- algèbre relationnel : R3 ← R1 ⋂ R2 :
- Syntaxe SQL : R3 ←R1 INTERSECT R2
Exemple : « Quels sont les numéros de station situés dans le var et à une altitude supérieure à 70
m? »
o algèbre relationnel :
$%&_()* 678é:*;)-&-$)0<= (>?@ABC) ∩
o
7*f)_)%8-WgX (>?@ABC)D
requête SQL :
SELECT num_sta FROM RADOME WHERE départment=83
INTERSECT SELECT num_sta FROM RADOME WHERE altitude>70
Lycée Jules Ferry Cannes
Page 5 sur 6
TSI1
Informatique
Cours S2.7
Bases de données
Différence : Relation contenant les lignes appartenant à R1 moins celles appartenant à R2.
- algèbre relationnel : R3 ← R1 − R2 :
- Syntaxe SQL : R3 ←R1 EXCEPT R2
Exemple : « Quels sont les numéros de station situés dans le var et qui ne sont pas à une altitude
supérieure à 70 m ? »
o algèbre relationnel :
$%&_()* 678é:*;)-&-$)=<= (>?@ABC)
o requête SQL :
− 7*f)_)%8->kb (>?@ABC )D
SELECT num_sta FROM RADOME WHERE départment=83
EXCEPT SELECT num_sta FROM RADOME WHERE altitude>70
Produit cartésien : R3 ← R1 × R2 : Relation contenant l’ensemble des possibilités d’association entre une
valeur de R1 et une valeur de R2.
On l’utilise notamment pour définir l’opérateur relationnel de type ≪ jointure symétrique≫ (voir partie
précédente).
Références :
[1] P. Beynet, « Informatique ». UPSTI.
[2] « Architecture trois tiers », Wikipédia. 26-févr-2016.
[3] « Query Language Understood by SQLite ». [En ligne]. Disponible sur: http://www.sqlite.org/lang.html.
[Consulté le: 02-mai-2016].
Lycée Jules Ferry Cannes
Page 6 sur 6
TSI1
Téléchargement