Vous êtes sur la page 1sur 87

Conception et

Création de
Bases de
Données

L. Mouchard
Conception et Création de Bases de Données
(Licence Biologie 2ème année)

L. Mouchard

Batiment Extension Biologie - 1er étage


Heures pédagogiques : jeudi 14h-17h
Laurent.Mouchard@univ-rouen.fr
http://perso.impg.prd.fr/ABISS/Laurent.Mouchard/Cours/Ba Do/

Année 2004-2005
Contenu du cours du 6 novembre 2004

Conception et
Création de
Bases de
1 Organisation de l’UE
Données

L. Mouchard
2 Concepts génériques
base de données
Organisation
de l’UE est-ce si simple ?
Concepts principe client-serveur
génériques
base de données
est-ce si
3 Langage SQL
simple ?
principe
client-serveur
pourquoi ?
Langage SQL LES langages
pourquoi ?
LES langages
schémas
schémas

Première base 4 Première base de données


de données
conception
conception
insertion dans
une table insertion dans une table
affichage
affichage
Organisation de l’Unité d’Enseignement

Conception et
Création de
Bases de
Données Cours
L. Mouchard
concepts génériques des bases de données ;
Organisation bases du langage structuré de requêtes SQL ;
de l’UE
Travaux dirigés (apprentissage du langage SQL)
Concepts
génériques descriptif approfondi des fonctions SQL ;
base de données
est-ce si exercices de conception de bases de données ;
simple ?
principe normalisation des relations et construction des tables ;
client-serveur
construction des requêtes SQL.
Langage SQL
pourquoi ? Travaux pratiques (pratique du langage SQL)
LES langages
schémas mise en pratique des TD sous MySQL ;
Première base
de données
requêtes et vérifications sous phpMyAdmin ;
conception réalisation pratique d’une base de données « grandeur
insertion dans
une table nature ».
affichage
Qu’est-ce qu’une base de données (relationnelle) ?

Conception et c’est généralement un ensemble de données :


Création de
Bases de
de taille importante ;
Données organisé (on dit également structuré) ;
L. Mouchard interrogeable grâce à un langage de requêtes ;
Organisation
elle constitue une représentation du monde réel, qui , dans sa
de l’UE version relationnelle, manipule des entités, par exemple :
Concepts étudiant ;
génériques
base de données
enseignant ;
est-ce si
simple ?
cours.
principe
client-serveur et des associations entre ces entités, par exemple :
Langage SQL suivre : un étudiant suit un cours ;
pourquoi ?
LES langages donner : un enseignant donne un cours ;
schémas
noter : un enseignant note un étudiant.
Première base
de données etudiant note enseignant légende : entité
conception suit donne association
insertion dans
une table cours
affichage
Qu’est-ce qu’un SGBD ?

Conception et
Création de un SGBD (Système de Gestion de Bases de Données) est un
Bases de
Données
ensemble logiciel (un ensemble de programmes) qui permet :
L. Mouchard le stockage des informations ;
la gestion des entités et des mécanismes souples pour
Organisation représenter les associations (dans le modèle relationnel) ;
de l’UE
l’affichage de tout ou partie de la base de données ;
Concepts
génériques Voici quelques exemples de SGBD : Access (beurk), DBase,
base de données
est-ce si
simple ?
Ingres, Informix, mSQL, MySQL, Oracle, O2 , PostgresQL,
principe
client-serveur
Sybase, ...
Langage SQL le modèle relationnel n’est pas le seul possible : nous pouvons
pourquoi ?
LES langages
considérer les éléments de la base comme des objets, de
schémas
définir les méthodes propres à leur utilisation et aux
Première base
de données interactions entre les objets (équivalentes aux associations
conception
insertion dans
dans le modèle que nous avons ébauché). C’est le cas par
une table
affichage
exemple de la base O2 (qui est Orientée-Objet).
Est-ce si simple ?

Conception et
Création de
Bases de
Données Nous venons de décrire rapidement ce que pourrait être
L. Mouchard une base de données :
Organisation quelques entités (étudiants, enseignants, cours) ;
de l’UE
quelques associations (suivre, donner, noter) entre les
Concepts
génériques
entités ;
base de données
est-ce si
mais suffit-il de mettre des noms en face des entités pour
simple ?
principe que le tour soit joué ?
client-serveur

Langage SQL l’entité cours n’est sans doute pas satisfaisante : cours,
pourquoi ?
LES langages TD ou TP ;
schémas

Première base
l’association noter n’est pas satisfaisante : un enseignant
de données
conception
ne note pas un étudiant mais note : un contrôle continu,
insertion dans
une table un compte-rendu de TP ou un examen final ;
affichage
Pourquoi utiliser une base de données ?

Conception et
Création de Parce que :
Bases de
Données les données sont séparées (chaque entité est représentée
L. Mouchard par une table indépendante des autres données) et donc
Organisation réutilisables ;
de l’UE

Concepts
les données sont spécifiées : les « attributs » d’une entité
génériques sont connus et contraints ;
base de données
est-ce si
simple ? les données sont sécurisées : les transactions concurrentes
principe
client-serveur sur les données sont efficacement gérées ;
Langage SQL
pourquoi ? les mécanismes d’importation/exportation des données
LES langages
schémas existent et permettent d’alimenter efficacement les tables ;
Première base
de données
les mécanismes génériques d’interrogation des données
conception
insertion dans
sont déjà développés, le temps de développement d’une
une table
affichage application est par conséquent réduit ;
possibilités d’interfaçage www...
Modèle client-serveur

serveur
Conception et















Création de















client








1. émission 2. réception


Bases de


















requête requête requête



































Données


















internet 3. traitement





5. réception 4. émission





réponse réponse réponse





L. Mouchard



































Organisation
de l’UE

Concepts client : Le client peut interroger le serveur en utilisant :


génériques
base de données un langage de requêtes structuré (compatible avec la
est-ce si
simple ? norme ANSI SQL)
principe
client-serveur un langage de programmation classique doublé d’un
Langage SQL connecteur spécifique (DBC : DataBase Connectivity) :
pourquoi ?
LES langages ODBC pour le langage C, JDBC pour Java et équivalents
schémas
pour les langages C++, Delphi, Perl, Python, TCL, ...
Première base
de données Le client peut être installé sur tout type de système
conception
insertion dans
une table
d’exploitation (Windows, Mac OS, Linux, OS/2, ...), il
affichage
interagit le plus souvent avec le serveur au travers d’un
mécanisme réseau.
Modèle client-serveur

Conception et
Création de
Bases de
Données

L. Mouchard
serveur : c’est le « coeur » du SGBD, il :
Organisation attend les sollications des clients, éventuellement
de l’UE
nombreux, et provenant de divers systèmes d’exploitation ;
Concepts
génériques
effectue les recherches correspondantes dans la base ;
base de données retourne la réponse correspondante au client dans un
est-ce si
simple ? format indépendant du système d’exploitation.
principe
client-serveur

Langage SQL
il est assez facile d’étendre ce modèle pour que plusieurs
pourquoi ? serveurs se répartissent la charge et répondent de façon
LES langages
schémas efficace aux sollicitations des multiples clients (comme les
Première base
de données
moteurs de recherche par exemple).
conception
insertion dans
une table
affichage
Le langage de requêtes SQL (Structured Query
Language) : le pourquoi d’un tel langage
Conception et
Création de
Bases de
Données si l’on souhaite que le client et le serveur se comprennent,
L. Mouchard
quelque soit le système d’exploitation des machines sur
Organisation lesquels ils sont installés, il faut que le langage qui leur
de l’UE
serve à s’échanger requêtes et réponses aux requêtes soit
Concepts
génériques normalisé ;
base de données
est-ce si
simple ?
le langage de requêtes doit être indépendant de la
principe
client-serveur structuration interne des entités ;
Langage SQL
pourquoi ?
les différents systèmes de gestion de bases de données
LES langages
schémas
(Oracle, MySQL, posgresQL, ...) doivent pouvoir échanger
Première base des données aisément : imaginez par exemple que vous
de données
conception soyiez obligés d’utiliser toujours Word pour tous vos
insertion dans
une table textes, ou powerpoint pour toutes vos présentations...
affichage
Le langage de requêtes SQL (Structured Query
Language) : le pourquoi d’un tel langage
Conception et
Création de
Bases de
Données un langage de requêtes structuré SQL (Structured Query
L. Mouchard Language) est un langage conçu pour extraire des
Organisation
information de la base de données. Le premier SQL à la fin
de l’UE des années 70 s’appelait Oracle... c’est à présent une des
Concepts
génériques
grandes entreprises informatiques, comme peuvent l’être
base de données Intel (processeurs), Microsoft (environnements
est-ce si
simple ?
principe
graphiques), Cisco (réseaux Internet) ;
client-serveur

Langage SQL
il a été normalisé (ou agréé par le American National
pourquoi ?
LES langages
Standards Institute) en 1986, 1992 et 1999 ;
schémas

