IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Extraction de données sur un site internet

II Modélisation des informations

Le tutorial va traiter trois façons d'exploiter les informations collectées. Elles seront implémentées dans l'application finale. Ces méthodes sont :

1) texte

C'est un format non structuré. Le format texte n'existe que pour vérifier que la collecte s'est passée correctement.


Exemple de sortie texte :

Titre : Jackie Brown
Pays : Film américain
Année : 1997
Genres : Policier, Drame
Durée : 150 minutes
Date de sortie : 01 Avril 1998
Acteurs : Avec Pam Grier, Samuel L. Jackson, Robert De Niro, Bridget Fonda, Michael Keaton
Réalisateur : Quentin Tarantino
Synopsis : Jackie Brown, hôtesse de l'air, arrondit ses fins de mois en convoyant de l'argent liquide pour le compte d'un trafiquant d'armes, Ordell Robbie. Un jour, un agent federal et un policier de Los Angeles la cueillent à l'aéroport. Ils comptent sur elle pour faire tomber le trafiquant. Jackie échafaude alors un plan audacieux pour doubler tout le monde lors d'un prochain transfert qui porte sur la modeste somme de cinq cent mille dollars. Mais il lui faudra compter avec les complices d'Ordell, qui ont des méthodes plutôt expéditives.


2) le flux XML

L'intérêt du flux XML réside dans sa portabilité. Les informations sont structurées et l'ajout ultérieur de champs est aisé. L'importation du flux dans n'importe quel SGBD est facile.

<?xml version="1.0" encoding="ISO-8859-1" ?>
 - <LISTE_FILMS>
   - <FILM>
    <TITRE>Jackie Brown</TITRE>
    <PAYS>Film américain</PAYS>
    <ANNEE>1997</ANNEE>
    <GENRE>Policier</GENRE>
    <GENRE>Drame</GENRE>
    <DUREE>150</DUREE>
    <DATE_DE_SORTIE>01 Avril 1998</DATE_DE_SORTIE>
    <ACTEUR>Pam Grier</ACTEUR>
    <ACTEUR>Samuel L. Jackson</ACTEUR>
    <ACTEUR>Robert De Niro</ACTEUR>
    <ACTEUR>Bridget Fonda</ACTEUR>
    <ACTEUR>Michael Keaton</ACTEUR>
    <REALISATEUR>Quentin Tarantino</REALISATEUR>
    <SYNOPSIS>Jackie Brown, hôtesse de l'air, arrondit ses fins de mois en convoyant de l'argent liquide pour le compte d'un trafiquant d'armes, Ordell Robbie. Un jour, un agent federal et un policier de Los Angeles la cueillent à l'aéroport. Ils comptent sur elle pour faire tomber le trafiquant. Jackie échafaude alors un plan audacieux pour doubler tout le monde lors d'un prochain transfert qui porte sur la modeste somme de cinq cent mille dollars. Mais il lui faudra compter avec les complices d'Ordell, qui ont des méthodes plutôt expéditives.</SYNOPSIS>
   </FILM>
 </LISTE_FILMS>


3) la base de données

3-1) Présentation de la nomenclature

La nomenclature choisie pour le nommage des tables et champs est celle que j'ai mise au point et utilise depuis des années. En voici brièvement les règles principales :
  • les noms des tables sont en majuscule
  • les noms des champs sont en majuscule
  • les index primaires sont de la forme 'ID_' + 'nom de la table'
  • les clefs étrangères sont de la forme 'nom de la table référencée' + '_ID'
  • une table de jointure est de la forme 'nom de la table 1' + '_' + 'nom de la table 2'
Cet ensemble de règles permet d'identifier, au premier coup d'oeil, toutes les clefs étrangères d'une table. D'autre part, la lisibilité des requêtes SQL est largement favorisée. Dans beaucoup de cas, il n'est pas nécessaire de préciser le nom de la table rattachée à un champ. Je vous invite à respecter ces règles sur un projet, et à apprécier leur efficacité


3-2) MySQL

Dans le présent tutorial, le choix de la base s'est porté sur MySQL ; en effet, la notoriété du couple MySQL / Php n'est plus à faire.

La structure la plus simple est la suivante :
Il est à noter que la base a été normalisée. Il n'existe pas de référence d'acteurs ou de genres dans la table FILM. Les relations sont faites au moyen des tables associatives ACTEUR_FILM et GENRE_FILM.



