Applications de bases de données LAPP
Applications de bases de données LAPP
org/bdd
Application de
bases de données,
principes et
exemples avec
LAPP
[Link]
STÉPHANE CROZAT
I - Cours 3
B. Architecture Web.............................................................................................10
1. Notions d'architecture client-serveur.......................................................................................10
2. Notions d'architecture 3-tier..................................................................................................11
3. Notions de serveur et de client web........................................................................................13
4. Notion d'architecture web......................................................................................................14
5. Architecture LAPP.................................................................................................................14
II - Exercice 15
III - Devoir 19
Questions de synthèse 21
Glossaire 22
Contenus annexes 24
Stéphane Crozat
2
I - Cours I
Définition
Une application de base de données comporte :
1. Une base de données : Elle pose le modèle de données, stocke les données, définit des
vues sur les données (préparation des modalités de lecture)
2. Une application : Elle définit les interfaces homme-machine pour écrire et lire les
données et contient le programme informatique de traitement des données avant
insertion dans la base ou présentation à l'utilisateur.
Fondamental
Base de données
Modèle Vue
Application
Stockage et contrôle Lecture et manipulation
des données des données
Tables Vues
Entrées Triggers Méthodes (RO) Sorties
IHM Types (RO) Fonctions stockées
IHM
SQL, PL/SQL, PL/pgSQL SQL, PL/SQL, PL/pgSQL, VBA
Interface de saisie Affichage graphique
des données des données
Formulaires États
Stéphane Crozat
3
Cours
- Ajouter les vues utiles, pour simplifier l'accès aux données en lecture
- Ajouter des triggers, pour implémenter les contraintes complexes non exprimables
en SQL (lorsque le SGBD le permet, comme Oracle ou PostgreSQL)
- Implémenter les méthodes d'accès aux données (en RO), ou à défaut les
fonctions stockées (en R) permettant de renvoyer les valeurs calculées prévues
par le modèle conceptuel
2. Développement de l'application : traitements, formulaires et états
- Les traitements proches des données sont réalisés dans le langage associé à la BD
s'il existe (PL/SQL, PL/pgSQL, VBA)
- Les traitements proches de l'application sont réalisés dans le langage applicatif
choisi (PHP, Java, VBA & Macros sous Access)
Stéphane Crozat
4
Exemple
Stéphane Crozat
Base de données
5
Cours
Cours
Méthode : Pseudo-code
1 // Écriture de la requête
2 $vSql = "insert into t (a) values (1) ;"
1 // Exécution de la requête
2 $vResult = QUERY($vConn, $vSql)
1 // Test du résultat
2 IF (NOT $vResult) THEN MESSAGE("Échec de l'exécution")
1 // Clôture de la connexion
2 CLOSE ($vConn)
Remarque
La connexion est bien entendu inutile dans le cas de procédure stockées, qui se trouvent par
définition déjà associées à une BD en particulier.
1 <?php
2 function fInsert ($pValue) {
3 // Connexion à la base de données
4 $vHost = "[Link]" ;
5 $vPort = "5432" ;
6 $vData = "myDatabase" ;
7 $vUser = "me" ;
8 $vPass = "secret" ;
9 $vConn = new PDO('pgsql:host=$vHost;port=$vPort;dbname=$vData', '$vUser',
'$vPass');
10 // Écriture, exécution et test de la requête
11 $vSql = "INSERT INTO t (a) VALUES ($pValue)" ;
12 $vResult=$vConn->query($vSql);
13 if (! $vResult) then {
14 echo "Échec de l'insertion" ;
15 return 0 ;
16 }
17 else {
18 return 1 ;
19 }
Stéphane Crozat
6
Cours
20 // Clôture de la connexion
21 $vConn = null ;
22 }
23 ?>
1 class fInsert {
2 public static void main(String[] args) {
3 try {
4 // Connexion
5 [Link] (new OracleDriver());
6 Connection vCon =
[Link]("jdbc:oracle:thin:nf17/nf17@localhost:1521:test");
7 // Exécution de la requête
8 Statement vSt = [Link]();
9 [Link]("INSERT INTO t (a) VALUES ('" + args[0] + "')");
10 }
11 catch (Exception e) {
12 [Link]();
13 }
14 }
15 }
Stéphane Crozat
7
Cours
SELECT A, B, C, D FROM T
A A B C D
Pointeur
ligne 1
ligne 2
...
...
...
...
...
...
ligne N
Graphique 3 Pointeur sur un résultat de requête
Méthode
1. Connexion à la base de données et récupération d'un identifiant de connexion
2. Écriture de la requête de sélection
3. Exécution de la requête sur la connexion ouverte et récupération d'un pointeur sur un
résultat de requête
4. Parcours du pointeur dans une boucle permettant rapporter (fetch) et traiter (afficher
par exemple) le tableau ligne par ligne
5. Clôture de la connexion
Méthode : Pseudo-code
1 // Écriture de la requête
2 $vSql = "select a, b from t;"
1 // Exécution de la requête
2 $vPointeur = QUERY ($vConn, $vSql)
1 // Traitement du résultat
2 IF (NOT $vPointeur) THEN MESSAGE("Échec de l'exécution")
3 ELSE
4 WHILE ($vPointeur)
5 FETCH $vPointeur IN $vResult[]
6 PRINT $vResult[1]
7 PRINT $vResult[2]
8 NEXT $vPointeur
9 END WHILE
10 END IF
1 // Clôture de la connexion
2 CLOSE ($vConn)
Stéphane Crozat
8
Cours
1 <?php
2 function fSelect () {
3 // Connexion à la base de données
4 $vHost = "[Link]" ;
5 $vPort = "5432" ;
6 $vData = "myDatabase" ;
7 $vUser = "me" ;
8 $vPass = "secret" ;
9 $vConn = new PDO('pgsql:host=$vHost;port=$vPort;dbname=$vData', '$vUser',
'$vPass');
10 // Écriture, préparation et exécution de la requête
11 $vSql = "SELECT a, b FROM t;"
12 $vResultSet = $connexion->prepare($vSql);
13 $vResultSet->execute();
14 // Traitement du résultat
15 while ($vRow = $vResultSet->fetch(PDO::FETCH_ASSOC)) {
16 echo $row['a'];
17 echo " ";
18 echo $row['b'];
19 }
20 // Clôture de la connexion
21 pg_close($vConn)
22 }
23 ?>
1 Sub fSelect()
2 vSql = "select a, b from t"
3 Set vRs = [Link]("", vSql).OpenRecordset
4 Do While Not [Link]
5 [Link] [Link](0)
6 [Link] [Link](1)
7 [Link]
8 Loop
9 End Sub
1 class fInsert {
2 public static void main(String[] args) {
3 try {
4 // Connexion
5 [Link] (new OracleDriver());
6 Connection vCon =
[Link]("jdbc:oracle:thin:nf17/nf17@localhost:1521:test");
7 // Exécution de la requête
8 Statement vSt = [Link]();
9 ResultSet vRs = [Link]("SELECT a, b FROM t");
10 // Affichage du résultat
11 while([Link]()){
12 String vA = [Link](1);
13 String vB = [Link](2);
14 [Link](vA + " - " + vB));
15 }
16 }
17 catch (Exception e) {
18 [Link]();
19 }
20 }
21 }
Stéphane Crozat
9
Cours
B. Architecture Web
Objectifs
Comprendre les principes des architectures d'application de bases
de données (en particulier 3-tier et web)
1 - [Link]
Stéphane Crozat
10
Cours
le serveur est le seul maillon faible du réseau client/serveur, étant donné que tout le
réseau est architecturé autour de lui! Heureusement, le serveur a une grande tolérance
aux pannes (notamment grâce au système RAID)
Stéphane Crozat
11
Cours
Remarque
Étant donné l'emploi massif du terme d'architecture à 3 niveaux, celui-ci peut parfois désigner
aussi les architectures suivantes :
Partage d'application entre client, serveur intermédiaire, et serveur d'entreprise
Partage d'application entre client, base de données intermédiaire, et base de données
d'entreprise
Stéphane Crozat
12
Cours
Fondamental
Un serveur web sert à rendre accessibles des pages web sur internet via le protocole
HTTP.
Remarque
Un serveur web répond par défaut sur le port 80.
Exemple
Apache : logiciel libre fondation Apache, la moitié des sites web au monde
Nginx : logiciel libre BSD, en croissance
IIS : logiciel propriétaire Microsoft
Stéphane Crozat
13
Cours
5. Architecture LAPP
Définition : Définition
On appelle une architecture LAPP une architecture qui s'appuie sur :
Linux pour le système d'exploitation
Apache pour le serveur Web
PostgreSQL pour la base de données
PHP pour le langage applicatif
2 - [Link]
Stéphane Crozat
14
II - Exercice II
Pré-requis
La réalisation de cet exercice nécessite un ordinateur sous Linux avec un accès root et un
serveur PostgreSQL installé. Les commandes sont spécifiées pour une distribution Debian ou
Ubuntu.
Rappels Linux
Utiliser Linux - p.24
Commandes de bases sous Linux : cd, ls, mkdir, rm, find, cat, nano... - p.24
Rappels Postgres
Présentation de PostgreSQL - p.26
Installation de PostgreSQL - p.27
Le client textuel "psql" - p.28
PostgreSQL sous Linux - p.29
Serveur web
L'objectif de cette partie est d'avoir un serveur web capable de distribuer des page HTML.
Installez le serveur web Apache.
Tester l'accès au serveur Web en entrant l'adresse web dans un navigateur : [Link]
Question 1
L'installation par défaut du serveur web permet de servir les fichiers situés dans le dossier
/var/www/html.
Déposez un fichier HTML de votre choix dans ce dossier et accédez-y via votre navigateur Web.
Indices :
Un exemple de fichier XHTML - p.29
Si votre fichier s'appelle [Link] et qu'il se trouve à la racine du serveur web
/var/www/html vous y accéderez par l'adresse [Link]
3 - [Link]
4 - [Link]
Stéphane Crozat
15
Exercice
PHP
L'objectif de cette partie est d'avoir un interpréteur PHP en mode développement, c'est à dire
qui affiche les erreurs quand il y en a.
Installez l'interpréteur PHP pour Apache.
Question 2
Créez le fichier [Link] ci-après et déposez-le sur votre serveur web. Faites un test
d'accès.
1 <?php
2 echo "Hello world";
3 ?>
Question 3
Créez et testez le fichier [Link] ci-après. Ce fichier permet de visualiser la configuration
PHP du serveur.
1 <?php
2 phpinfo();
3 ?>
Question 4
Par défaut l'installation d'un interpréteur PHP est en mode production et il n'affiche pas les
erreurs. Il faut donc changer la configuration pour passer en mode développement.
1. À l'aide du fichier [Link] précédent trouvez l'endroit où est stocké sur votre
ordinateur le fichier de configuration [Link].
Par exemple : /etc/php/7.0/apache2/[Link]
2. Éditez ce fichier en tant que root: sudo nano [Link]
3. Remplacez le paramètre display_errors = Off par display_errors = On
4. Relancez le serveur web : sudo service apache2 reload
Question 5
Il est également nécessaire d'installer un complément à PHP pour qu'il se connecte à
PostgreSQL.
PostgreSQL
L'objectif de cette partie est d'avoir une base PostgreSQL prête à être utilisée par un
programme PHP.
Question 6
Créez un utilisateur test et une base test. Connectez-vous à la base.
Stéphane Crozat
16
Exercice
4 conditionnement integer,
5 PRIMARY KEY (nom)
6 );
7
8 INSERT INTO medicament (nom,description,conditionnement)
9 VALUES ('Chourix','Médicament contre la chute des choux',13);
10
11 INSERT INTO medicament (nom,description,conditionnement)
12 VALUES ('Tropas','Médicament contre les dysfonctionnements intellectuels',42);
L'objectif de cette partie est d'exécuter un programme PHP capable de lire le contenu de la
table medicament de notre base de données test.
Question 7
Créez le fichier [Link] suivant (avec l'éditeur gedit par exemple) et déposez-le sur votre
serveur web. Accédez-y avec un client web pour exécuter le programme.
1 <?php
2
3 /** Connexion **/
4 $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test',
'test');
5
6 /** Préparation et exécution de la requête **/
7 $sql = "SELECT nom FROM medicament;";
8 $resultset = $connexion->prepare($sql);
9 $resultset->execute();
10
11 /** Traitement du résultat **/
12 while ($row = $resultset->fetch(PDO::FETCH_ASSOC)) {
13 echo $row['nom'];
14 echo " ";
15 }
16
17 /** Déconnexion **/
18 $connexion=null;
19
20 ?>
21
22
L'objectif de cette partie est d'exécuter un programme PHP capable de modifier le contenu de
la table medicament de notre base de données test.
Question 8
Créez le fichier [Link] et testez-le (exécutez-le au moins deux fois).
1 <?php
2
3 /** Connexion **/
4 $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test',
'test');
5
6 /** Préparation et exécution de la requête **/
7 $sql = "INSERT INTO medicament (nom) VALUES ('Nouveau')";
8 $result = $connexion->query($sql);
9
10 /** Traitement du résultat **/
11 if ($result) {
12 echo "'Nouveau' inséré";
13 }
14 else {
15 echo "Erreur lors de l'insertion";
16 }
17
18
Stéphane Crozat
17
Exercice
Question 9
Vérifiez que l'insertion a fonctionné en appelant [Link].
Stéphane Crozat
18
III - Devoir III
Préambule
Ce devoir propose d'utiliser un site web gratuit chez [Link], n'importe quel autre
hébergeur peut être librement utilisé pour l'exercice.
Remarque : ce cours ne traite pas de sécurité informatique, mais notez que si, comme dans
cet exercice, vous utilisez le protocole FTP pour transmettre des informations, tout passe en
clair sur le réseau, y compris le mots de passe d'accès. Il est donc impératif de choisir un mot
de passe unique pour ce compte.
5 - [Link]
6 - [Link]
Stéphane Crozat
19
Devoir
4. Sélectionnez tous les fichiers et glissez-déposez-les dans votre répertoire distant test.
5. Attendez que tous les fichiers soient transférés.
6. Consultez votre site avec un navigateur web à l'adresse de votre site plus /test, par
exemple : [Link]
Stéphane Crozat
20
Questions de
synthèse
Quelle sont les atouts d'une architecture 3-tier par rapport à une architecture client-serveur
classique ?
Stéphane Crozat
21
Glossaire
Client
Un client est un programme informatique qui a pour fonction d'envoyer des requêtes à un
autre programme informatique, appelé serveur, d'attendre le résultat de cette requête et de
traiter le résultat de la requête. Notons qu'un programme peut-être client vis à vis d'un
programme et serveur vis à vis d'un autre. On ne prend pas ici le terme client dans son
acception matérielle, qui signifie alors un ordinateur qui a pour fonction d'héberger des
programmes clients.
RAID
La technologie RAID permet de repartir de l'information à stocker sur plusieurs "petits"
disques, au lieu de la concentrer sur un seul "gros" disque. Cette technologie permet donc
d'améliorer les performances (les accès disques pouvant être parallélisés) et d'améliorer la
sûreté (en repartissant les risques de crash et en jouant sur une redondance des données). Il
existe plusieurs types d'architecture RAID, privilégiant ou combinant la parallélisation et la
redondance.
Serveur
Un serveur est un programme informatique qui a pour fonction de recevoir des requêtes d'un
autre programme, appelé client, de traiter ces requêtes et de renvoyer en retour une réponse.
Notons qu'un programme peut-être serveur vis à vis d'un programme et client vis à vis d'un
autre. On ne prend pas ici le terme serveur dans son acception matérielle, qui signifie alors un
ordinateur qui a pour fonction d'héberger des programmes serveurs.
Stéphane Crozat
22
Signification des
abréviations
- BD Base de Données
- E-A Entité-Association
- R Relationnel
- RO Relationnel-Objet
- SQL Structured Query Language
- UML Unified Modeling Language
Stéphane Crozat
23
Contenus annexes
- Utiliser Linux
Pour utiliser Linux, il y a plusieurs possibilité :
Avoir accès à un PC sur lequel Linux est déjà installé (il suffit de disposer d'un compte
utilisateur sur cet ordinateur).
Installer Linux sur son ordinateur :
- En téléchargeant en installant une distribution (il faut savoir préalablement graver
un DVD ou créer une clé USB bootable) ;
- En commandant un DVD ou une clé USB (coût de quelques euros) ;
- En participant à une install party (organisées par des associations, elles permettent
de se faire aider dans le processus d'installation et la prise en main initiale de
l'environnement).
Installer Linux sur son ordinateur en double-boot (à coté de son OS initial, on choisit au
démarrage quel système on utilise).
Installer Linux sur son ordinateur dans une machine virtuelle (par exemple : on peut
utiliser Linux dans un fenêtre Windows).
Installer Linux sur une clé en version live USB persistant.
- Commandes de bases sous Linux : cd, ls, mkdir, rm, find, cat, nano...
Le manuel !
La commande man permet d'afficher le manuel d'une autre commande.
Par exemple man ls permet d'afficher les option de la commande ls, et man man est l'affichage
du manuel du manuel.
7 - [Link]
8 - [Link]
virtuelle
Stéphane Crozat
24
Contenus annexes
Gestion de fichiers
pwd savoir où je me situe dans l'arborescence
cd aller quelque part dans l'arborescence
- cd /home aller dans /home (déplacement absolu)
- cd me aller dans le répertoire me fils de mon répertoire courant (déplacement
relatif)
- cd .. remonter dans l'arborescence (déplacement vers son père)
- cd ~ permet de retourner dans son dossier initial (retour au domicile)
ls voir les fichiers et dossiers dans mon dossier actuel (sauf les fichiers cachés
commençant par un .)
ls -al voir tous les fichiers et dossiers dans mon dossier actuel avec leurs informations
associées (vue détaillée)
touch file créer un fichier file
rm file supprimer le fichier file dans mon dossier actuel
mkdir dir créer un nouveau dossier dir dans mon dossier actuel
rm * supprimer tous les fichiers de mon dossier actuel
rm -R dir supprimer le dossier dir dans mon dossier actuel
cat file afficher le contenu du fichier file
more afficher le contenu du fichier file en mode paginé
less afficher le contenu du fichier file en mode défilement
Édition de fichiers
nano file
- Éditeur dans le terminal (simple d'utilisation)
- Les commandes sont indiqués en bas de l'éditeur
gedit file &
- Éditeur graphique
- Utiliser une extension de fichier standard ou le menu Affichage > Mode de
coloration pour obtenir une visualisation adapté au type de fichier édité (par
exemple .sql pour un fichier SQL)
Rechercher un fichier
find / -name '*test*' permet de rechercher un fichier contenant la chaîne test sur
tout le disque
find ~ -name '*test*' permet de rechercher un fichier contenant la chaîne test dans
son espace personnel
Complément
Agir en tant que root (su / sudo) - p.25
Installer des applications sous Linux - p.26
Stéphane Crozat
25
Contenus annexes
Tous les système ont en commun le premier de ces utilisateurs : root, l'administrateur du
système qui possède tous les droits.
Syntaxe : su
Pour se connecter en tant qu'utilisateur root (et pouvoir faire les opérations qui lui sont
réservées) : su root.
Le mot de passe de utilisateur root est demandé par le système.
Syntaxe : sudo
Pour exécuter une commande en tant que root sans changer d'user : sudo commande.
Le mot de passe de utilisateur lançant sudo est demandé par le système.
Seuls certains utilisateurs appelés sudoers ont le droit d'exécuter la commande sudo.
Pour ajouter un utilisateur dans la liste des sudoers, excéuté en tant que root (ou via un
autre utilisateur sudoers) :
- adduser user sudo (en tant que root)
- sudo adduser user sudo (avec un utilisateur déjà membre des sudoers)
1 sudo apt-get install virtualbox lftp cups-pdf pdftk dia gimp git
- Présentation de PostgreSQL
PostgreSQL est :
un SGBDR
libre (licence BSD)
multi-plate-formes (Unix, Linux, Windows, MacOS, ...)
puissant
Stéphane Crozat
26
Contenus annexes
Fonctionnement général
PostgreSQL comme la grande majorité des SGBD est un logiciel client-serveur. Il faut donc
pour l'utiliser un serveur (programme postgresql sous Linux) et un client.
Il existe plusieurs clients, les deux plus utilisés sont le client textuel psql et le client graphique
PgAdmin III.
Complément
[Link]
[Link]
- Installation de PostgreSQL
Attention
Nous présentons ici une installation a minima de PostgreSQL uniquement à des fins
de test et d'apprentissage, et pour un usage local. Pour mettre en production une
base de données PostgreSQL sur le réseau, il faut suivre des directives
supplémentaires, notamment pour assurer la sécurité du système, sa sauvegarde...
Ces thèmes ne sont pas abordés dans le cadre de ce cours.
PostgreSQL est à l'origine une base de données conçue pour Unix, son installation et son
fonctionnement sont possibles aujourd'hui sur les trois OS, mais Linux reste son
environnement de prédilection. C'est l'architecture PostgreSQL sur Linux qui est étudiée ici.
[Link] 13
Complément
[Link]
9 - [Link]
10 - [Link]
11 - [Link]
12 - [Link]
13 - [Link]
14 - [Link]
Stéphane Crozat
27
Contenus annexes
Si le client et le serveur sont sur la même machine, le client peut bien entendu se
connecter au serveur localhost sur le port 5432.
Définition : psql
psql est le client textuel de PostgreSQL.
Complément
La commande psql utilisée sans paramètre se connecte au serveur localhost avec pour nom de
database et pour nom de user le nom de l'utilisateur du système qui invoque la commande
(utilisateur Linux typiquement).
me@mypc:~$ psql équivaut à : me@mypc:~$ psql -h localhost -d me -U me
1 dbnf17p015=> SELECT *
2 dbnf17p015-> FROM maTable
3 dbnf17p015-> ;
On notera dans psql la différence entre les caractères => et -> selon que l'on a ou pas effectué
un retour chariot.
15 - [Link]
Stéphane Crozat
28
Contenus annexes
Complément
[Link] 16
1 #!/bin/sh
2 psql -c "DROP DATABASE mydb"
3 psql -c "CREATE DATABASE mydb"
4 psql -c "GRANT ALL PRIVILEGES ON DATABASE mydb TO user1"
Exemple : Corps
1 <html xmlns="[Link]
2 <head>
3 <title>Exemple de fichier XHTML</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5 </head>
6 <body>
7 <p>Hello world !</p>
8 </body>
9 </html>
16 - [Link]
Stéphane Crozat
29