Projet IDAPA

Accueil > Ressources > SPIP > La base de données relationnelles de SPIP, l’exemple de la gestion des (...)

La base de données relationnelles de SPIP, l’exemple de la gestion des rubriques

lundi 19 octobre 2009, par BRIAND, GARNIER

Garnier Floriane et Briand Camille

Nous allons aborder dans cet article, la description et le fonctionnement de la base de données SPIP au travers de quelques exemples.

SPIP est un système de publication pour l’Internet (CMS). Il s’agit d’un logiciel créé par des français (Pierre Lazuly, Arno et Erwan) et libre, destiné à la production des sites web. L’appellation libre donne à chacun le droit d’utiliser, d’étudier, de modifier, de dupliquer ou encore de diffuser le logiciel. SPIP a une licence GPL ("General public license"). C’est une licence qui fixe les conditions légales de distribution des logiciels libres.
Il est composé d’une interface PHP et d’une base de données, ici nous n’évoquerons que cette dernière.

SPIP est composé de rubriques tels que : "Utiliser SPIP", "Contribuer"..., qui sont créées via l’interface php et enregistrées dans la base de données Idapa.

Les différentes rubriques sur SPIP, sont décrites dans une table spip_rubriques avec une clé primaire (ici le champ id_rubrique) et différents champs se rapportant à chaque rubrique ( par exemple : descriptif, texte, url_propre ...).
Une fois cette table créée, les autres tables peuvent référencer une rubrique via des clefs étrangères id_rubrique qui sont des champs ne contenant que des identifiants de rubriques.

La base spip fonctionne d’après le modèle relationnel. spip_articles est une des nombreuses tables de la base. Un de ses champs : id_rubrique renvoi à la table spip_rubriques. Il est donc impératif que spip_rubriques soit créée avant spip_articles. spip_rubriques est donc une entitée. Nous avons ensuite 7 tables où apparaît le champ id_rubrique, ce qui va permettre de faire des liaisons entre toutes ces tables. Certaines de ces tables seront également considérées comme des entitées alors que d’autres seront juste des relations (cf schéma relationnel ).

Revenons sur la définition des clefs étrangères. Lorsque l’on consulte la structure des différentes tables on peut remarquer sur chaque table des renvois vers d’autres tables : ce sont des clés étrangères. Par exemple, dans la table spip_article, il y a un champ id_rubrique qui renvoi à la table spip_rubriques. id_rubrique est donc une clé étrangère de spip_articles. Ainsi lorsque l’on a des clés étrangères il faut vérifier que la table vers laquelle elle renvoie existe.

Le modèle relationnel fonctionne de la manière suivante :
- Le modèle relationnel regroupe tous les attributs d’une entité en une table unique. Quand on modifie une entité, il n’y a qu’une table à modifier.
- Si on supprime une valeur dans une clé primaire il faut en théorie supprimer toutes les valeurs correspondantes dans les clés étrangères liées.
SQL3 intègre cette gestion mais pas le niveau d’entrée du SQL2.

C’est à l’utilisateur de maintenir l’intégrité de la base de données avec des requêtes du type : OUTER JOIN pour trouver les valeurs qui ne sont plus référencées dans la clef primaire. L’interface d"administration phpmyadmin offre d’ailleurs la possibilité de lancer automatiquement ce genre de requêtes.

Pour des bases de données non transactionnelles, c’est à dire essentiellement destinées à la consultation avec peu de modifications d’enregistrements, il peut être justifié de ne pas se servir de la totalité du langage SQL pour accélérer les temps de réponse. C’est un choix répandu pour les bases de données associées aux sites web d’information.

Pour aller plus loin :
- http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_publication_pour_l%27Internet
- http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU
- http://diala.rezo.net/
- http://fr.wikipedia.org/wiki/SQL