Charte de nommage Base de données

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search

Noms de table

Toutes les tables sont préfixées pour éviter les conflits de nommage. Aujourd'hui, le préfixe est déterminé et n'est pas modifiable. Sa valeur est llx_. Il est cependant envisagé, dans une version future, de pouvoir le modifier au moment de l'installation.

Format de fichier DDL Les fichiers qui contiennent la définition de la structure de la base (DDL) doivent être au nombre de 2 par tables:

  • Chaque table est définie dans son propre fichier dont le nom est llx_matable.sql

On mettra un commentaire à côté de chaque champ pour en expliquer la signification.

  • Les clés étrangères et index de performance ou autres contraintes d'unicité sont définies dans un fichier séparé dont le nom est llx_matable.key.sql

Ces fichiers sont placés dans le répertoire install/mysql/tables pour les fichiers standards ou monmodule/tables pour les tables amenées par un module.

Clé primaire

La clé primaire d'une table s'appelle rowid.

Il y a quelques tables qui échappent à cette règle actuellement (ex Table llx_c_actioncomm), pour des raisons historiques. Une évolution pourra être étudiée pour une prochaine version.

Clé étrangère

Le nom d'une clé étrangère commence par le préfixe fk_ suivi du nom de la table liée (requis pour éviter doublons globales à la base, problématiques sous certains SGBD comme postgresql) puis du champ lié (pour permettre plusieurs clés étrangères différentes sur une même table).

Exemple: fk_facture_fourn_fk_soc

Note: Si vous développez votre propre module externe, il ne doit pas y avoir de clé étrangère depuis vos tables qui pointent sur les tables standards de Dolibarr. Ceci casserait les fonctionnalités de mise à jour, de réparation, de sauvegardes et de restauration.

Clé alternative

Parfois, il n'y a pas que la clé primaire qui doit être unique. On peut donc ajouter aussi un index clé alternative unique. Un tel index est nommé par un nom qui commence par le préfixe uk_ suivi du nom de la table d'un underscore (requis pour éviter doublons d'index globals à la base, problématiques sous certains SGBD comme postgresql) puis d'un suffixe qui caractérise la clé (pour permettre plusieurs index uniques sur une même table).

Exemple: uk_societe_code_client

Index performance

Certains champs sont souvent utilisés comme critère de recherche, de tri ou de jointure. Il convient dans ce cas, d'y mettre un index de performance. De tels indexes seront nommés avec un préfix idx_ puis le nom de la table et le nom du champ sur lequel porte l'index.

Exemple: idx_societe_user_creat

Utilisation des alias/nommages de champs

Dans le cas des select on pourra utiliser les alias pour simplifier l'écriture des requêtes:

select chp1, chpxxx2 as chp2 from table2 as t1, table2 as t2 where t1.chpx = t2.chpy

Toutefois, il ne faut pas utiliser ces alias sur des requêtes update car non compatible avec mysql 3.1.

Exemples

Fichier table llx_matable.sql

-- ===========================================================================
-- Copyright (C) 2008 Author <email@author.com>
-- 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
--
-- $Id: llx_matable.sql,v 1.23 2005/10/08 15:59:49 eldy Exp $
-- ===========================================================================

create table llx_matable
(
  rowid       integer AUTO_INCREMENT PRIMARY KEY,
  field_one   integer,
  field_two   integer NOT NULL,
  fk_field    integer,
  field_date  datetime,
  tms         timestamp
)type=innodb;

Fichier clés/index llx_matable.key.sql

-- ===========================================================================
-- Copyright (C) 2008 Author <email@author.com>
-- 
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
--
-- $Id: llx_matable.sql,v 1.23 2005/10/08 15:59:49 eldy Exp $
-- ===========================================================================


ALTER TABLE llx_matable ADD UNIQUE uk_matable_field(field_one, field_two);

ALTER TABLE llx_matable ADD CONSTRAINT fk_matable_fk_field FOREIGN KEY (fk_field) REFERENCES llx_matablepere (rowid);

Spécificités MySQL

Format de base de données

Les tables doivent être au format InnoDB. En effet, ce format gère les clés étrangères, les éventuelles restrictions qui y sont attachées et la notion d'intégrité de transactions requise pour avoir des données en base cohérente entre tables.

Spécificités PostgreSQL

Seuls les fichiers pour Mysql doivent être maintenus. Les fichiers pour les autres bases sont convertis "à la volée" par le driver Dolibarr de la base.