Les films :
CREATE TABLE FILM (
  ID_FILM int(11) NOT NULL auto_increment,
  TITRE varchar(255) NOT NULL default '',
  PAYS_ID int(11) NOT NULL default '0',
  ANNEE date default NULL,
  DUREE int(11) NOT NULL default '0',
  DATE_SORTIE date default NULL,
  REALISATEUR_ID int(11) NOT NULL default '0',
  SYNOPSIS text NOT NULL,
  PRIMARY KEY (ID_FILM),
  KEY TITRE (TITRE),
  KEY PAYS_ID (PAYS_ID),
  KEY DUREE (DUREE),
  KEY DATE_SORTIE (DATE_SORTIE),
  KEY REALISATEUR_ID (REALISATEUR_ID),
  KEY ANNEE (ANNEE)
) TYPE=MyISAM;


Les acteurs :
CREATE TABLE ACTEUR (
  ID_ACTEUR int(11) NOT NULL auto_increment,
  NOM_ACTEUR varchar(255) NOT NULL default '',
  PRIMARY KEY (ID_ACTEUR)
) TYPE=MyISAM;


Les genres :
CREATE TABLE GENRE (
  ID_GENRE int(11) NOT NULL auto_increment,
  NOM_GENRE varchar(255) NOT NULL default '',
  PRIMARY KEY (ID_GENRE)
) TYPE=MyISAM;


Une table associative entre les acteurs et les films :
CREATE TABLE ACTEUR_FILM (
  ACTEUR_ID int(11) NOT NULL default '0',
  FILM_ID int(11) NOT NULL default '0',
  KEY ACTEUR (ACTEUR_ID,FILM_ID)
) TYPE=MyISAM;


Une table associative entre les genres et les films :
CREATE TABLE GENRE_FILM (
  GENRE_ID int(11) NOT NULL default '0',
  FILM_ID int(11) NOT NULL default '0',
  KEY GENRE (GENRE_ID,FILM_ID)
) TYPE=MyISAM;


Le pays d'origine du film :
CREATE TABLE PAYS (
  ID_PAYS int(11) NOT NULL auto_increment,
  NOM_PAYS varchar(255) NOT NULL default '',
  PRIMARY KEY (ID_PAYS)
) TYPE=MyISAM;


Le réalisateur du film :
CREATE TABLE REALISATEUR (
  ID_REALISATEUR int(11) NOT NULL auto_increment,
  NOM_REALISATEUR varchar(255) NOT NULL default '',
  PRIMARY KEY (ID_REALISATEUR)
) TYPE=MyISAM;


3-3) variante avec MySQL InnoDB

Cette variante ne sera pas traitée dans ce tutorial, elle est juste donnée à titre d'exemple.
Les tables innoDB permettent de travailler avec des clefs étrangères. Ainsi, l'intégration de clefs étrangères dans les tables associatives ACTEUR_FILM et GENRE_FILM permettent d'éviter les suppressions en cascade "à la main" lors des opérations de suppression de films par exemple.

Dans mon environnement, la base de données s'appelle DVD.
Les tables FILM, ACTEUR et GENRE changent de type :
remplacer dans le CREATE TABLE : TYPE=InnoDB

La table ACTEUR_FILM devient :
CREATE TABLE ACTEUR_FILM (
  ACTEUR_ID int(11) NOT NULL default '0',
  FILM_ID int(11) NOT NULL default '0',
  KEY ACTEUR_ID (ACTEUR_ID),
  KEY FILM_ID (FILM_ID),
  FOREIGN KEY (`ACTEUR_ID`) REFERENCES `DVD.ACTEUR` (`ID_ACTEUR`) ON DELETE CASCADE,
  FOREIGN KEY (`FILM_ID`) REFERENCES `DVD.FILM` (`ID_FILM`) ON DELETE CASCADE
) TYPE=InnoDB;


La table GENRE_FILM devient :
CREATE TABLE GENRE_FILM (
  GENRE_ID int(11) NOT NULL default '0',
  FILM_ID int(11) NOT NULL default '0',
  KEY GENRE_ID (GENRE_ID),
  KEY FILM_ID (FILM_ID),
  FOREIGN KEY (`GENRE_ID`) REFERENCES `DVD.GENRE` (`ID_GENRE`) ON DELETE CASCADE,
  FOREIGN KEY (`FILM_ID`) REFERENCES `DVD.FILM` (`ID_FILM`) ON DELETE CASCADE
) TYPE=InnoDB;