Charte de nommage Base de données

= 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: On mettra un commentaire à côté de chaque champ pour en expliquer la signification.
 * Chaque table est définie dans son propre fichier dont le nom est llx_matable.sql
 * 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: Toutefois, il ne faut pas utiliser ces alias sur des requêtes update car non compatible avec mysql 3.1.

= Exemples =

Fichier clés/index llx_matable.key.sql
= 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.