SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger

La structure de la base de données

Juin 2001 — mis à jour le : Décembre 2008

Toutes les versions de cet article :


La structure de la base de données est assez simple. Certaines conventions ont été utilisées, que vous repérerez assez facilement au cours de ce document. Par exemple, la plupart des objets sont indexés par un entier autoincrémenté dont le nom est du type id_objet, et qui est déclaré comme clé primaire dans la table appropriée.

NB : cet article commence à dater, et personne n’a encore pris la peine d’en faire la mise à jour. Il faut le lire comme un élément permettant de comprendre le fonctionnement de SPIP, mais plus comme un outil de référence. Si vous souhaitez contribuer à la documentation en refondant cet article, surtout n’hésitez pas !

Contenu rédactionnel

Les rubriques : spip_rubriques

image 160 x 169
-  Chaque rubrique est identifiée par son id_rubrique.
-  id_parent est l’id_rubrique de la rubrique qui contient cette rubrique (zéro si la rubrique se trouve à la racine du site).
-  titre, descriptif, texte parlent d’eux-mêmes.
-  id_secteur est l’id_rubrique de la rubrique en tête de la hiérarchie contenant cette rubrique. Une rubrique dépend d’une rubrique qui dépend d’une rubrique... jusqu’à une rubrique placée à la racine du site ; c’est cette dernière rubrique qui détermine l’id_secteur. Cette valeur précalculée permet d’accélérer certains calculs de l’espace public (en effet, les brèves sont classées par secteur uniquement, et non selon toute la hiérarchie).
-  maj est un champ technique mis à jour automatiquement par MySQL, qui contient la date de la dernière modification de l’entrée dans la table.
-  export, id_import sont des champs réservés pour des fonctionnalités futures.

Les articles : spip_articles

image 185 x 359
-  Chaque article est identifié par son id_article.
-  id_rubrique indique dans quelle rubrique est rangé l’article.
-  id_secteur indique le secteur correspondant à la rubrique susmentionnée (voir le paragraphe précédent pour l’explication de la différence entre les deux).
-  titre, surtitre, soustitre, descriptif, chapo, texte, ps parlent d’eux-mêmes.
-  date est la date de publication de l’article (si l’article n’a pas encore été publié, c’est la date de création).
-  date_redac est la date de publication antérieure si vous réglez cette valeur, sinon elle est égale à « 0000-00-00 ».
-  statut est le statut actuel de l’article : prepa (en cours de rédaction), prop (proposé à la publication), publie (publié), refuse (refusé), poubelle (à la poubelle).
-  accepter_forum : permet de régler manuellement si l’article accepte des forums (par défaut, oui).
-  maj : même signification que dans la table des rubriques.
-  export est un champ réservé pour des fonctionnalités futures.
-  images est un champ contenant la liste des images utilisées par l’article, dans un format particulier. Ce champ est généré par spip_image.php3.
-  visites et referers sont utilisés pour les statistiques sur les articles. Le premier est le nombre de chargements de l’article dans l’espace public ; le deuxième contient un extrait de hash des différents referers, afin de connaître le nombre de referers distincts. Voir inc-stats.php3.

Les auteurs : spip_auteurs

image 150 x 226
-  Chaque auteur est identifié par son id_auteur.
-  nom, bio, nom_site, url_site, pgp sont respectivement le nom de l’auteur, sa courte biographie, son adresse e-mail, le nom et l’URL de son site Web, sa clé PGP. Informations modifiables librement par l’auteur.
-  email, login sont son e-mail d’inscription et son login. Ils ne sont modifiables que par un administrateur.
-  pass est le hash MD5 du mot de passe.
-  htpass est la valeur cryptée (i.e. générée par crypt()) du mot de passe pour le .htpasswd.
-  statut est le statut de l’auteur : 0minirezo (administrateur), 1comite (rédacteur), 5poubelle (à la poubelle), 6forum (abonné aux forums, lorque ceux-ci sont réglés en mode « par

abonnement »).
-  maj a la même signification que dans les autres tables.

Les brèves : spip_breves

image 161 x 168
-  Chaque brève est identifiée par son id_breve.
-  id_rubrique est la rubrique (en fait, le secteur) dans laquelle est classée la brève.
-  titre, texte, lien_titre, lien_url sont le titre, le texte, le nom et l’adresse du lien associé à la brève.
-  date_heure est la date de la brève.
-  statut est le statut de la brève : prop (proposée à la publication), publie (publiée), refuse (refusée).
-  maj : idem que dans les autres tables.

Les mots-clés : spip_mots

image 149 x 112
-  Chaque mot-clé est identifié par son id_mot.
-  Le type du mot-clé est le type, ou groupe, choisi pour le mot-clé. En définissant plusieurs types, on définit plusieurs classifications indépendantes (par exemple « sujet », « époque », « pays »...).
-  titre, descriptif, texte parlent d’eux-mêmes.
-  maj : idem que dans les autres tables.

Les sites syndiqués : spip_syndic

image 129 x 131
-  Chaque site syndiqué est identifié par son id_syndic.
-  id_rubrique et id_secteur définissent l’endroit dans la hiérarchie du site où viennent s’insérer les contenus syndiqués.
-  nom_site, url_site, descriptif sont le nom, l’adresse et le descriptif du site syndiqué.
-  url_syndic est l’adresse du fichier dynamique utilisé pour récupérer les contenus syndiqués (souvent il s’agit de url_site suivi de backend.php3).

Les articles syndiqués : spip_syndic_articles

image 164 x 112
-  Chaque article syndiqué est identifié par son id_syndic_article.
-  id_syndic réfère au site syndiqué d’où est tiré l’article.
-  titre, url, date, lesauteurs parlent d’eux-mêmes.

Eléments interactifs

Les messages de forums : spip_forum

image 171 x 321
-  Chaque message de forum est identifié par son id_forum.
-  L’objet auquel est attaché le forum est identifié par son id_rubrique, id_article ou id_breve. Par défaut, ces valeurs sont égales à zéro.
-  Le message parent (c’est-à-dire le message auquel répond ce message) est identifié par id_parent. Si le message ne répond à aucun autre message, cette valeur est égale à zéro.
-  titre, texte, nom_site, url_site sont le titre et le texte du message, le nom et l’adresse du lien y attaché.
-  auteur et email_auteur sont le nom et l’e-mail déclarés par l’auteur. Dans le cas des forums par abonnement, ils ne sont pas forcément identiques aux données enregistrées dans la fiche de l’auteur (i.e. dans la table spip_auteurs).
-  id_auteur identifie l’auteur du message dans le cas de forums par abonnement.
-  statut est le statut du message : publie (lisible dans l’espace public), prive (écrit en réaction à un article dans l’espace privé), privrac (écrit dans le forum interne dans l’espace privé), off (supprimé ou à valider, selon la modération des forums - a priori ou a posteriori).
-  ip est l’adresse IP de l’auteur, dans les forums publics.
-  maj a la même signification que dans les autres tables.

Les pétitions : spip_petitions

image 173 x 131
-  id_article identifie l’article auquel est associée la pétition (une seule pétition par article).
-  email_unique, site_obli, site_unique, message définissent la configuration de la pétition : l’adresse e-mail des signataires doit-elle être unique dans les signatures, l’adresse Web est-elle obligatoire, est-elle unique, un message attenant aux signatures est-il autorisé (oui ou non).
-  texte est le texte de la pétition.
-  maj : pareil que dans les autres tables.

Les signatures de pétitions : spip_signatures

image 167 x 188
-  Chaque signature est identifiée par son id_signature.
-  id_article identifie l’article, donc la pétition sur laquelle est apposée la signature.
-  nom_email, ad_email, nom_site, url_site sont le nom, l’adresse e-mail, ainsi que le site Web déclarés par le signataire.
-  message est le message éventuellement entré par le signataire.
-  statut est le statut de la signature : publie (acceptée), poubelle (supprimée) ; toute autre valeur donne la valeur de la clé de validation utilisée pour la confirmation par e-mail.
-  maj a la même signification que dans les autres tables.

Les relations entre objets

Ces tables ne gèrent aucun contenu, simplement une relation entre les objets présents dans d’autres tables. Ainsi :

-  spip_auteurs_articles spécifie la relation entre auteurs et articles. Si un id_auteur y est associé à un id_article, cela veut dire que l’auteur en question a écrit ou co-écrit l’article (il peut y avoir plusieurs auteurs par article, et vice-versa bien sûr).

-  spip_mots_articles définit de même la relation de référencement des articles par des mots-clés.

Gestion du site

La table spip_meta est primordiale. Elle contient des couples (nom, valeur) indexés par le nom (clé primaire) ; ces couples permettent de stocker différentes informations telles que la configuration du site, ou la version installée de SPIP.

La table spip_forum_cache est utilisée afin d’adapter le système de cache à l’instantanéité des forums. Pour chaque fichier du cache ayant donné lieu à une requête sur la table spip_forum, la table spip_forum_cache stocke les paramètres de la requête (article, rubrique, brève et éventuel message parent du forum). Lorsqu’un message est posté, les paramètres du message sont comparés avec ceux présents dans spip_forum_cache, et pour chaque correspondance trouvée le fichier cache indiqué dans la table est effacé. Ainsi les messages n’attendent pas le recalcul régulier de la page dans laquelle ils s’insèrent pour apparaître dans l’espace public.

Indexation (moteur de recherche)

Six tables sont utilisées par le moteur de recherche. Elles se divisent en deux catégories.

Le dictionnaire d’indexation : spip_index_dico

Chaque mot rencontré au cours de l’indexation est stocké dans cette table, ainsi que les 64 premiers bits de son hash MD5. C’est le mot qui sert de clé primaire, permettant ainsi d’effectuer très rapidement des requêtes sur un début de mot ; on récupère alors le(s) hash satisfaisant à la requête, afin d’effectuer la recherche proprement dite dans les tables d’indexation.

Les tables d’indexation : spip_index_*

Ces tables, au nombre de cinq, gèrent chacune l’indexation d’un type d’objet : articles, rubriques, brèves, auteurs, mots-clés. Une entrée par mot et par objet est stockée. Chaque entrée contient le hash du mot (en fait les 64 bits de poids fort du hash MD5, cf. ci-dessus), l’identifiant de l’objet indexé (par exemple l’id_article pour un article), et le nombre de points associé à l’indexation du mot dans l’objet. Ce nombre de points est calculé en fonction du nombre d’occurences du mot, pondéré par le champ où ont lieu les occurences : une occurence dans le titre d’un article génère plus de points qu’une occurence dans le corps de l’article.

Le mécanisme d’indexation est expliqué plus en détail ici.


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé