IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Convention de nommage [Fait]


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Convention de nommage
    Bonjour,

    Je désirerais obtenir un tutorial ou des infos ou un conseil concernant "comment nommer ces champs" ?

    ex:
    table : ARTICLE
    art_id
    art_descr

    Merci
    Ites

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    T'as pas du chercher énormément

    je pense que ceci devrait t'aider ^^ : http://sql.developpez.com/normes/
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je pense plutôt que ites parlait de la façon de nommer le champ code_article ou code_article, etc....

    Voici les règles que je m'impose et qui facilite grandement mes requêtes :

    Nom des tables :
    • toujours en minuscule
    • toujours au singulier
    • toujours au masculin
    • jamais d'accents
    • si c'est une table de jointure (exemple les articles de la commande) table dans l'ordre alphabétique : article_commande
    • jamais d'abreviations
    Nom des colonnes :
    • clef primaire : id_ + nom de la table
    • libellé : lib_ + nom de la table
    • date de creation de l'enregistrement : cre_ + nom de la table
    • date de modification : mod_ + nom de la table
    • description : des + nom de la table
    Nom des index : ndx_ + nom table + nom_des_colonnes (abregé ssi > 64 caractères)

    Voilà, je ne pense qu'il existe pleins de nomenclatures tout-à-fait valables. A mon sens une bonne règle est une règle simple qui gère un maximum de cas.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci pour ton tuto mais ce n'est pas vraiment cela que je veux

    En faites je désirerais:

    ex:
    soit
    table PERSONNE (pers_id,pers_nom,pers_prenom,...)
    ou soit comme ceci
    table PERSONNE (id,nom,prenom,...)

    Comment est il préférable de les nommer car dans tous les autres tuto on voit des exemples comme ceux-ci

    Ites

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    C'est ce que je cherchais, merci pour tes conseils Alexandre T.

    et merci à vous deux

    Ites

  6. #6
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par Alexandre T
    Nom des colonnes :
    • clef primaire : id_ + nom de la table
    • libellé : lib_ + nom de la table
    • date de creation de l'enregistrement : cre_ + nom de la table
    • date de modification : mod_ + nom de la table
    • description : des + nom de la table
    Bonjour Alexandre,

    Pourrais-tu expliquer brièvement tes choix de convention de nommage stp ? Ce qui m'intéresse surtout c'est la raison de l'ajout de "nom de la table" à chaque colonne. Un grand nombre de personnes nomme leur colonne de la même façon. Mais je n'ai jamais réussi à comprendre quel était l'avantage de suffixer chaque champ puisque les SGBD permettent de préfixer par le nom de la table et du schéma.

    Une table, un schéma ou une base sont en quelques sortes des "espaces de noms".

    Le seul avantage que je vois est que cette convention permet souvent des jointures naturelles, et donc une syntaxe SQL plus légère.

    De mon côté, je trouve qu'avoir des noms de colonnes identiques (id, libelle) pour la plupart des tables facilite grandement les traitements automatisés tels que la génération de formulaires.

  7. #7
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je fais cela pour
    • la modélisation des données
    • pour éviter les confusions lors de la réalisation de requêtes
    • pour les outils de reporting qui assiste l'utilise et proposent eux même les jointures
    Admettons que j'ai une entité ecole et une entité classe. Chaque classe appartient à une école.
    Avec ma méthode :
    • ecole : id_ecole,lib_ecole
    • class : id_classe,lib_classe,id_ecole
    Avec une méthode proposant les mêmes noms :
    • ecole : id,lib
    • class : id,id_ecole,lib
    Si pour mon modèle je décide de modifier la colonne id_ecole pour la passer de entier à entier strinctement positif. J'ouvre mon dictionnaire de données dans mon outil, je change le champ id_ecole.

    Avec l'autre méthode, l'outil peut provoquer des effets de bord et changer tous les champs id !

    Autre point la liste des classes par écoles , cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT c.id_classe, c.lib_classe, e.id_ecole, e.lib_ecole 
    FROM classe c
    INNER JOIN ecole e ON e.id_ecole = c.id_ecole
    Avec l'autre méthode cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT c.id,c.lib,e.id,e.lib
    FROM classe c
    INNER JOIN ecole e ON e.id = c.id_ecole
    Le nom des champs dans la première requêtes expliquent clairement ce qu'ils représentent !
    Dans la seconde requête j'ai deux id et deux lib.... Pas facile de discerner ceux de l'école de ceux de la classe, sauf si on passe par des alias...

    Troisième point si on utilise un outil de reporting comme chrystal report ou infomaker.
    Dans mon cas, je sélectionne les 4 colonnes des deux tables et Infomaker fait la jointure automatiquement. La requête SQL sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT classe.id_classe, 
           classe.lib_classe, 
           ecole.id_ecole, 
           ecole.lib_ecole 
    FROM classe 
    INNER JOIN ecole  ON ecole.id_ecole = classe.id_ecole
    Avec la "mauvaise" méthode, j'aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT classe.id, 
           classe.lib, 
           ecole.id, 
           ecole.lib 
     FROM classe 
     INNER JOIN ecole  ON ecole.id = classe.id
    Voilà pourquoi
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  8. #8
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Ok merci pour la réponse.

    En effet, le suffixe est justifié pour l'utilisation d'outils de modélisation et de reporting. Pour la lisibilité, je ne suis pas convaincu, mais cela reste une affaire de goût

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Lisez l'article que j'ai écrit sur le sujet :
    http://sqlpro.developpez.com/cours/standards/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    Je me permets de déterrer ce topic car je suis confronté à ce qui est pour moi un problème de nommage concernant les tables et les champs d'une base de données d'un projet sur lequel je travaille.

    La convention utilisée est celle de Alexandre T : chaque champ reprend le nom de la table et pour les tables d'associations on a la liste des tables concernées dans le nom de la table.

    Pour ma part, en pratique, c'est une horreur !

    On a des tables d'association qui lient jusqu'à 5 tables. On se retrouve avec des nom de table à rallonge qui ne veulent finalement rien dire et qui pourraient se résumer en un seul mot. Et on a par dessus le marché des noms de champs interminables : jusqu'à 60 caractères.

    Ajouté à celà, nos classes (PHP) qui traitent ces tables reprennent comme nom de méthodes d'accès aux attributs les même noms.

    Je pense, et c'est ce que j'ai toujours fait sans problème, qu'il faut trouver un nom de table le plus simple possible et idem pour les noms d'attributs. Les arguments avancés par Alexandre T ne me semblent pas valables, puisque dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT c.id,c.lib,e.id,e.lib
    FROM classe c
    INNER JOIN ecole e ON e.id = c.id_ecole
    On peut très bien s'en sortir ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT c.id AS id_classe, c.lib AS lib_classe, e.id AS id_ecole, e.lib AS lib_ecole
    FROM classe c
    INNER JOIN ecole e ON e.id = c.id
    Toutefois je pense que pour les id, il faut reprendre le nom de la table, c'est un cas particulier.

    Le pire, bien entendu, c'est que la personne qui a créé la base n'est pas celle qui l'utilise

    Pour les outils de reporting, je ne peux pas me prononcer puisque je n'en utilise pas.
    Etre à son compte, y'a rien de mieux !

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La méthode de SQLPro est bonne.
    J'ai cependant pris une autre habitude avant de la découvrir alors je la propose aussi...

    En partant d'une association de MCD :
    Utilisateurs -0,n----Participer----0,n- Projets

    Je transforme les entités en tables :
    - Utilisateurs
    - Projets
    On remarque que le nom d'une table est au pluriel car elle contient plusieurs lignes. Même si on peu lire l'association : "Un utilisateur peut ou pas participer à plusieurs projets", Il y a bel et bien plusieurs utilisateurs dans la table. L'entité pour moi ne représente pas un seul utilisateur mais l'ensemble de tous les utilisateurs.

    Je transforme l'association en table :
    - soit en la nommant 'Participer' (verbe à l'infinitif) ;
    - soit en la nommant 'UtiPrj' (abréviation mnémotechnique composée de lettres des tables entrant dans l'association) ;
    - et depuis quelques temps j'aurais tendance à faire un mix des deux en la nommant 'U_P_Participer' (initiales des tables de l'association et verbe de l'association)

    Passons aux colonnes des tables :
    Je préfixe le nom de colonne de l'abréviation de la table choisie plus haut :
    Utilisateurs(UtiId, UtiNom, UtiPrenom,...)
    Projets(PrjId, PrjNom, PrjDateCreation, ...)
    UtiPrj(UPUtilisateur, UPProjet, UPDateDebut, UPDateFin...)

    Contrairement à SQLPRO, je préfère utiliser les minuscules mais je mets une capitale à chaque début de mot.
    Ceci parce que je trouve qu'on voit mieux les noms des objets au milieu des requêtes avec les mots du langage en capitales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.UtiNom AS Nom, u.UtiPrenom AS Prenom, p.PrjNom AS Projet
    FROM UtiPrj up
    INNER JOIN Utilisateurs u ON up.UPUtilisateur = u.UtiId
    INNER JOIN Projets p ON up.UPProjet = p.PrjId
    ORDER BY u.UtiNom, u.UtiPrenom
    Certes, ici avec la coloration syntaxique on voit tout de suite la différence mais quand la requête est incluse dans une variable d'un programme PHP par exemple il n'y a plus qu'une couleur.

    Je pense que je vais adopter progressivement la norme de SQLPro mais avec mon système 'CapitaleMinuscules'.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    L'utilisation d'un trigramme unique permet aussi de synthétiser l'écriture des colonnes des tables.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convention de nommage VB.Net
    Par e-ric dans le forum VB.NET
    Réponses: 3
    Dernier message: 27/02/2007, 18h00
  2. [PL/SQL] Convention de nommage
    Par dcollart dans le forum Oracle
    Réponses: 1
    Dernier message: 10/07/2006, 16h50
  3. Convention de nommage J2EE ? Ou ?
    Par n!co dans le forum Java EE
    Réponses: 11
    Dernier message: 19/01/2006, 09h22
  4. Petite question sur les conventions de nommage en Java
    Par implosion dans le forum Langage
    Réponses: 7
    Dernier message: 18/01/2006, 15h54
  5. Convention de nommage dans le code
    Par firejocker dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2005, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo