begin process at 2012 02 15 20:13:18
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > NOMENCLATURE : NOMMAGE DES CHAMPS DE BASE DE DONNÉE, ET DES VARIABLES

NOMENCLATURE : NOMMAGE DES CHAMPS DE BASE DE DONNÉE, ET DES VARIABLES


 Information sur le tutoriel

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Salut à tous…

Suite aux casse-têtes d’imbroglio de variables rencontrés en PHP, aux réactions des certains 'vieux' développeurs, aux conseils avisés de vieux renard de DbA, je vous propose un Tuto au nom à mourir, mais indispensable pour survivre :  la nomenclature.

Tutorial

La nomenclature.

C'est quoi ?
C'est l'ensemble des règles de nommage qui permet de ne pas se noyer dans une appli, quelle qu'elle soit.
C'est ma manière de travailler, et elle est fluide à l'usage, même pour les autres participants. Il faut juste prévoir un peu. Mais c'est indispensable en Info...


1/ BdD
- Sur le nom des tables, peu de choses.
Juste ajouter un préfixe relatif à l'utilisation des tables.
Les tables de Références (liste de trucs, etc.) : préfixe : REF_
Celles de Fonctionnement (messagerie, table des traductions en site multi-lingue, etc.) : préfixe FON_
Toutes les autres, sont normalement les tables centrales de l'utilisation de l'appli, pas de préfixe.

Ne pas oublier pour le nom de la table, qu'il n'y a que 26 lettres dans l'alphabet, et rares sont les tables ZORRO ou XYLOPHENE. Par contre, y'a beaucoup de P (PERSONNAGE, PERSONNEL, PERSONNE, FON_PROFIL, REF_PAYS, etc.). Autant que faire ce peut, au regard de la règle de nommage des champs, éviter les initiales identiques (sauf pour des types de table différents).

Avantage :
- D'un coup d'oeil vous savez retrouvez votre table dans le BO de la BdD.
- Lors de la création d'une requête, vous savez quelle est le nom de la table a utiliser.

Inconvénient :
- Il faut y réfléchir avant. Mais est-ce un inconvénient au vu du temps gagné après.


- Les champs ; là il y a du boulot.
A peu de chose près toujours avoir dans une table :
- un champ ID, clef primaire unique en auto-incrément.
- un champ LIB, qui fini toujours par avoir son utilité (liste, BO, etc.)
- puis les autres?

Nommage : préfixer les champs par les initiales de la table :
- P_ID, pour l'id de la table PAGE
- R_P_LIB, pour le libellé de la table de référence REF_PAYS
- F_P_DATEIN, pour la date de la table de fonctionnement FON_MESSAGE

Avantage :
- Lors de la création d'une requête en cours de dév., vous ne pouvez plus avoir de doute sur le champs à appeler.
- SQL ne s'emmêlera pas les pinceaux entre ID et ID (celui de USER et celui de FON_CONNEXION).

Inconvénient :
- Il faut y réfléchir avant. Mais est-ce un inconvénient au vu du temps gagné après.


2/ PHP (et autres ?)
Le préfixe ça marche, on continue donc.
Comme vous ne pouvez pas toujours connaître (ou contrôler) l'état de REGISTER_GLOBAL de votre hébergeur, autant prendre  ses précautions pour éviter que $_SESSION['nom'] prenne la valeur de $nom...

Donc :
- variable de session : préfixe 's_'
- variable passée en get : préfixe 'g_'
- variable passée en post : préfixe 'p_'
- autres, vous aurez compris,
- variable courantes : ne pas avoir des noms trop long, mais faire un nommage selon l'usage de l'objet manié. Différence en $cout (de l'article) et $cout (de mon panier). Si j'ai ce cas de figure, autant tout de suite les nommer $cout_art et $cout_pan.

Avantage :
- Lors de la création d'une requête ou d'un test en cours de dév., vous savez toujours quel est le nom de la variable à utiliser.

Inconvénient :
- Là encore il faut y réfléchir avant. Mais est-ce un inconvénient au vu du temps gagné après, surtout en recherche de debug lié à un conflit de nom de variable

 

Voilà, sans prétention. Evident pour moi, mais apparemment pas pour tout le monde...

Tartuffe

 Historique

23 février 2007 10:31:14 :
' transformé en ? via WORD. Corrigé via Notepad ^^
23 février 2007 10:36:08 :
- second correctif des ? Manuel celui ci

Commentaires

Commentaire de malalam le 25/02/2007 10:36:14 administrateur CS

Hello,

avoir des règles de nommage est une évidence.
Et elles doivent permettre une simple chose : facilité la lecture et la compréhension.
Donc même si ce que tu dis est vrai, perso, P_ID ne veut strictement rien dire pour moi. Alors que PAGE_ID est bien plus parlant.
Quant aux variables PHP : mettre la provenance des variables dans leur nom me parair curieux...si tu as peur d'écraser un $_SESSION['nom'] par un $nom, c'est que tu codes un peu au hasard : tu es censé savoir d'où viennent tes variables, et où elles vont.
Par contre, oui pour un nom indiquant leur fonction ($cout_article, pq pas), mais aussi leur type attendu, ce qui facilite la lecture d'un code : $sFileName, $iCompteur, $aArticles, (nom de fichier de type string, compteur de type entier, tableau d'articles...).
Que tu préfixes, suffixes, ou "camelcasises" n'a pas d'importance. Il faut juste avoir une norme explicite, et s'y tenir.

Commentaire de malalam le 25/02/2007 10:39:33 administrateur CS

Par contre, ça :
"- Les champs ; là il y a du boulot.
A peu de chose près toujours avoir dans une table :
- un champ ID, clef primaire unique en auto-incrément.
- un champ LIB, qui fini toujours par avoir son utilité (liste, BO, etc.)"

c'est très discutable comme remarque...on ne construit pas une base de données en se disant : "de tte manière, je mets une clef primaire en auto incrément et un champ libellé! Après, on ajoute ce dont on a besoin". C'est le meilleur moyen de monter une très mauvaise structure. Une table de jointure, par exemple, avec ces champs, serait une mauvaise idée.

Commentaire de FhX le 25/02/2007 18:58:44

Moi je pense qu'il n'y a pas forcément besoin de mettre un préfixe sur les noms de variables.
Quand on sait à quoi correspond une variable, on peut allégrement s'en passer.

La méthode la plus simple est le transtypage. Si je fais une classe dans ce style :

class truc {
public $x;
public $y;

public function __construct($x, $y) {
  $this->x = (int) $x;
  $this->y = (int) $y;
}

}

Tu peux être sur et certain que $x et $y sont des entiers. Et qu'à partir du moment ou tu veux faire de la modif, il suffit de t'en assurer en transtypant automatiquement.

Après, si vous voulez vraiment être sur (et que vous faites de la POO), y'a la solution bien grasse et horrible (:p) :

class iVar {
private $content;

public function __construct($var) {
  $this->content = (int) $var;
}

public function Get() {
  return $this->content;
}

public function Set($val) {
  $this->content = (int) $val;
}

}

$ma_variable_entiere = new iVar('10'); // Va me convertir automatiquement ma variable...

Et t'es sur que c'est une variable entière comme ca :)
Pareil pour les chaines, etc...

Et ensuite, lors d'une réutilisation dans une autre classe :

// ....
public function une_methode( iVar $var ) {
  $this->truc = $var;
}

// $var étant un objet instancié depuis iVar, on est sur que le contenu de l'instance $var est de type INTEGER. Donc plus de soucis :)


Bref, un exemple parmi tant d'autres :)

Commentaire de malalam le 28/02/2007 08:33:10 administrateur CS

FhX => je parlais de lecture de code, là. Si quand tu lis une portion de code, tu dois remonter à l'initialisation d'une variable pour trouver son type, et donc comprendre son utilité et son utilisation dans la portion que tu étudiais...c'est dommage.
Moi je préfixe toujours en effet :
public $iX;
public $iY;
Ca n'a aucun rapport avec le transtypage : évidemment que si je nomme une variable $iX, dans mon code je vais m'assurer que ce soit bien un entier.
Mais cette norme me permet d'être sûr que $iX EST une entier, et pas une chaîne. Parce que je l'indique dans son nom, pas la peine donc de remonter à l'initialisation quand je lis mon code.

On ne parle pas de code à proprement dit, mais juste de façon d'écrire un code pour qu'il soit lisible et compréhensible.

J'ai imposé une telle norme à mon équipe, qui commence à grossir; simplement parce que sinon, chaque dév avait du mal à lire le code d'un autre dév. Avec une norme, on parle le même langage, et on ne passe pas 2h à décrypter un code pour le faire évoluer, le modifier, ou l'utiliser.

Commentaire de Eregon le 14/01/2008 18:08:16

Bonne idée, mais je pense qu'on pourrait en dire un peu plus à ce sujet :)

Perso, je n'ai aucune envie de faire des variables à la aVar, mais je comprend ce point de vue.

J'essaie de travailler dans des fonctions pas trop grosses où l'on sait ce qu'est la variable juste à son nom. $fields est forcément un array des champs de la bdd, etc

Sinon, je me suis demandé quel nom à donner pour les variables des paramètres des fonctions dans le cas où cette variable est déjà utilisée dans la fonction.

exemple:
Dans une classe de gestion sql,
j'ai une méthode qui trace automatiquement un tableau en html.

public function draw_table($table, $caption = false, $thead = false, $tfoot = false, $order_by = '', $p_fields = '*')
{
...
$fields = $this->get_fields_name;

mysql_query("SELECT $p_fields"...)
...
}

ici, $fields est un array des noms des champs, et p_fields un string des champs séparés par virgule.

Sinon, il y a toujours le moyen de nommer l'array $fields_name, mais je n'aime pas trop...

Bonne continuation pour le tuto

Commentaire de demicerveau le 25/01/2008 00:16:39

pourquoi ne pas Utiliser la notation hongroise ?
C'est le modele le plus répandu quand on travaille en équipe scindée en plusieurs groupes
Voir : http://www.cppfrance.com/infomsg_NOMENCLATURE-CONVENTIONS-CODES_792803.aspx ou bien http://fr.wikipedia.org/wiki/Notation_hongroise

Je ne l'utilise pas souvent mais il est vrai que ça aide (notamment quand j'écris en C ou CPP).
Par contre, comme je déteste cette notation, j'utilise en php l'underscore pour donner des nom de varialbes du style $couleur_de_fond ou encore $utilisateur_actuel ou bien encore $nombre_de_ligne ce qui me permet (avec l'auto-complétion de code) de savoir vite ce à quoi j'ai affaire en relecture de code (meme des mois après).

En vous souhaitant une bonne programmation.

Demi Cerveau

Commentaire de fadelghani le 16/04/2008 17:59:18

Je demande si Malalam  peut nous envoyer un doc ou on trouve les normes q respecter puisqu'il est chargé de corriger .
J aimerai qu'il fait cela merci d avance.

Commentaire de malalam le 16/04/2008 18:42:31 administrateur CS

@fadelghani => le problème c'est qu'il n'en existe pas vraiment. A chacun de voir selon ses préférences, en gardant une constance évidemment,  et en faisant en sorte que le nommage donne autant d'informations que possible.

Commentaire de HACKANDROID le 30/08/2011 23:55:29

Bon tuto!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales