Définition des données

Structure des tables

La structure des tables ne s'improvise pas, et va être issue d'une bonne analyse. Vous utiliserez pour cela une méthodologie rigoureuse (Merise, UML...). Nous n'aborderons pas cela dans ces supports de cours (sauf quand je mettrai en ligne les supports Merise...).

A l'issue de cette étude, vous aurez listé les tables à créer, avec pour chacune d'elle la liste des champs ainsi que leur structure précise (chaine de caractère, nombre, date...).

La création proprement dite de chaque table se fera avec l'instruction CREATE TABLE, dans laquelle nous enumèrerons les différents champs, avec le type de données (et d'éventuelles options).

Figure 1 - La création d'une table d'étudiants
  1. CREATE TABLE etudiants (
  2. id_etudiant INT UNSIGNED NOT NULL AUTO_INCREMENT,
  3. PRIMARY KEY(id_etudiant),
  4. nom VARCHAR(255),
  5. prenom VARCHAR(255),
  6. naissance DATE,
  7. id_formation INT UNSIGNED
  8. );

Dans cet exemple, id_etudiants sera la clef primaire, avec la particularité d'être auto-incrémentée.

Quels types de données ?

Se limiter à chiffres ou lettres est bien sûr trop restreint, nous disposons de nombreux types à disposition. En gras, les plus fréquents.

  • numériques entiers : tinyint, smallint, mediumint, int (ou integer), bigint
  • numériques décimaux : float(p,e), real(p,e), double(p,e), decimal(p,e), numeric(p,e)
  • dates & heures : timestamp(n), datetime, date, time
  • chaîne de caractères : char(m), varchar(m), tinyblob, tinytext, blob, text, mediumblob, mediumtext, longblob, longtext
  • une valeur dans une énumération : ENUM("a", "b", "c")
  • une ou plusieurs valeur dans une énumération : SET("a", "b", "c")

Pour les chaînes variables, la valeur varchar(255) me parait la seule acceptable (à moins de vouloir absolument se limiter). Bien se souvenir qu'un varchar(255) vide pèse autant qu'un varchar(60)...

Pour les entiers qui sont des index autoincrémentés, ne pas oublier l'option UNSIGNED (vous perderiez la moitié des valeurs possibles)...

On essaiera d'avoir le type le plus adapté, pour optimiser l'espace de stockage.

Mise à l'index

Un index est utilisé pour accélérer les recherches sur certains champs de notre table. Comme ils pèsent lourds et ralentissent les insertions et mises à jour, on évitera d'en mettre partout (sauf si nous n'avons que peu de mises à jour et beaucoup de place...)

On distingue

  • les clefs primaires, très fortement conseillé sur chaque table en mode client/serveur (allez, disons obligatoires), qui seront souvent automatiques (également conseillé).
    id int UNSIGNED AUTO_INCREMENT , PRIMARY KEY (id)
  • les index simples
    KEY (prenom)

Modifier une structure ?

C'est bien sûr possible, même si cela dénote généralement une mauvaise analyse à la base (et vlan). Mais on sait tous que l'on peut se tromper, voire que les besoins peuvent évoluer dans le temps... Et là, une bonne analyse permettra ces évolutions (si elle est bien mise en oeuvre, of course)

Figure 2 - Différentes interventions sur des tables
  1. # Ajouter un champs Région dans la table service
  2. ALTER TABLE service ADD region VARCHAR(255);
  3.  
  4. # Modifier le type du champs ville
  5. ALTER TABLE service MODIFY ville VARCHAR(255);
  6.  
  7. # Renommer un champs (en respécifiant sa structure
  8. ALTER TABLE service CHANGE ville id_ville mediumint ;
  9.  
  10. # Supprimer une colonne
  11. ALTER TABLE service DROP ville ;

En pratique

Les interfaces (PhpMyAdmin, Eskuel...) simplifient grandement la création des tables, et il serait sôt de ne pas s'en servir...




  © Richard Carlier



Carlier.as création de sites Internet

Tribune de Richard Carlier - Atontour Cocktails - Amour Photo - Cocktails Sans Alcool - Arc2I - Mots d'auteurs - WebRiche.fr - Photos de Belgique - PMPUC - RégalezVous.net - Zone Pingouin - A se rouler par terre - PasswordFinder.fr - Restaurants de Paris - France-SPA.fr - MyPortfolio.fr - RV - pYes - Et aussi : Art Aujourd'hui.info