La forme générale de la commande permettant de modifier une table est : ALTER TABLE nomTable ACTION description ó ACTION peut être principalement ADD, MODIFY, DROP ou RENAME, et descrip-
Trang 1m o t _ d e _ p a s s e VARCHAR ( 3 2 ) NOT NULL,
a n n e e _ n a i s s a n c e INTEGER , PRIMARY KEY ( e m a i l ) ) ; CREATE TABLE P a y s ( c o d e VARCHAR( 4 ) NOT NULL,
nom VARCHAR ( 3 0 ) DEFAULT ’ I n co n n u ’ NOT NULL,
l a n g u e VARCHAR ( 3 0 ) NOT NULL, PRIMARY KEY ( c o d e ) ) ;
CREATE TABLE A r t i s t e ( i d INTEGER NOT NULL,
nom VARCHAR ( 3 0 ) NOT NULL, prenom VARCHAR ( 3 0 ) NOT NULL,
a n n e e _ n a i s s a n c e INTEGER , PRIMARY KEY ( i d ) ,
UNIQUE ( nom , prenom ) ) ; CREATE TABLE F i l m ( i d INTEGER NOT NULL,
t i t r e VARCHAR ( 5 0 ) NOT NULL, annee INTEGER NOT NULL,
i d _ r e a l i s a t e u r INTEGER ,
g e n r e VARCHAR( 3 0 ) NOT NULL,
r e s u m e TEXT , / ∗ LONG p o u r ORACLE ∗ /
c o d e _ p a y s VARCHAR ( 4 ) , PRIMARY KEY ( i d ) ,
FOREIGN KEY ( i d _ r e a l i s a t e u r ) REFERENCES A r t i s t e , FOREIGN KEY ( c o d e _ p a y s ) REFERENCES P a y s ) ;
CREATE TABLE N o t a t i o n ( i d _ f i l m INTEGER NOT NULL,
e m a i l VARCHAR ( 4 0 ) NOT NULL,
n o t e INTEGER NOT NULL, PRIMARY KEY ( i d _ f i l m , e m a i l ) , FOREIGN KEY ( i d _ f i l m ) REFERENCES Film , FOREIGN KEY ( e m a i l ) REFERENCES I n t e r n a u t e ) ; CREATE TABLE R o l e ( i d _ f i l m INTEGER NOT NULL,
i d _ a c t e u r INTEGER NOT NULL,
n o m _ r o l e VARCHAR( 6 0 ) , PRIMARY KEY ( i d _ f i l m , i d _ a c t e u r ) , FOREIGN KEY ( i d _ f i l m ) REFERENCES Film , FOREIGN KEY ( i d _ a c t e u r ) REFERENCES A r t i s t e ) ;
Ces tables sont créées, à l’aide du client mysql, avec la commande :
% mysql < Films.sql
en supposant, comme nous l’avons fait précédemment, que la base a été créée au préalable avec la commande CREATE DATABASE Films, et que l’utilisateur a son compte d’accès défini dans un fichier de configuration.my.cnf On peut alors rappeler les options de création avec la commande DESCRIBE
Trang 2204 Chapitre 4 Création d’une base MySQL
mysql> DESC Artiste;
+ -+ -+ -+ -+ -+ -+
| Field | Type | Null | Key | Default | Extra |
+ -+ -+ -+ -+ -+ -+
| annee_naissance | int(11) | YES | | NULL | |
+ -+ -+ -+ -+ -+ -+
4.3.3 Modification du schéma
La création d’un schéma n’est qu’une première étape dans la vie d’une base de données On est toujours amené par la suite à créer de nouvelles tables, à ajouter des attributs ou à en modifier la définition La forme générale de la commande permettant de modifier une table est :
ALTER TABLE nomTable ACTION description
ó ACTION peut être principalement ADD, MODIFY, DROP ou RENAME, et descrip-tion est la commande de modificadescrip-tion associée à ACTION La modificadescrip-tion d’une
table peut poser des problèmes si elle est incompatible avec le contenu existant Par exemple, passer un attribut à NOT NULL implique que cet attribut a déjà des valeurs pour toutes les lignes de la table
La commande DROP TABLE nomTable supprime une table Elle est évidemment très dangereuse une fois la base créée, avec des données Il n’est plus possible de récupérer une table détruite avec DROP TABLE.
Modification des attributs
Voici quelques exemples d’ajout et de modification d’attributs La syntaxe complète
de la commande ALTER TABLE est donnée dans l’annexe B
On peut ajouter un attribut region à la table Internaute avec la commande :
ALTER TABLE I n t e r n a u t e ADD r e g i o n VARCHAR( 1 0 ) ;
S’il existe déjà des données dans la table, la valeur sera à NULL ou à la valeur par défaut La taille de region étant certainement insuffisante, on peut l’agrandir avec MODIFY, et la déclarer NOT NULL par la même occasion :
ALTER TABLE I n t e r n a u t e MODIFY r e g i o n VARCHAR( 3 0 ) NOT NULL;
Il est également possible de diminuer la taille d’une colonne, avec le risque d’une perte d’information pour les données existantes On peut même changer son type, pour passer par exemple de VARCHAR à INTEGER, avec un résultat non défini L’option ALTER TABLE permet d’ajouter une valeur par défaut
ALTER TABLE I n t e r n a u t e ALTER r e g i o n SET DEFAULT ’PACA ’ ;
Enfin on peut détruire un attribut avec DROP
ALTER TABLE I n t e r n a u t e DROP r e g i o n ;
Trang 3Voici une session de l’utilitaire mysql illustrant les commandes de mise à jour
du schéma phpMyAdmin propose de son côté des formulaires HTML très pratiques pour effectuer les mêmes modifications
mysql> ALTER TABLE Internaute ADD region VARCHAR(10);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC Internaute;
+ -+ -+ -+ -+ -+ -+
| Field | Type | Null | Key | Default | Extra |
+ -+ -+ -+ -+ -+ -+
| annee_naissance | int(11) | YES | | NULL | |
| region | varchar(10) | YES | | NULL | |
+ -+ -+ -+ -+ -+ -+
mysql> ALTER TABLE Internaute MODIFY region VARCHAR(30) NOT NULL;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC Internaute;
+ -+ -+ -+ -+ -+ -+
| Field | Type | Null | Key | Default | Extra |
+ -+ -+ -+ -+ -+ -+
| annee_naissance | int(11) | YES | | NULL | |
| region | varchar(30) | YES | | NULL | |
+ -+ -+ -+ -+ -+ -+
mysql> ALTER TABLE Internaute ALTER region SET DEFAULT ’PACA’;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC Internaute;
+ -+ -+ -+ -+ -+ -+
| Field | Type | Null | Key | Default | Extra |
+ -+ -+ -+ -+ -+ -+
| annee_naissance | int(11) | YES | | NULL | |
| region | varchar(30) | YES | | PACA | |
+ -+ -+ -+ -+ -+ -+
Trang 4206 Chapitre 4 Création d’une base MySQL
mysql> ALTER TABLE Internaute DROP region;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Création d’index
Pour compléter le schéma d’une table, on peut définir des index Un index offre un
chemin d’accès aux lignes d’une table considérablement plus rapide que le balayage
de cette table – du moins quand le nombre de lignes est très élevé MySQL crée systématiquement un index sur la clé primaire de chaque table Il y a deux raisons à cela ;
1 l’index permet de vérifier rapidement, au moment d’une insertion, que la clé n’existe pas déjà ;
2 beaucoup de requêtes SQL, notamment celles qui impliquent plusieurs tables
(jointures), se basent sur les clés des tables pour reconstruire les liens L’index
peut alors être utilisé pour améliorer les temps de réponse
Un index est également créé automatiquement pour chaque clause UNIQUE uti-lisée dans la création de la table On peut de plus créer d’autres index, sur un ou plusieurs attributs, si l’application utilise des critères de recherche autres que les clés primaire ou secondaires
La commande MySQL pour créer un index est la suivante :
CREATE [UNIQUE] INDEX nomIndex ON nomTable (attribut1 [, ])
La clause UNIQUE indique qu’on ne peut pas trouver deux fois la même clé La
commande ci-dessous crée un index de nom idxNom sur les attributs nom et prenom
de la table Artiste Cet index a donc une fonction équivalente à la clause UNIQUE
déjà utilisée dans la création de la table
CREATE UNIQUE INDEX idxNom ON Artiste (nom, prenom);
On peut créer un index, cette fois non unique, sur l’attribut genre de la table Film.
CREATE INDEX idxGenre ON Film (genre);
Cet index permettra d’exécuter très rapidement des requêtes SQL ayant comme critère de recherche le genre d’un film
SELECT *
FROM Film
WHERE genre = ’Western’
Cela dit il ne faut pas créer des index à tort et à travers, car ils ont un impact négatif sur les commandes d’insertion et de destruction À chaque fois, il faut en effet mettre à jour tous les index portant sur la table, ce qui représente un cỏt certain
Trang 5du développement
5
Ce chapitre est une introduction aux choix techniques à effectuer au moment de
la mise en développement d’un site basé sur PHP et MySQL Avant de s’embarquer tête baissée dans la réalisation de scripts PHP, il est en effet important de se poser
un certain nombre de questions sur la pertinence des décisions (ou des absences
de décision ) prises à ce stade initial de développement, et sur leurs conséquences
à court, moyen et long terme Il s’agit véritablement d’envisager un changement d’échelle pour passer de la production de quelques scripts de petite taille comme ceux étudiés dans les chapitres précédents, à un code constitué de milliers de lignes utilisé quotidiennement par de nombreuses personnes et soumis à des évolutions produites par une équipe de développeurs Voici un échantillon de ces questions :
1 comment organiser le code pour suivre une démarche logique de développe-ment et de maintenance, et déterminer sans ambiguïté à quel endroit on doit placer tel ou tel fragment de l’application ;
2 quels outils utiliser pour tout ce qui relève du « génie logiciel » : édition des fichiers, sauvegardes, versions, livraisons, tests, etc
3 comment assurer la portabilité à long terme et le respect des normes ?
4 quels sont les impératifs de sécurité, quel est le degré de robustesse et de confidentialité attendu ?
L’importance de ces questions est à relativiser en fonction du développement visé Si vous êtes seul à produire et maintenir un site web dynamique basé sur quelques tables, quelques formulaires et un nombre limité de pages, le respect de quelques règles générales et l’utilisation d’outils légers suffira Pour des applications professionnelles impliquant des équipes de développeurs pour plusieurs centaines
de jours-homme planifiés, le recours à une méthodologie extrêmement rigoureuse s’impose Dans ce dernier cas, il est d”ailleurs indispensable de s’appuyer sur un