Raccourci : CC/DB

Manuel:Conventions de codage/Base de données

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Coding conventions/Database and the translation is 100% complete.
Other languages:

Cette page décrit les conventions de codage' utilisées dans les fichiers de la MediaWiki codebase écrite pour utilisation avec une base de données. Voir aussi les general conventions qui s’appliquent à tous les langages de programmes, y compris ceux des bases de données. Si vous souhaitez une courte liste de contrôle pour vous aider à revoir vos commits, essayez d’utiliser le Liste de vérifications pré-commit .

MySQL/MariaDB

Utilisez 'UPPERCASE pour les mots clés MySQL/MariaDB, et lowercase pour des choses comme les types. Ne spécifiez pas la longueur des types numériques, mais faites le pour les types varchar() et varbinary(). Utilisez varbinary(14) pour tous les timestamps et analysez-les au format standard en utilisant $dbw->timestamp( $ts ); n’utilisez pas le type de champ timestamp.

Assurez-vous d’inclure le commentaire /*_*/ immédiatement avant n’importe quel nom de table; ceci sera remplacé par le préfixe de base de données du wiki si nécessaire, et l’oublier provoquera des problemes. De même, inclure le commentaire /*$wgDBTableOptions*/ après toute déclaration de table, et /*i*/ immédiatement avant tout nom d’index.

Créez des indices comme des instructions séparées, ne les incluez pas dans la requête de création de table; la syntaxe séparée est plus claire et permet de voir plus facilement la différence entre les indices uniques et non uniques. Ne créez pas d’indices avec ALTER TABLE ... ADD INDEX ..., utilisez toujours CREATE INDEX ... ON ... à la place.

--
-- Track page-to-page hyperlinks within the wiki.
--
CREATE TABLE /*_*/pagelinks (
  -- Key to the page_id of the page containing the link.
  pl_from int unsigned NOT NULL default 0,

  -- Key to page_namespace/page_title of the target page.
  -- The target page may or may not exist, and due to renames
  -- and deletions may refer to different page records as time
  -- goes by.
  pl_namespace int NOT NULL default 0,
  pl_title varchar(255) binary NOT NULL default ''
) /*$wgDBTableOptions*/;

CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);

Toutes les nouvelles tables doivent avoir un PRIMARY KEY, de préférence un simple AUTO_INCREMENT ID.

SQLite

SQLite utilise le même SQL que MySQL/MariaDB, donc le SQL doit être compatible avec les deux. Habituellement cela peut être réalisé à l'aide de quelques règles simples qui sont données à la section Compatibilité SQLite.

Nommage des tableaux

  • Les noms de table doivent être des noms singuliers : user, page, revision, etc. Il y a quelques exceptions historiques : pagelinks, categorylinks
  • Les noms de colonnes reçoivent un préfixe dérivé du nom de la table: le nom lui-même s’il est court, ou une abréviation:
    • pagepage_id, page_namespace, page_title
    • categorylinkscl_from, cl_namespace

Modifier le schema

Voir Development policy#Database_patches, surtout Special:Diff/537762/prev.

Lors de la mise à jour du schéma pour une extension, il est conseillé de mettre à jour le fichier de schéma d’origine et de créer un fichier correctif pour ceux qui mettent à jour à partir d’une version précédente.