Première base
nous utiliserons pour les TD/TP le SGBD MySQL,
de données conforme à la plus récente des normes préconisées par
conception
insertion dans
une table
l’ANSI, qui est décrit dans un grand nombre d’ouvrages et
affichage de sites www.
Le langage de requêtes SQL (Structured Query
Language) : structuration
Conception et
Création de Le langage de commandes SQL peut être séparé suivant quatre
Bases de
Données catégories :
L. Mouchard
DDL (Data Definition Language) :
Organisation
de l’UE
langage de manipulation des tables représentant les entités
(exemples : commandes alter, create, drop)
Concepts
génériques
base de données DML (Data Manipulation Language) :
est-ce si
simple ? langage de manipulation des données présentées dans les tables
principe
client-serveur (exemples : delete, insert, load data, update)
Langage SQL
pourquoi ?
DQL (Data Query Language) :
LES langages
schémas
langage de requêtes (d’interrogation) sur les données (exemple :
Première base
select avec toutes les clauses)
de données
conception DCL (Data Control Language) :
insertion dans
une table langage de contrôle d’accès aux données (exemples : alter
affichage
password, grant, revoke, commit, rollback)
Les schémas

Conception et
Création de
Il est possible de considérer quatre niveaux de ce que nous
Bases de
Données
nommerons des schémas :
L. Mouchard externe 1 externe 2 externe 3 différentes vues

Organisation
conceptuel entités/relations
de l’UE

Concepts interne index/optimisation


génériques
base de données physique fichiers/répertoires
est-ce si
simple ?
principe
client-serveur
UN schéma externe est UNE façon dont les données
Langage SQL seront présentées à l’utilisateur, en quelque sorte, le
pourquoi ?
LES langages
masque de saisie ou de visualisation, ce que nous
schémas
appellerons la vue. Il peut y avoir plusieurs schémas
Première base
de données externes pour une même base de données ;
conception
insertion dans
une table
le schéma conceptuel est la façon dont les données sont
affichage
réparties dans les tables, en fonction des entités qui ont été
définies et des différents attributs associés à une entité ;
Les schémas

Conception et
Création de le schéma interne est la façon dont sont organisés les index
Bases de
Données et tous les éléments associés indirectement aux données,
L. Mouchard permettant une optimisation des ressources de stockage et de
meilleurs performance lors de l’accès aux données ;
Organisation
de l’UE le schéma physique correspond au schéma de stockage des
Concepts tables et bases en fonction du matériel (disques durs,
génériques
base de données mémoire, ...) et du système d’exploitation. Ce schéma ne
est-ce si
simple ? concerne que l’administrateur.
principe
client-serveur

Langage SQL
Ces deux derniers niveaux moins faciles d’accès, nous ne
pourquoi ? parlerons par la suite que succintement du scéma interne.
LES langages
schémas

Première base
de données
conception
insertion dans
une table
affichage
Conception d’une première base de données

Conception et
Création de
Bases de
Données

L. Mouchard Nous allons concevoir une petite base de données toute simple.
Organisation Elle va contenir les noms, prénoms et filières des étudiants
de l’UE
inscrits pour cette option, c’est celle que nous avons utilisé en
Concepts
génériques TP. Elle consiste en une seule table, que nous nommerons
base de données
est-ce si
etudiant, qui contient (pour l’instant) quatre attributs typés :
simple ?
principe
client-serveur
le prénom : une chaı̂ne de caractères d’au plus 30 lettres ;
Langage SQL
pourquoi ?
le nom : une chaı̂ne de caractères d’au plus 30 lettres ;
LES langages
schémas la qualite : au choix ’Melle’,’Mme ou ’M.’ ;
Première base
de données
la filière : une chaı̂ne de caractère de 6 caractères ;
conception
insertion dans
une table
affichage
Code SQL correspondant à la création de la base
de données baselaurent
Conception et
Création de création de la base de données par une requête SQL (déjà fait
Bases de
Données pour vous en TP)
L. Mouchard Syntaxe : create database nom base
nom base est constitué de lettres, et chiffres et du caractère
Organisation
de l’UE
souligné , il peut comporter jusqu’à 30 lettres et doit être unique.
Concepts
create database baselaurent ;
génériques Vous devez créer une base de données par projet que vous
base de données
est-ce si développez même s’il est possible théoriquement de regrouper des
simple ?
principe
client-serveur
tables sans aucun rapport les unes avec les autres dans une même
Langage SQL
base (vous disposez d’une seule base de données à votre nom
pourquoi ? pour les TP)
LES langages
schémas utilisation de la base nouvellement créée :
Première base use baselaurent ;
de données
conception
insertion dans
une table
affichage
Code SQL correspondant à la création de la table
etudiant
Conception et
Création de création de la table
Bases de
Données Syntaxe : create table nom table(liste de déclarations
L. Mouchard d’attributs)
les règles de construction de nom table sont identiques à
Organisation
de l’UE
nom base...
Concepts
create table etudiant(
génériques prenom varchar(30),
base de données
est-ce si nom varchar(30),
simple ?
principe
client-serveur
qualite enum(’Melle’,’Mme’,’M.’) not null,
Langage SQL
filiere varchar(6) default ’svm321’) ;
pourquoi ?
LES langages
schémas
etudiant
Première base nom VARCHAR (30)

de données prenom VARCHAR (30)


qualite ENUM (’Melle’,’Mme’,’M.’)
conception filiere VARCHAR (6)
insertion dans
une table
affichage
Affichage des informations relatives à la table
etudiant
Conception et
Création de
Bases de
Données
show databases ; va afficher baselaurent
L. Mouchard
show tables ; va afficher etudiant
Organisation describe table etudiant va afficher la structure de la table
de l’UE
sous la forme suivante :
Concepts
génériques
base de données
est-ce si
simple ? Field Type Null Key Default Extra
principe
client-serveur prenom varchar(30) YES NULL
Langage SQL nom varchar(30) YES NULL
pourquoi ? qualite enum(’Melle’,’Mme’,’M.’) Melle
LES langages filiere varchar(6) YES svm321
schémas

Première base
de données Certains champs ici (champs Key et Extra) ne sont pas utilisées
conception
insertion dans
une table
pour l’instant, le reste est compréhensible.
affichage
Les types des attributs

Conception et
Création de
Bases de
Données Une déclaration d’attribut est de la forme
L. Mouchard
nom attribut type d attribut [contraintes]
Organisation les types des attributs pouvant être :
de l’UE

Concepts
des chaı̂nes de caractères : char(longueur),
génériques
base de données
varchar(longueur), tinytext, text, mediumtext,
est-ce si
simple ?
longtext, ...
principe
client-serveur des numériques : tinyint, smallint, int, mediumint,
Langage SQL
pourquoi ?
int, bigint, float, double, real, ...
LES langages
schémas des dates : timestamp, date, time, datetime, year,
Première base
de données
...
conception
insertion dans ensemblistes : enum(valeurs), set(valeurs)
une table
affichage
Les contraintes sur les attributs

Conception et
Création de
Bases de Certaines contraintes peuvent être ajoutées lors de la
Données
déclaration des attributs, elles sont de plusieurs ordres :
L. Mouchard
contraintes de domaine (valeurs prises par un attribut not
Organisation
de l’UE null - pour l’attribut qualite, default pour l’attribut
Concepts filiere, unique). Ces contraintes peuvent être implicites,
génériques
base de données comme pour la valeur par défaut de l’attribut qualite ;
est-ce si
simple ?
principe contraintes d’intégrité d’entité (précise la clé primaire de
client-serveur

Langage SQL
chaque table : nous en reparlerons plus tard primary
pourquoi ? key)
LES langages
schémas
contraintes d’intégrité référentielle (assure de la cohérence
Première base
de données entre clés primaires et clés étrangères correspondantes :
conception
insertion dans nous en reparlerons plus tard foreign key,
une table
affichage references)
Insertion d’éléments dans une table

Conception et
Création de
Bases de
Données
Nous avons plusieurs possibilités :
L. Mouchard
insertion simple totale :
Organisation Syntaxe : insert into nom table values(liste complète des valeurs) ;
de l’UE insert into etudiant values(’Margaux’,’Delabio’,’Melle’,’svm321’) ;
Concepts insertion simple partielle :
génériques Syntaxe : insert into ident table(liste attributs) values(liste de valeurs) ;
base de données
est-ce si insert into etudiant(prenom) values(’Myriam’) ;
simple ?
principe insertion multiple (totale ou partielle) :
client-serveur
Syntaxe : insert into ident table(liste attributs) values(plusieurs listes de
Langage SQL valeurs) ;
pourquoi ?
LES langages
insert into etudiant(prenom) values(’Hélène’),(’Laurent’) ;
schémas insertion à partir des données d’un fichier :
Première base Syntaxe : load data infile nom fichier into table nom table ;
de données load data infile ’fic liste etudiants’ into table etudiant ;
conception
insertion dans
une table
affichage
Affichage (simplifié) des éléments d’une table

Conception et
Création de
Bases de
Données

L. Mouchard Pour vérifier que les éléments ont bien été ajoutés à la table, il
Organisation nous faut affiche le contenu de cette table :
de l’UE
Syntaxe : select liste attributs from nom table ;
Concepts
génériques select * from etudiant ; (affichage de tous les attributs)
base de données
est-ce si
simple ?
principe
prenom nom qualite filiere
client-serveur
Margaux Delabio Melle svm321
Langage SQL
pourquoi ? Myriam null Melle svm321
LES langages
schémas Hélène null Melle svm321
Première base
de données
Laurent null Melle svm321
conception
insertion dans
une table
affichage
Affichage (simplifié) des éléments d’une table

Conception et
Création de
Bases de
Données select prenom from etudiant ; select nom from etudiant ;
L. Mouchard prenom nom
Organisation Margaux Delabio
de l’UE
Myriam null
Concepts
génériques Hélène null
base de données
est-ce si
Laurent null
simple ?
principe
client-serveur select prenom as ’Prénom’, filiere as ’Filière’ from etudiant ;
Langage SQL Prénom Filière
pourquoi ?
LES langages Margaux svm321
schémas

Première base
Myriam svm321
de données
conception
Hélène svm321
insertion dans
une table
Laurent svm321
affichage
Affichage avec clause restrictive des éléments d’une
table
Conception et
Création de
Bases de
Données
Nous pouvons souhaiter n’afficher qu’une partie des
L. Mouchard
informations disponibles dans une table, pour cela nous
utiliserons le mot clé where suivi d’une clause de restriction :
Organisation
de l’UE Syntaxe : select liste attributs from nom table where
Concepts clause restrictive ;
génériques
base de données select * from etudiant where nom<>’null’ ;
est-ce si
simple ? prenom nom qualite filiere
principe
client-serveur Margaux Delabio Melle svm321
Langage SQL
pourquoi ?
LES langages
select prenom as ’Prénom’, filiere as ’Filière’ from etudiant
schémas
where prenom like ’M%’ ;
Première base
de données Prénom Filière
conception
insertion dans
Margaux svm321
une table
affichage Myriam svm321
Contenu du cours du 13 novembre 2004

Conception et
Création de
Bases de
Données 5 Association 1,n
L. Mouchard table filiere
Association
clé primaire
1,n peuplement
table filiere
clé primaire nouvelle table etudiant
peuplement
nouvelle table
etudiant
clé étrangère
clé étrangère
requête
requête conjointe
conjointe

Association
n,n 6 Association n,n
table cours
table etu cou
table cours
peuplement
requête table etu cou
conjointe
peuplement
requête conjointe
Création de la table filiere

Conception et
Création de En fait, on s’aperçoit bien vite que le code (sur six caractères)
Bases de
Données de la filière n’est pas explicite, et que l’on souhaiterait avoir,
L. Mouchard pour chaque étudiant plus d’informations sur la filière dans
Association laquelle il est inscrit. Nous allons créer une entité spécifique,
1,n
table filiere
nommée filière regroupant les informations qui lui sont
clé primaire
peuplement
associées, nous établirons ensuite une association entre ces
nouvelle table
etudiant deux entités. L’entité filière sera représentée par une table
clé étrangère
requête filiere contenant :
conjointe

Association le code : une chaı̂ne de caractères de 6 caractères (celui


n,n
table cours que l’on trouve dans la table etudiant pour l’instant) ;
table etu cou
peuplement
requête
l’intitulé complet : une chaı̂ne de caractères (< 40 lettres) ;
conjointe
le parcours : licence, master ou doctorat codé sur un
caractère ;
l’année : un entier sur un chiffre ;
Création de la table filiere : clé primaire

Conception et
Création de
Bases de Nous allons à présent « étoffer » notre table en ajoutant un
Données
attribut particulier qui va nous permettre d’identifier de façon
L. Mouchard
non-ambigüe une entrée dans la table filiere : c’est une clé
Association
1,n
primaire, comme un numéro de sécu ou un numéro d’étudiant.
table filiere Nous pourrions utiliser le code de l’université, mais nous allons
clé primaire
peuplement
nouvelle table
plutôt utiliser un entier, qui aura comme propriété d’être
etudiant
clé étrangère
auto increment not null.
requête
conjointe

Association create table filiere(


n,n
table cours
fil id int(3) auto increment not null,
table etu cou
peuplement
fil code char(6),
requête
conjointe
fil intitule varchar(40),
fil parcours enum(’l’,’m’,’d’),
fil annee int(1),
primary key (fil id)) ;
Ce qu’il faut en comprendre

Conception et
Création de
Bases de
Données

L. Mouchard
Voici ce qu’en dit MySQL :
Association
1,n
table filiere
clé primaire
Field Type Null Key Default Extra
peuplement fil id int(3) pri null auto increment
nouvelle table fil code char(6) yes null
etudiant
clé étrangère fil intitule varchar(30) yes null
requête
conjointe fil parcours enum(’l’,’m’,’d’) yes null
Association
fil annee int(1) yes null
n,n
table cours
table etu cou On peut noter la colonne Key et Extra où fil id est indiqué
peuplement
requête comme pri et auto increment
conjointe
Peuplement de la table filiere

Conception et
Création de
Bases de
Données Nous allons à présent « peupler » notre table filiere.
L. Mouchard
insert into filiere(fil code, fil intitule, fil parcours, fil annee)
Association values(’svm321’,’Biochimie’,’l’,2),
1,n
(’svm322’,’Biologie Cellulaire et Physiologie’,’l’,2),
table filiere
clé primaire (’svm323’,’Biologie Générale et Sciences de la Terre’,’l’,2),
peuplement (’svm324’,’Biologie des Organismes’,’l’,3),
nouvelle table
etudiant (’svm325’,’Biologie des Organes’,’l’,2)) ;
clé étrangère
requête
conjointe
Nous avons entré les attributs fil code, fil intitule, fil parcours
Association
n,n et fil annee mais pas l’attribut fil id, qui rappelons-le était
table cours
table etu cou auto increment et not null. Cela veut dire que le
peuplement
requête système va attribuer une valeur si elle n’est pas fournie, pour la
conjointe
première entrée, ce sera 1, puis cette valeur sera
auto-incrémentée pour chaque nouvelle entrée.
Peuplement de la table filiere

Conception et
Création de
Bases de
Données fil id fil code fil intitule fil parcours fil annee
L. Mouchard 1 svm321 Biochimie l 2
2 svm322 Biologie Cellulaire et Physiologie l 2
Association 3 svm323 Biologie Générale et Sciences ... l 2
1,n 4 svm324 Biologie des Organismes l 3
table filiere
clé primaire
5 svm325 Biologie des Organes l 2
peuplement
nouvelle table
etudiant
clé étrangère
Essayons d’ajouter une ligne avec une clé primaire déjà attribuée :
requête insert into filiere values(3,’svm331’,’Filière imaginaire’,’l’,1) ;
conjointe
error 1062 : Duplicate entry ’3’ for key 1
Association
n,n
L’entrée 3 ne peut être utilisée deux fois (déjà attribuée).
table cours
table etu cou
peuplement Corrigeons l’erreur sur l’attribut fil annee correspondant à fil id=4 :
requête
conjointe update filiere set fil annee=2 where fil id=4 ;

Supprimons la ligne superflue correspondant à ’svm325’


delete from filiere where fil code=’svm325’ ;
Modification de notre table etudiant

Conception et Nous devons modifier la table etudiant pour lui ajouter un attribut clé
Création de
Bases de primaire, renommer les attributs pour les préfixer avec etu et retirer
Données
l’attribut filiere pour l’instant.
L. Mouchard

Association drop table etudiant ;


1,n create table etudiant(
table filiere
clé primaire
etu id int(5) auto increment not null,
peuplement etu prenom varchar(30),
nouvelle table
etudiant etu nom varchar(30),
clé étrangère
requête etu qualite enum(’Melle’,’Mme’,’M.’) not null,
conjointe
primary key (etu id)),
Association
n,n
table cours Nous aurions pu modifier l’attribut « prenom » en « etu prenom » de
table etu cou
peuplement la structure de la table etudiant de la façon suivante :
requête
conjointe

alter table etudiant change prenom etu prenom varchar(30) ;

Pour plus d’information, voir la syntaxe d’alter table


Schéma entités/associations

Conception et
Création de
Nous pouvons représenter à présent les deux entités et
Bases de
Données
l’association entre ces deux entités :
n 0
L. Mouchard etudiant inscrit en filiere
etu_id INT NOT NULL AUTO_INCREMENT fil_id INT NOT NULL AUTO_INCREMENT
etu_prenom VARCHAR (3O) fil_code CHAR (6)
Association etu_nom VARCHAR (3O) fil_intitule VARCHAR (4O)
1,n etu_qualite ENUM (’Melle’,’Mme’,’M.’) fil_parcours ENUM (’l’,’m’,’d’)
table filiere fil_annee INT (1)
clé primaire
peuplement
nouvelle table
etudiant
L’association entre les deux entités est indiquée avec sa cardinalité :
clé étrangère
requête
conjointe
c’est le nombre d’une entité qui peut être mis en association
Association
avec l’autre ;
n,n
table cours plusieurs étudiants (n du coté de la table etudiant) peuvent être
table etu cou
peuplement
inscrits dans la même filière
requête
conjointe mais un étudiant ne peut être inscrit dans plusieurs filières...
remarquons qu’une filière peut ne pas ouvrir par manque
d’étudiants, donc la cardinalité minimale peut être 0 (du coté de
la table filiere) !
Ajout de la clé étrangère dans la table etudiant

Conception et
Création de
Bases de
Données

L. Mouchard
Nous allons à présent établir l’association 0,n entre les entités
étudiant et filière, nous allons pour cela créer dans la table
Association
1,n etudiant une référence vers la clé primaire de la table filiere, ce
table filiere
clé primaire que nous allons appeler une clé étrangère (si la cardinalité de
peuplement
nouvelle table la relation avait été n, n nous aurions dû procéder
etudiant
clé étrangère différemment, comme nous le verrons plus tard ) :
requête
conjointe
n 0
Association etudiant inscrit en filiere
n,n etu_id INT NOT NULL AUTO_INCREMENT fil_id INT NOT NULL AUTO_INCREMENT

table cours
etu_fil_id INT NOT NULL fil_code CHAR (6)

table etu cou


etu_prenom VARCHAR (3O) fait référence à fil_intitule VARCHAR (4O)

peuplement
etu_nom VARCHAR (3O) fil_parcours ENUM (’licence’,’master’,’doctorat’)
etu_qualite ENUM (’Melle’,’Mme’,’M.’) fil_annee INT (1)
requête
conjointe
Ajout de la clé étrangère dans la table etudiant

Conception et drop table etudiant ;


Création de
Bases de
create table etudiant(
Données etu id int(5) not null auto increment,
L. Mouchard
etu fil id int(3) not null,
etu prenom varchar(30),
Association etu nom varchar(30),
1,n etu qualite enum(’Melle’,’Mme’,’M.’) not null,
table filiere primary key (etu id)),
clé primaire
peuplement foreign key (etu fil id) references filiere(fil id)) ;
nouvelle table
etudiant
clé étrangère le mot clé foreign key indique que cet attribut est la
requête
conjointe clé primaire d’une autre table ;
Association
n,n le mot clé references, suivi d’un nom de table (ici
table cours
table etu cou filiere), va préciser à quelle table appartient la clé
peuplement
requête étrangère ;
conjointe

le nom d’attribut entre parenthèses (ici fil id) indique le


nom de la clé primaire tel qu’il est connu dans la table
l’hébergeant.
Peuplement de la table etudiant

Conception et
Création de
Bases de
Données

L. Mouchard
insert into etudiant(etu prenom,etu nom,etu qualite,etu fil id)
Association values(’Margaux’, ’Delabio’, ’Melle’, 1),
1,n
table filiere (’Myriam’, ’Delageno’, ’Mme’, 2),
clé primaire
peuplement
(’Laurent’, ’Delaproteo’, ’M.’, 1) ;
nouvelle table
etudiant
select ∗ from etudiant ;
clé étrangère
requête
conjointe etu id etu fil id etu prenom etu nom etu qualite
Association
n,n
1 1 Margaux Delabio Melle
table cours 2 2 Myriam Delageno Mme
table etu cou
peuplement 3 1 Laurent Delaproteo M.
requête
conjointe
Utilisation des deux tables simultanément

Conception et
Création de Nous pouvons à présent utiliser conjointement les tables
Bases de
Données etudiant et filiere de la façon suivante :
L. Mouchard
select etu prenom,etu nom,etu qualite,fil intitule
Association from etudiant,filiere
1,n where etudiant.etu fil id = filiere.fil id ;
table filiere
clé primaire
peuplement etu prenom etu nom etu qualite fil intitule
nouvelle table
etudiant Margaux Delabio Melle Biochimie
clé étrangère Myriam Delageno Mme Biologie Cellulaire et Physiologie
requête
conjointe Laurent Delaproteo M. Biochimie
Association
n,n l’utilisation conjointe des tables est réalisée par « from
table cours
table etu cou etudiant,filiere » ;
peuplement
requête
conjointe l’association entre les deux entités est réalisée par la clause «
where etudiant.etu fil id = filiere.fil id ; » qui précise
explicitement comment les entrées des deux tables sont mises en
correspondance ;
Utilisation des deux tables simultanément

Conception et
Création de
Bases de
Données Afficher en ordre alphabétique les prénoms, noms et filières des
L. Mouchard étudiants :
Association
select etu prenom as ’Prénom’,
1,n etu nom as ’Nom’,
table filiere
clé primaire fil intitule as ’Filière’
peuplement
nouvelle table
etudiant
from etudiant,filiere
clé étrangère
requête
where etudiant.etu fil id = filiere.fil id
conjointe
order by etu prenom ;
Association
n,n
table cours
table etu cou
Prénom Nom Filière
peuplement
requête Laurent Delaproteo Biochimie
conjointe
Margaux Delabio Biochimie
Myriam Delageno Biologie Cellulaire et Physiologie
Création de la table cours

Conception et
Création de
Bases de Nous allons à présent créer une table cours dans laquelle seront
Données
stockées toutes les informations relatives aux cours. Elle
L. Mouchard
contiendra au minimum les attributs suivants :
Association
1,n
table filiere create table filiere(
clé primaire
peuplement cou id int(3) auto increment not null,
nouvelle table
etudiant cou intitule varchar(40),
clé étrangère
requête
cou page www varchar(40),
conjointe
primary key (cou id)) ;
Association
n,n
table cours
table etu cou
Nous aurions pu ajouter des attributs supplémentaires comme
peuplement
requête
le semestre, le nombre d’heures de cours, TD et TP, mais
conjointe
l’enseignant ne peut être ajouté, dans la mesure où plusieurs
enseignants peuvent se partager les cours, TD et TP. Il est
donc nécessaire de penser entité enseignant.
Association n,n

Conception et
Création de
Nous souhaitons à présent établir l’association entre les entités
Bases de
Données
cours et étudiant, les tables correspondantes sont :
n n
L. Mouchard etudiant suit cours
etu_id INT NOT NULL AUTO_INCREMENT cou_id INT NOT NULL AUTO_INCREMENT
etu_fil_id INT NOT NULL cou_intitule VARCHAR (4O)
Association etu_prenom VARCHAR (3O) cou_page_www VARCHAR (4O)

1,n etu_nom VARCHAR (3O)


etu_qualite ENUM (’Melle’,’Mme’,’M.’)
table filiere
clé primaire
peuplement
nouvelle table
etudiant une clé étrangère dans la table etudiant ne pourrait faire
clé étrangère
requête référence qu’à une seule clé primaire de la table cours
conjointe

Association
alors qu’un étudiant peut suivre plusieurs cours ;
n,n
table cours
une clé étrangère dans la table cours ne pourrait faire
table etu cou
peuplement
référence qu’à une seule clé primaire de la table etudiant
requête
conjointe alors qu’un cours peut être suivi par plusieurs etudiants ;
nous allons utiliser une table supplémentaire qui va faire le
relai entre les tables des deux entités, cette table s’appelle
une table de jointure.
Association n,n

Conception et
Création de
Bases de La table que nous allons créer ne va contenir que peu
Données
d’informations, uniquement celles qui permettent l’association :
L. Mouchard
une référence à une entrée de la table etudiant et une entrée de
Association
1,n
la table cours, nous allons passer de deux entités et d’une
table filiere
clé primaire
association n,n entre ces entités à :
peuplement
nouvelle table trois entités (étudiant, cours et étu cou) ;
etudiant
clé étrangère
requête deux associations : une association 1,n entre les entités
conjointe

Association
étudiant et étu cou et une association n,0 entre les entités
n,n étu cou et cours.
table cours
table etu cou
peuplement etudiant 1 n etu_cou 0 cours
requête etu_id INT NOT NULL AUTO_INCREMENT etu_id INT NOT NULL cou_id INT NOT NULL AUTO_INCREMENT
conjointe etu_fil_id INT NOT NULL cou_id INT NOT NULL cou_intitule VARCHAR (4O)
etu_prenom VARCHAR (3O) n cou_page_www VARCHAR (4O)
etu_nom VARCHAR (3O)
etu_qualite ENUM (’Melle’,’Mme’,’M.’)
Création de la table etu cou

Conception et
Création de
Bases de
Données

L. Mouchard Nous allons à présent créer une table etu cou dans laquelle
Association
seront stockées les deux clés étrangères :
1,n
table filiere
clé primaire create table etu cou(
peuplement
nouvelle table etu id int(3) not null,
etudiant
clé étrangère cou intitule int(3) not null,
requête
conjointe foreign key(etu id) references etudiant(etu id),
Association foreign key(cou id) references cours(cou id)) ;
n,n
table cours
table etu cou
peuplement Nous allons ajouter par la suite des attributs : les numéros du
requête
conjointe groupe de TD et de TP par exemple
Peuplement des tables etudiant et etu cou

Conception et insert into etudiant(etu prenom,etu nom,etu qualite,etu fil id)


Création de
Bases de values (’Hélène’,’Dutranscripto’,’Mme’,3),
Données
(’Marie’,’Dumetabolo’,’Mme’,4) ;
L. Mouchard
insert into etu cou
Association values (1,1),(1,2),(1,3),(2,1),(2,2),(3,1),(4,1),(5,3) ;
1,n
table filiere
select ∗ from etu cou ;
clé primaire
peuplement
nouvelle table
etudiant
clé étrangère etu id cou id
requête
conjointe 1 1
Association 1 2
n,n
table cours
1 3
table etu cou
peuplement
2 1
requête
conjointe
2 2
3 1
4 1
5 3
Utilisation des deux tables simultanément

Conception et
Création de
Bases de
Nous pouvons à présent utiliser conjointement les tables
Données etudiant et cours de la façon suivante :
L. Mouchard

select fil intitule as ”Intitulé du cours”,


Association
1,n
etu nom as ”Nom”,
table filiere etu prenom as ”Prénom”
clé primaire from etudiant,cours,etu cou
peuplement
nouvelle table where etudiant.etu id = etu cou.etu id
etudiant and etu cou.cou id = cours.cou id
clé étrangère
requête order by fil intitule ;
conjointe

Association Intitulé du cours Nom Prénom


n,n Conception et Construction de Bases de Données Hélène Dutranscripto
table cours
table etu cou Conception et Construction de Bases de Données Margaux Delabio
peuplement Conception et Construction de Bases de Données Myriam Delageno
requête
conjointe Conception et Construction de Bases de Données Laurent Delaproteo
Programmation en Informatique Margaux Delabio
Programmation en Informatique Myriam Delageno
Unix et langage C Myriam Delageno
Unix et langage C Marie Dumetabolo
Contenu du cours du 27 novembre 2004

Conception et
Création de
Bases de
Données 7 Architecture trois tiers
L. Mouchard aperçu
Architecture
trois tiers
trois tiers langages à balises
aperçu
trois tiers
langages à
balises 8 HTML
HTML
paragraphes
paragraphes
entêtes
caractères
entêtes
listes
tableaux
caractères
image
hyperlien
listes
tableaux
image
hyperlien
Architecture trois tiers :
HTML, PHP/Python/Perl (ou autre) et MySQL
client (ordinateur personnel)
Conception et
Création de
Bases de
Données

L. Mouchard

Architecture
trois tiers Navigateur web
aperçu
trois tiers
langages à
balises Envoi de la page Réseau Demande de la page web
web de résultat
HTML
paragraphes
entêtes Programme
caractères HTML PHP, Python, Perl
listes
Récupération de la
tableaux Page web de saisie Récupération Envoi de
requête SQL
des paramètres la requête SQL Exécution de la
image
Construction de la requête SQL

















hyperlien requête SQL



















Base de














Réseau



























Données


Récupération du



résultat de la Résultat de la






requête SQL Envoi du requête SQL







résultat de la







Construction de la requête SQL



Page web de résultat page web de résultat

serveur SGBD
serveur web
Les trois tiers :

Conception et
Création de 1 HTML - Hyper Text Markup Language
Bases de
Données Le langage HTML est un langage à balise utilisé pour la
L. Mouchard présentation des pages web, la construction des
Architecture
formulaires à partir desquels seront transmises les données.
trois tiers
aperçu
2 PHP - PHP Hypertext Preprocessor
trois tiers
langages à Le langage PHP est utilisé pour récupérer les données
balises

HTML
transmises à partir du formulaire, construire la requête
paragraphes
entêtes
SQL, la transmettre au serveur. Il permet également de
caractères
listes
récupérer le résultat de la requête, une fois effectuée par le
tableaux
image
SGBD, puis de construire la page HTML présentant les
hyperlien
résultats.
3 SGBD - Système de Gestion de Bases de Données
Le langage MySQL (dans notre cas) est utilisé pour
exécuter la requête, le serveur retourne alors au
programme appelant le résultat de la requête.
D’autres possibilités ?

Conception et
Création de
PHP n’est pas le seul langage permettant de faire le lien entre
Bases de
Données
la page web et le SGBD :
L. Mouchard
Python est une alternative extrémement intéressante, c’est
un langage facile à apprendre, puissant et extensible : il
Architecture
trois tiers dispose d’un module permettant l’interrogation d’un
aperçu
trois tiers SGBD distant (il est étudié en première année de licence
langages à
balises du parcours Biologie) ;
HTML Perl est très utilisé, il dispose d’un ensemble de modules
paragraphes
entêtes
caractères
pour l’interrogation d’un SGBD distant et la construction
listes
tableaux
de pages HTML ;
image
hyperlien
ces deux langages possédent de nombreuses
fonctionnalités pour le traitement de données, des
mécanismes souples de gestion de listes, particulièrement
utiles pour traiter les résultats d’une requête SQL ;
plus généralement, les langages qui s’appuient sur la CGI
(Common Gateway Interface)
L’introduction à MySQL, HTML et PHP

Conception et
Création de MySQL est indispensable (lui ou un autre SGBD) à
Bases de
Données l’interrogation des données contenues dans la base, il a été
L. Mouchard appris pour pouvoir construire les requêtes qui seront
Architecture
transmises au SGBD. Il a été présenté lors des deux cours
trois tiers
aperçu
précédents ;
trois tiers
langages à HTML est le langage de présentation des pages web, il
balises

HTML
faut l’apprendre pour pouvoir par la suite afficher sur une
paragraphes
entêtes
page web les résultats des requêtes transmises au serveur.
caractères
listes
C’est l’objet du cours d’aujourd’hui.
tableaux
image PHP est un langage qui va « se glisser » dans le code
hyperlien
HTML et va permettre l’interaction avec le SGBD. Il faut
comprendre quelques-uns de ses mécanismes pour
permettre la transmission de la requête au SGBD, mais
également la construction de la page web de résultats. Il
sera présenté lors du prochain cours ;
Quelques généralités sur les langages à balises

Conception et Les langages à balises (ou marqueurs) sont des langages de description
Création de
Bases de structurelle, ils rendent explicite la façon dont le document est
Données
construit :
L. Mouchard
<lettre>
Architecture <entete>
trois tiers
<lieu>Mont Saint Aignan</lieu>
aperçu
trois tiers <date>le 17 novembre 2004</date>
langages à </entete>
balises
<ouverture> Madame, </ouverture>
HTML <corps> Je suis très heureux de votre lettre </corps>
paragraphes <fermeture>Cordialement,</fermeture>
entêtes
caractères
<signature>Votre obligé</signature>
listes </lettre>
tableaux
image
hyperlien Quelques langages à balises : SGML (Std Generalized Markup
Language, depuis les années 1960), XML (eXtensible Markup
Language, 1998), TEXet LATEX 2ε , ...
Chaque langage dispose de ses propres balises, ainsi parfois que
de mécanismes permettant d’en définir de nouvelles.
Le langage HTML

Conception et
Création de HTML est utilisé pour décrire les pages web ;
Bases de
Données développé à la fin des années 1980 par Tim Berners-Lee alors
L. Mouchard qu’il travaillait au CERN pour mettre en commun des
documents de travail ;
Architecture
trois tiers des versions successives, des mécanismes de feuilles de styles,
aperçu
trois tiers ...
langages à
balises voici un exemple de code HTML :
HTML
paragraphes
entêtes
<html>
caractères
listes
<head>
tableaux <title>Mon titre</title>
image
hyperlien </head>
<body>
<center>Mon texte centré</center>
</body>
</html>
Le langage HTML :
l’entête <head> ... </head>
Conception et
Création de
Bases de
Données
L’entête <head> contient essentiellement les informations
L. Mouchard
relatives à la page :
Architecture
trois tiers
aperçu <title>Mon titre</title>
trois tiers
langages à le titre qui apparaı̂tra sur la barre de titre ;
balises

HTML
<meta name=author content="Laurent Mouchard">
paragraphes
entêtes
le nom de l’auteur de la page ;
caractères
<meta http-equiv="content-type" content="text/html;charset=iso-8859-15">
¿ par exemple) ;
listes
tableaux
image
l’encodage utilisé (caractères accentués avec
hyperlien
<link rel="stylesheet" href="ficstyle.css">
l’utilisation d’un fichier de style (fonctionnalité non présentée
dans ce cours).
Le langage HTML :
le corps <body> ... </body>
Conception et
Création de
Bases de
Données
C’est cette partie du fichier HTML qui va être affichée par
L. Mouchard
votre navigateur. Elle contient des balises pour :
Architecture
trois tiers les paragraphes ;
aperçu
trois tiers les entêtes (titres) ;
langages à
balises
les listes ;
HTML
paragraphes
entêtes
la construction de tableaux ;
caractères
listes la gestion des images ;
tableaux
image
hyperlien
la création de liens vers d’autres documents ;
la mise en place de formulaires ;
...
Le balisage HTML : les paragraphes <p> </p> et
les ruptures <br/>
Conception et
Création de
Bases de
Données
un paragraphe est balisé par <p>, et est par défaut justifié
L. Mouchard à gauche ;
Architecture
une rupture de paragraphe (passage à la ligne) est balisé
trois tiers
aperçu
par <br/> ;
trois tiers
langages à pour modifier ce comportement, il faut ajouter un attribut
balises

HTML
à la balise <p> comme ci-dessous ;
paragraphes
entêtes
caractères <p>un paragraphe normal sera...</p>
listes
tableaux <p align="left"> un paragraphe justifié à ga...</p>
image
hyperlien <p align="center">un paragraphe centré</p>

<p align="right">un paragraphe justifié à dr...</p>

<p align="justify">un paragraphe totalement ...</p>

<p> un paragraphe<br/>avec rupture</p>


Le balisage HTML : les entêtes <h1> </h1> à
<h6> </h6>
Conception et
Création de
Bases de
Données

L. Mouchard
<h1>Ent^
ete de niveau 1</h1>
Architecture
trois tiers <h2>Ent^
ete de niveau 2</h2>
aperçu
trois tiers <h2 align="center">Ent^
ete centrée de niveau 2</h2>
langages à
balises <h3>Ent^
ete de niveau 3</h3>
HTML
<h4>Ent^
ete de niveau 4</h4>
paragraphes
entêtes
<h4>Ent^
ete de niveau 4 justifiée à droite</h4>
caractères
listes
tableaux <h5>Ent^
ete de niveau 5</h5>
image
hyperlien <h6>Ent^
ete de niveau 6</h6>
Le balisage HTML :
les caractères et leur mise en forme
Conception et En HTML, les caractères ne sont pas des balises mais des codes
Création de
Bases de réservés construits en indiquant dans l’ordre :
Données
l’esperluette & ;
L. Mouchard
le caractère ;
Architecture le modificateur (grave, acute, circ, cedil, uml) ;
trois tiers
aperçu le point-virgule.
trois tiers
langages à Ce sont :
balises

HTML code symbole code symbole code symbole


paragraphes
entêtes &eacute; é &egrave; è &ecirc; ê
caractères
listes &Eacute; É &Egrave; È &Ecirc; Ê
tableaux ... ... ... ... ... ...
image
hyperlien &ccedil; ç &Ccedil; Ç &uuml; ü
Les effets sur les caractères sont eux accessibles grâce à des balises :
<b>texte1</b> et <i>texte2</i> pour texte1 et texte2 ;
<u>texte</u> pour texte en souligné.
Le balisage HTML : les liste non-ordonnées <ul>
<li> </li> </ul>
Conception et
Création de
Bases de
Données <ul>
<li>HTML</li>
L. Mouchard
<li>PHP</li>
<li>MySQL</li>
Architecture </ul>
trois tiers
aperçu
trois tiers
langages à
balises <ul style="list-style-type: square;">
HTML <li>HTML</li>
<li>PHP</li>
paragraphes
entêtes
<li>MySQL</li>
caractères
</ul>
listes
tableaux
image
hyperlien
<ul style="list-style-type: circle;">
<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ul>
Le balisage HTML : les liste ordonnées <ol> <li>
</li> </ol>
Conception et
Création de
Bases de
Données
<ol>
L. Mouchard <li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
Architecture </ol>
trois tiers
aperçu
trois tiers
langages à
balises
<ol style="list-style-type: lower-roman;">
HTML <li>HTML</li>
paragraphes <li>PHP</li>
entêtes <li>MySQL</li>
caractères </ol>
listes
tableaux
image
hyperlien
<ol start="19" style="list-style-type: lower-alpha;">
<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ol>
Le balisage HTML : les listes descriptives <dl>
<dt></dt> <dd></dd> </dl>
Conception et
Création de
Bases de
Données

L. Mouchard
<dl>
<dt>HTML </dt>
Architecture <dd>langage...</dd>
trois tiers <dt>PHP </dt>
aperçu <dd>langage...</dd>
trois tiers <dt>MySQL</dt>
langages à <dd>système...</dd>
balises </dl>
HTML
paragraphes
entêtes
caractères
<dl>
listes <dd>HTML</dd>
tableaux <dd>langage...</dd>
image <dd>PHP</dd>
hyperlien <dd>langage...</dd>
<dd>MySQL</dd>
<dd>système...</dd>
</dl>
Le balisage HTML : les tableaux <table> <tr>
<td> </td> </tr> </table>
<table width="100%" border=1>
Conception et
<tr>
Création de <td>haut gauche</td>
Bases de <td align="left">haut droite</td>
Données </tr>
<tr>
L. Mouchard
<td align="center">bas gauche</td>
<td align="right">bas droite</td>
Architecture </tr>
trois tiers </table>
aperçu
<table border=1 ncols=2>
trois tiers
<tr>
langages à
balises <td colspan=2 align="center">haut</td>
</tr>
HTML <tr>
paragraphes <td>bas gauche</td>
entêtes <td>bas droite</td>
caractères </tr>
listes </table>
tableaux
image <table border=1>
hyperlien <tr>
<td rowspan=2 valign="center">gauche</td>
<td>haut droite</td>
</tr>
<tr>
<td>bas droite</td>
</tr>
</table>
Le balisage HTML : les tableaux
<table> <tr> <td> </td> </tr> </table>
<table frame="vsides">
Conception et <tr>
Création de <td rowspan="2" valign="top">gauche</td>
Bases de <td colspan="2" align="right">haut droite</td>
Données </tr>
<tr>
L. Mouchard <td>bas milieu</td>
<td style="background-color: rgb(192, 192, 192);">
bas droite</td>
Architecture </tr>
trois tiers </table>
aperçu
trois tiers <table frame="hsides" rules="rows">
langages à <tr>
balises <td rowspan="2" valign="center">gauche</td>
<td colspan="2" align="center">haut droite</td>
HTML </tr>
paragraphes <tr>
entêtes <td bgcolor="ff00ff">bas milieu</td>
caractères <td>bas droite</td>
listes </tr>
tableaux </table>
image
hyperlien <table frame="vsides" rules="cols">
<tr>
<td rowspan="2" valign="bottom">gauche</td>
<td colspan="2" align="left">haut droite</td>
</tr>
<tr>
<td>bas milieu</td>
<td bgcolor="blue">bas droite</td>
</tr>
</table>
Le balisage HTML : les tableaux
<table> <tr> <td> </td> </tr> </table>
Conception et <table cellspacing=0
Création de frame="hsides"
Bases de rules="rows">
Données <tr bgcolor="lightgrey">
<td>Delabio</td><td>Margaux</td>
L. Mouchard </tr>
<tr>
<td>Delageno</td><td>Myriam</td>
Architecture </tr>
trois tiers <tr bgcolor="lightgrey">
aperçu <td>Delaproteo</td><td>Laurent</td>
trois tiers </tr>
langages à <tr>
balises <td>Dumetabolo</td><td>Marie</td>
</tr>
HTML </table>
paragraphes
entêtes
caractères <br/>
listes
tableaux <table border=1>
image <tr>
hyperlien <td background="chutes_niagara.jpg">
un petit texte pour la<br>
cellule avec image<br>
pas très lisible n’est-ce pas ?</td>
<td>rien d’autre</td>
</tr>
</table>
Le balisage HTML : l’insertion d’une image
<img src=”...”/>
Conception et
Création de
Bases de
Données

L. Mouchard

Architecture
trois tiers
aperçu Une petite image :
trois tiers <img src="chutes_niagara.jpg"/>
langages à
balises

HTML
<br/>
paragraphes
entêtes
caractères
listes
tableaux Une image étirée en hauteur :
image <img alt="Chutes du Niagara"
hyperlien src="chutes_niagara.jpg"
align="middle"
height="240"
width="120"/>
Le balisage HTML : l’insertion d’un hyperlien
<a href=”...”>...</a>
Conception et
Création de
Bases de
Données
<a href="Cours/Ba_Do/index.html">
L. Mouchard Lien
</a>
vers les pages de cours.
Architecture
trois tiers <br/>
aperçu
trois tiers Un lien vers
langages à
balises <a href="mailto:Laurent.Mouchard@univ-rouen.fr">
mon mél
HTML </a>
paragraphes
entêtes <br/>
caractères
listes Une image avec un lien autour :
tableaux <a href="http://www.niagara.com">
image <img src="chutes_niagara.jpg"
hyperlien alt="Niagara"
height="40">
</a>
Contenu du cours du 4 décembre 2004

Conception et 9 Formulaires
Création de
Bases de principe
Données
forme générale
L. Mouchard
méthodes
Formulaires les formulaires
principe
forme générale
méthodes
10 PHP
les formulaires
introduction
PHP
introduction exemples
exemples
actions actions
Connexions
au SGBD
11 Connexions au SGBD
liste des bases liste des bases
requête simple
requête
améliorée
requête simple
Interrogation requête améliorée
de notre base
formulaire
12 Interrogation de notre base
action
formulaire
action
Principe des formulaires

Conception et client (ordinateur personnel)


Création de
Bases de
Données

L. Mouchard

Formulaires La page web est associée à


principe Navigateur web
forme générale un fichier-action, écrit dans
méthodes
les formulaires
Envoi de la page
Réseau Demande de la page web
un langage de programma-
web de résultat
PHP tion, qui va traiter les données
introduction
exemples Programme entrées dans le formulaire web :
actions HTML PHP, Python, Perl

Connexions Page web de saisie Récupération


la page formulaire et le fichier-
des paramètres
au SGBD
liste des bases
action sont généralement sur le
requête simple
requête
même serveur (web).
améliorée

Interrogation
de notre base
Construction de la
formulaire
Page web de résultat page web de résultat
action
serveur web
Le balisage HTML : les formulaires
<form action=”...” method=”...”> </form>
Conception et
Création de <form action="..." method="..">
Bases de ...
Données

L. Mouchard
<input type=submit>
</form>
Formulaires
principe
forme générale
<form déclaration du formulaire ;
méthodes
les formulaires
action="..." fichier-action à exécuter après validation
PHP
du formulaire ;
introduction method="..."> méthode de transfert des informations vers
exemples
actions le fichier-action ;
Connexions ... suit alors la construction elle-même du for-
au SGBD
liste des bases
mulaire ;
requête simple
requête
<input type=submit> construit le bouton de transfert des infor-
améliorée
mations ;
Interrogation
de notre base
</form> fin du formulaire.
formulaire
action Nous allons apprendre à construire divers formulaires et par la suite
comprendre comment les fichiers-actions peuvent être construits.
Les méthodes pour les formulaires

Conception et
Création de
Bases de
Données la méthode get va transmettre les données au serveur en
L. Mouchard les ajoutant à la fin de l’adresse du fichier-action, après un
Formulaires
?, lorsque les données sont peu nombreuses et assez
principe petites en taille :
forme générale
méthodes
les formulaires

PHP
introduction
exemples
actions
la méthode post va transmettre les données au serveur
Connexions
au SGBD indépendemment de l’adresse du fichier-action, ce lorsque
liste des bases
requête simple le nombre ou la taille des données transmises entre le
requête
améliorée formulaire et le fichier-action est importante ;
Interrogation
de notre base
formulaire
Ces deux méthodes ne sont pas spécifiques à PHP mais sont
action rattachées à la partie CGI (Common Gateway Interface).
Formulaire contenant une entrée texte simple :
<input type=”text”>
Conception et
Création de
Bases de Formulaire avec l’entrée text<br/>
Données <form action="action_input_text.php"
method="get">
L. Mouchard Entrer votre nom :
<input type="text"
name="nom"/>
Formulaires
<br/>
principe
<input type="submit"
forme générale
value="Entrer"/>
méthodes
les formulaires
</form>

PHP
introduction
exemples le nom du fichier-action est action_input_text.php
actions

Connexions la méthode est get, très peu d’informations sont transmises


au SGBD
liste des bases le formulaire contient une entrée de type text, appelé nom
requête simple
requête
améliorée le formulaire contient un bouton cliquable (submit), sur lequel
Interrogation sera affiché Entrer. C’est ce bouton qui permettra la
de notre base
formulaire transmission des informations au fichier-action
action
Formulaire contenant des boutons sélectionnables :
<input type=”radio”>
Conception et
Formulaire avec l’entrée radio<br/>
Création de
<form action="action_input_radio.php"
Bases de
method="get">
Données
<table border=0>
L. Mouchard <tr>
<td valign="top">
Choisissez une filière :
Formulaires </td>
principe <td>
forme générale <input type="radio" name="filiere"
méthodes value="svm321" checked>
les formulaires svm321<br>
PHP <input type="radio" name="filiere"
value="svm322"> svm322<br>
introduction
<input type="radio" name="filiere"
exemples
actions
value="svm323"> svm323<br>
<input type="radio" name="filiere"
Connexions value="svm324"> svm324
au SGBD </td>
liste des bases </tr>
requête simple <tr>
requête <td>
améliorée <input type="submit" value="Entrer"/>
Interrogation </td>
de notre base <td></td>
</tr>
formulaire
action
</table>
</form>
Formulaire contenant des boutons exclusifs :
<input type=”checkbox”>
Conception et
Création de
Bases de Formulaire avec l’entrée checkbox<br/>
Données <form action="action_input_checkbox.php"
method="post">
L. Mouchard
Choisissez quelques cours : <br>
Formulaires
principe <input type="checkbox" name="cours[]"
forme générale value="Programmation en informatique">
méthodes Programmation en informatique<br>
les formulaires
<input type="checkbox" name="cours[]"
PHP value="Bases de données">
introduction Bases de données<br>
exemples
actions <input type="checkbox" name="cours[]"
Connexions value="Unix et langage C">
au SGBD Unix et Langage C<br>
liste des bases
<input type="checkbox" name="cours[]"
requête simple
requête
value="Assemblage">
améliorée Assemblage<br>

Interrogation <input type="submit" value="Entrer"/>


de notre base </form>
formulaire
action
Formulaire contenant un menu déroulant :
<select>
Conception et
Création de Formulaire avec le menu select<br/>
Bases de <form action="action_select.php"
Données method="get">
Sélectionner votre couleur préférée :<br>
L. Mouchard
<select name="couleur">
<option value="bleu">
Formulaires bleu
principe </option>
forme générale <option value="rouge">
méthodes rouge
les formulaires </option>
<option value="jaune">
PHP
jaune
introduction </option>
exemples
<option value="vert">
actions
vert
Connexions </option>
au SGBD <option value="violet">
liste des bases violet
requête simple </option>
requête <option value="rose">
améliorée rose
</option>
Interrogation
</select>
de notre base
<input type="submit" value="Entrer"/>
formulaire
</form>
action
Qu’est-ce que PHP ?, pourquoi utiliser ce langage ?

Conception et
Création de PHP = (Personal Home Page ou) PHP Hypertext
Bases de
Données Preprocessor : langage facilitant la génération de code
L. Mouchard HTML
Formulaires PHP peut aisément :
principe
forme générale
analyser les données transmises depuis un formulaire ;
méthodes
les formulaires
effectuer une requête SQL vers un serveur distant ;
PHP
mettre en forme la page web présentant le résultat de la
introduction requête ;
exemples
actions
PHP est facile à programmer, il dispose d’un grand
Connexions
au SGBD nombre de modules spécifiques additionnels ;
liste des bases
requête simple beaucoup de documentations pour PHP/MySQL sont
requête
améliorée disponibles sur le réseau ;
Interrogation
de notre base PHP fonctionne indifféremment sur PC (Windows et
formulaire
action Linux), Mac (Mac OS X) et stations de travail ;
PHP est gratuit, ces codes sources sont disponibles.
Notre premier programme PHP

Conception et <html>
Création de <head>
Bases de <title>premier exemple de
Données programme PHP</title>
</head>
L. Mouchard <body>
<?php
print("Nous sommes le ",
Formulaires date("d m Y, H:i"));
principe ?>
forme générale </body>
méthodes </html>
les formulaires

PHP
introduction
le nom du fichier doit se terminer par .php ;
exemples
actions
le programme PHP est inséré au milieu du code HTML ;
Connexions le programme PHP est délimité par <?php et ?> ;
au SGBD
liste des bases le caractère ; termine toutes les lignes d’instructions ;
requête simple
requête la commande print va afficher dans cette page HTML
améliorée

Interrogation
l’information passée entre parenthèses, ici
de notre base
formulaire
Nous sommes le " suivi de la commande date, avec un
action format particulier (d : jour, m : mois, Y : année avec 4
chiffres, H : heure sur 24 h et i : minutes).
Notre deuxième programme PHP

Conception et
Création de
Bases de <html>
Données <head>
<title>deuxième exemple de
L. Mouchard programme PHP</title>
</head>
<body>
Formulaires <center>
principe <?php
forme générale $texte = "margaux delabio";
méthodes print(strtoupper($texte));
les formulaires ?>
PHP </center>
</body>
introduction
exemples
</html>
actions

Connexions
au SGBD
ici, la valeur de la variable texte est donnée de façon
liste des bases explicite ;
requête simple
requête
améliorée une fonction, strtoupper transformant toutes les
Interrogation minuscules d’une chaı̂ne de caractères en majuscules, est
de notre base
formulaire utilisée ;
action
Exemple de fichier-action pour l’entrée texte

Conception et
Création de
Bases de
Données

L. Mouchard <html>
<head>
Formulaires <title>Action pour l’entrée texte</title>
principe </head>
forme générale <body>
méthodes <?php
les formulaires $nom = $_GET[’nom’] ;
print("Vous vous appelez : $nom");
PHP ?>
introduction </body>
exemples </html>
actions

Connexions
au SGBD
liste des bases $nom = $_GET[’nom’] permet de récupérer la valeur nom transmise
requête simple
requête
en mode get ;
améliorée

Interrogation
de notre base
formulaire
action
Exemple de fichier-action pour l’entrée radio

Conception et
Création de
Bases de
Données

L. Mouchard <html>
<head>
<title>Action pour l’entrée radio</title>
Formulaires </head>
principe <body>
forme générale <?php
méthodes
$filiere = $_GET[’filiere’] ;
les formulaires
print("Vous avez sélectionné
PHP la filière suivante : $filiere");
introduction ?>
exemples </body>
actions </html>

Connexions
au SGBD
liste des bases
requête simple
$filiere = $_GET[’filiere’] permet de récupérer la valeur
requête
améliorée
filiere transmise en mode get ;
Interrogation
de notre base
formulaire
action
Exemple de fichier-action pour l’entrée checkbox

Conception et
Création de
Bases de <html>
Données <head>
<title>Action pour l’entrée checkbox</title>
L. Mouchard </head>
<body>
Formulaires Liste des cours auxquels vous vous
principe
etes inscrit&nbsp;: <br/>
^
forme générale <table>
méthodes <?php
les formulaires $cours = $_POST[’cours’];
$couleur="#ffffff";
PHP for ($i=0;$i<count($cours);$i++)
introduction {
exemples if ( $couleur == "#ffffff" )
actions $couleur="#dddddd";
else
Connexions
$couleur="#ffffff";
au SGBD
print("<tr bgcolor=\"$couleur\">");
liste des bases
print("<td>$cours[$i]</td></tr>\n");
requête simple
}
requête
améliorée ?>
</table>
Interrogation </body>
de notre base </html>
formulaire
action
Explication de l’action pour l’entrée checkbox

Conception et
Création de
Bases de
Données

L. Mouchard $cours = $_GET[’cours’] récupére la valeur cours transmise en


mode post ;
Formulaires $couleur="#ffffff"; la couleur est le blanc
principe for ($i=0;$i<count($cours);$i++) boucle parcourant une à une les valeurs
forme générale
méthodes
de 0 à nombre(cours) - 1
les formulaires if ( $couleur == "#ffffff" )
PHP $couleur="#dddddd"; si la couleur est le blanc, elle est
introduction changée en gris
exemples
else
actions
$couleur="#ffffff"; sinon (elle est grise), elle est changée
Connexions
au SGBD
en blanc
liste des bases echo "<tr bgcolor=\"$couleur\">" ;
requête simple echo "<td>$cours[$i]</td></tr>\n"; ajoute au fichier HTML une balise ligne
requête
améliorée (de couleur) dans le tableau
Interrogation
de notre base
formulaire
action
Exemple de fichier-action pour le select

Conception et
Création de
Bases de
Données

L. Mouchard

<html>
Formulaires
<head>
principe
<title>Action pour le menu select</title>
forme générale
</head>
méthodes
les formulaires
<body>
<?php
PHP $couleur = $_GET[’couleur’] ;
introduction print("Votre couleur sélectionnée est : ");
exemples print("$couleur\n");
actions ?>
</body>
Connexions </html>
au SGBD
liste des bases
requête simple
requête
améliorée

Interrogation
de notre base
formulaire
action
Interrogation du Système de Gestion de Bases de
Données : la liste des bases de données
Conception et
Création de <html>
Bases de <head>
Données <title>Liste des bases gérées</title>
</head>
L. Mouchard <body>
Liste des bases gérées :
Formulaires <ol>
<?php
principe
# Requ^
ete de connexion à l’hote
forme générale
méthodes
$connexion=mysql_connect("localhost","lm","FM5");
les formulaires
# Déterminer la liste des bases
PHP $resultat=mysql_list_dbs($connexion);
introduction
exemples # Combien y-a-t-il de bases ?
actions $nbre_bases=mysql_num_rows($resultat);
Connexions # Affichage des bases (une par une)
au SGBD for($i=1;$i<=$nbre_bases;$i++) {
liste des bases $ligne=mysql_fetch_array($resultat);
requête simple print("<li>$ligne[0]</li>\n"); }
requête
améliorée # Terminer la connexion
mysql_close($connexion);
Interrogation ?>
de notre base </ol>
formulaire </body>
action </html>
Explication du code PHP

Conception et → $connexion=mysql_connect("localhost","lm","FM5");
Création de ouverture de la connexion, dans l’ordre, doivent être indiqués le nom du SGBD, le nom
Bases de de connexion, le mot de passe
Données

L. Mouchard → $resultat=mysql_list_dbs($connexion);
$resultat va recevoir la liste des bases de données, il y aura dans $resultat autant
Formulaires de lignes que de bases de données gérées par le SGBD
principe
forme générale → $nbre_bases=mysql_num_rows($resultat);
méthodes $nbre_bases va recevoir le nombre de lignes dans $resultat, c’est à dire le nombre de
les formulaires
bases de données gérées par le SGBD
PHP
introduction → for($i=1;$i<=$nbre_bases;$i++) {
exemples
actions
boucle de traitement : nous allons exécuter les commandes suivantes autant de fois
qu’il y a des bases de données
Connexions
au SGBD
liste des bases
→ $ligne=mysql_fetch_array($resultat);
requête simple intérieur de boucle : récupération de la prochaine ligne de resultat
requête
améliorée
→ print("<li>$ligne[0]</li>\n"); }
Interrogation intérieur de boucle : affichage dans <li> de la ligne récupérée de resultat
de notre base
formulaire
action
→ mysql_close($connexion);
fermeture de la connexion
Première requête MySQL : récupération des noms
d’étudiants
Conception et
Création de
Bases de <?php
Données # Établir la connexion, sélectionner la base
$connexion=mysql_connect("localhost","lm","FM5");
L. Mouchard mysql_select_db("baselaurent");

Formulaires # Construire la requ^


ete
principe $requete="SELECT etu_nom FROM etudiant ".
forme générale "ORDER BY etu_nom LIMIT 5 ;" ;
méthodes
les formulaires # Demander l’exécution de la requ^
ete
$resultat=mysql_query($requete);
PHP
introduction # Combien y-a-t-il de lignes ?
exemples $nbre_lignes=mysql_num_rows($resultat);
actions

Connexions # Boucle principale


au SGBD for($i=1;$i<=$nbre_lignes;$i++) {
# Récupérer la ligne puis l’afficher
liste des bases
$ligne=mysql_fetch_object($resultat);
requête simple
requête
print("$ligne->etu_nom<br/>\n"); }
améliorée
# Fermeture de la connexion
Interrogation my_close($connexion);
de notre base ?>
formulaire
action
Explication du code PHP (hors connexion et
déconnexion)
Conception et
Création de → mysql_select_db("baselaurent");
Bases de sélection de la base de données
Données

L. Mouchard → $requete="SELECT etu_nom FROM etudiant ORDER BY etu_nom LIMIT 5 ;";


construction de la requête à soumettre au SGBD
Formulaires
principe
forme générale
→ $resultat=mysql_query($requete);
méthodes $resultat va recevoir le résultat de la requête SQL envoyée au SGBD
les formulaires

PHP → $nbre_lignes=mysql_num_rows($resultat);
introduction
exemples
$nbre_lignes va recevoir le nombre de lignes dans $resultat (au max. 5)
actions

Connexions → for($i=1;$i<=$nbre_lignes;$i++) {
au SGBD boucle de traitement
liste des bases
requête simple
requête → $ligne=mysql_fetch_array($resultat);
améliorée
intérieur de la boucle : récupération de la prochaine ligne de resultat
Interrogation
de notre base
→ print("$ligne->etu_nom<br/>\n"); }
formulaire
action intérieur de la boucle : affichage du champs etu_nom de ligne puis
passage à la ligne
Deuxième requête MySQL : récupération des noms
d’étudiants avec mise en forme
Conception et
Création de <?php
Bases de $connexion=mysql_connect("localhost","lm","FM5");
Données mysql_select_db("baselaurent");
L. Mouchard
$requete="SELECT etu_nom FROM etudiant ".
"ORDER BY etu_nom LIMIT 5;" ;
Formulaires
principe $resultat=mysql_query($requete);
forme générale
méthodes $nbre_lignes=mysql_num_rows($resultat);
les formulaires
$couleur="#ffffff";
PHP
introduction for($i=1;$i<=$nbre_lignes;$i++) {
exemples
actions
if ( $couleur == "#ffffff" )
Connexions $couleur="#dddddd";
au SGBD else
liste des bases $couleur="#ffffff";
requête simple
requête $ligne=mysql_fetch_object($resultat);
améliorée print("<tr bgcolor=\"$couleur\">");
print("<td> $ligne->etu_nom </td></tr>\n"); }
Interrogation
de notre base
mysql_close($connexion);
formulaire
?>
action
Formulaire pour l’interrogation de notre base

Conception et
Création de
Bases de
Données

L. Mouchard <html>
<head>
Formulaires <title>
Interrogation de la base de données
principe
</title>
forme générale
méthodes
</head>
les formulaires
<body>
PHP <h1>Interrogation de la base de données</h1>
introduction <form action="connexion5.php" method="get">
exemples Entrer le code filière :
actions <input type="text" name="code_filiere"/>
<br/>
Connexions <input type="submit" value="Entrer"/>
au SGBD </form>
liste des bases </body>
requête simple </html>
requête
améliorée

Interrogation
de notre base
formulaire
action
Action pour l’interrogation de notre base

Conception et
Création de <?php
Bases de $fil_code =$_GET[’code_filiere’];
Données
print("<h1 align=center> Étudiants inscrits
L. Mouchard
dans la filière");
print(" $fil_code </h1><hr width=’50%’>");
Formulaires
principe # Etablir la connexion
forme générale $connexion=mysql_connect("localhost","lm","FM5");
méthodes
les formulaires # Sélection de la base adéquate
mysql_select_db("baselaurent");
PHP
introduction $requete="SELECT etu_nom,etu_prenom ".
exemples
"FROM etudiant,filiere ".
actions
"WHERE etu_fil_id=fil_id ".
Connexions "AND fil_code=\"$fil_code\" ".
au SGBD "ORDER BY etu_nom ;" ;
liste des bases $resultat = mysql_query($requete) ;
requête simple
requête # Combien y-a-t-il de lignes ?
améliorée $nbre_lignes = mysql_num_rows($resultat);
Interrogation
print("<center><table border=1>");
de notre base
print("<tr><td>Nom</td><td>Prénom</td></tr>");
formulaire
$couleur="#ffffff";
action
Action pour l’interrogation de notre base

Conception et
Création de
Bases de
Données for($i=1;$i<=$nbre_lignes;$i++) {

L. Mouchard if ( $couleur == "#ffffff" )


$couleur="#dddddd";
Formulaires else
$couleur="#ffffff";
principe
forme générale
méthodes
# Récupérer ligne après ligne
les formulaires $ligne = mysql_fetch_object($resultat);

PHP print("<tr bgcolor=\"$couleur\">");


introduction printf("<td> %s </td>\n <td> %s </td>\n</tr>\n",
exemples $ligne->etu_nom,$ligne->etu_prenom);
actions
}
Connexions
au SGBD # Construction du tableau centré
liste des bases print(" </table></center>\n");
requête simple
requête
améliorée # Fermeture de la connexion à la base de données
mysql_close($connexion);
Interrogation ?>
de notre base
formulaire
action

Vous aimerez peut-être aussi