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

MS SQL Server Discussion :

Conseil nommage colonnes


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut Conseil nommage colonnes
    Bonjour,

    Je m'intéresse de près aux conventions de nommage des tables sql.
    Pourriez-vous me dire quelle est la différence entre une table fonctionnelle et une table de référence?
    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut Conseil nommage colonnes
    Re-bonjour,

    J'ai 3 tables.
    1/ Table qui contient des profils (T_PROFILES) avec comme champs PRO_ID et PRO_LAB
    2/ Table qui contient des droits (T_RIGHTS) avec comme champs RIG_ID et RIG_LAB
    3/ Ma table de jointure (TJ_RIGHTS_PROFILES) qui évidemment attribue des droits à un profil

    Ma question concerne donc le nommage des colonnes de cette table de jointure. J'ai lu des trucs un peu partout mais j’hésite et j'aimerais votre avis.
    La solution envisagée consisterait à utiliser les mêmes noms de colonne dans la table de jointure que dans la table de données. Ex : PRO_ID et RIG_ID
    Ce qui m'embête là-dedans c'est que du coup je perds l'info de la table qui contient ce champ et je me retrouve avec 2 colonnes dans 2 tables différentes avec le même nom.
    Est-ce un soucis ? Au cas où je précise que c'est pour manipuler en C#.

    Merci

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Il existe une norme AFNOR en informatique précisant comment doit être identifier une information dans le SI. (je ne me rapalle hélas plus de la référence !). Elle dit ceci :
    "dans le SI une même information doit être identifié de manière unique"
    Ceci veut donc dire que toutes les colonnes dans une même base doivent avoir des noms différents tant qu'elle représente des informations différentes.
    Et le corolaire est que "si c'est la même information, ce doit être le même nom".
    Or comme une clef étrangère contient la même information que la clef primaire ou unique auquel elle fait référence, alors ce nom doit être le même.

    La norme ISO SQL, renforce d'ailleurs cette idée avec la jointure naturelle (pour moi elle ne devrait JAMAIS être utilisée... amis bon). Par exemple dans votre cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM   TJ_RIGHTS_PROFILES
              NATURAL JOIN T_PROFILES
              NATURAL JOIN T_RIGHTS
    Est une requête parfaitement valable sur tous les SGBDR acceptant la jointure naturelle !

    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/ * * * * *

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup pour cette info claire et précise.
    Effectivement je n'utilise jamais la jointure naturelle, je n'aime pas.

    Je profite d'avoir affaire à un pro pour une autre question si je peux me permettre.
    En plus du profil, je vais avoir d'autres tables de référence comme par exemple une table TR_SITES.

    Actuellement, j'ai donc une table USERS (je ne sais pas comment définir le type, fonctionnelle, de référence ou de jointure) qui contient par exemple les champs suivants :
    USE_ID, USE_NAME et donc les champs qui proviennent des tables de référence comme par exemple PRO_ID et SIT_ID.

    Est-ce la bonne pratique ou alors dois-je créer une table avec juste les champs USE_ID et USE_NAME et une autre de jointure qui reprendrait USE_ID et donc les autres PRO_ID et SIT_ID ?

    J'espère que c'est clair :-)

    Merci de votre patience.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Tout cela doit être abordé au niveau du MCD, pas du MPD. C'est dans le MPD que vous définissez la sémantique des liens d'association et de cette sémantique va découler les cardinalités qui vont imposer telle ou telle forme physique de vos tables pour assurer l'articulation des tables entre-elles qui vont se traduire en SQL par des jointures.

    Pour en revenir à votre post initial, Si vous aviez utiliser un outils de conception de BD permettant de faire un MCD et de passer au MPD, les noms auraient été conformes à ce que nous avons discuté.

    Autrement dit et pour en revenir à votre 2e problème vous n'avez pas le choix ! Mais les informations que vous nous avez données sont incomplètes pour trancher !

    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/ * * * * *

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Ah mais rien n'est fait encore :-), je me renseigne justement.
    Je peux donc faire une table avec juste les USERS et une table de jonction pour leur attribuer un profil et un site ou faire en une seule table, sachant que chaque utilisateur est unique et qu'il ne peut avoir qu'un seul profil et un seul site.
    Pour ma part et pour une question de facilité, je n'en ferais qu'une mais je ne sais pas si c'est "good practice".
    Merci

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Personnellement, je ne suis absolument pas fan de la notation hongroise, que vous semblez avoir choisi pour déterminer les noms des tables.

    Que la table soit une table "fonctionnelle", de "jointure" ou de "je ne sais quoi", à la limite, OSEF, d'autant plus pour la différentiation de nommage entre vues et tables.
    Ceci dans une optique de simplification de la compréhension du code, mais aussi de sa maintenabilité.

    Par exemple, on peut imaginer une table "tiers". Qui va contenir des client et des fournisseurs.
    On peut parfaitement imaginer alors une vue "client" et une vue "fournisseur" basées sur la table "tiers" ne sélectionnant que le sous-ensemble désiré.
    => A ce moment, quelle est l'utilité, dans le code, de savoir s'il s'agit d'une vue ou d'une table ? N'importe quel SGBD sait faire des mises à jour sur les vues donc d'un point de vue sémantique, la couche de haut niveau n'a que faire de savoir si c'est une vue ou une table. Préfixer le nom de l'objet par son type est donc source de confusion, complexité et d'erreur : que se passe-t-il si demain j'ai une table "t_client" et une vue "v_client" ? Je prends laquelle ? Qui contient quoi ? WTF ?
    Mais aussi ne pas oublier que demain, un DBA peut se pointer et crier à l'hérésie, et demander à remplacer les vue "client" et "fournisseur" par deux tables physiques, et abandonner la table initiale "tiers". A ce moment, si c'est préfixé dans tous les sens, vous n'avez plus qu'à passer en revue l'intégralité du code. Sans préfixes, vous n'avez qu'à vérifier que le code ne référence plus la table "tiers". Pas vraiment la même charge de boulot !

    Sinon, les trigrammes, pas fan non plus.

    "USE_ID", pour moi, c'est le verbe "to use", utiliser, et non "USER". Sémantiquement, je ne comprends plus rien au code.

    Si vous voulez faire des abbréviations, choisissez plutôt (je ne sais plus comment ça s'appelle) qui consite à supprimer toutes les voyelle du mot (sauf si elle est en première position).

    Ainsi, USER devient USR, ce que n'importe qui comprends. Et "LAB", pour vous "LABEL", chez moi "LABORATORY". Une fois de plus "LBL" est sans appel, on comprends ce que ça veut dire, si vous n'avez pas le courrage d'utiliser "LABEL" en entier.

    Sinon, en règle générale, je privilégie des noms courts pour les tables, et je l'utilise comme préfixe à l'ensemble des colonnes de la table (sauf pour les clés étrangères).
    Et dans les vues, pareil : renommage des colonnes avec pour préfixe le nom de la vue (cf. mon exemple avec TIERS qui devient CLIENT et FOURNISSEUR : si on n'a pas renommé les colonnes dans la vue, alors ne respecte plus la norme AFNOR citée par SQLpro).
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Bonjour,

    Personnellement, je ne suis absolument pas fan de la notation hongroise, que vous semblez avoir choisi pour déterminer les noms des tables.
    Je n'ai pas le temps de dire tout, mais vous vous trompez lourdement l'intérêt est GIGANTESQUE !!!
    je l'ai démontré à joe celko dans un congrès un jour par a + b l'inaptitude de cette façon de nommer à l'aveugle sans savoir quoi est quoi par le simple nom !!!

    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/ * * * * *

Discussions similaires

  1. Nommage d'une colonne avec la date du jour
    Par Mr_I123 dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/04/2009, 10h02
  2. faire des "colonnes" demande de conseils
    Par jalex-jalex dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 30/09/2008, 21h30
  3. Nombre de colonnes conseillé dans une table.
    Par S-Kayp dans le forum Débuter
    Réponses: 15
    Dernier message: 13/05/2008, 17h58
  4. Nombre maximum de colonne conseiller par table
    Par Analfabete dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/01/2007, 15h18
  5. Demande de conseil pour migration de lignes vers colonnes
    Par ririd dans le forum Administration
    Réponses: 6
    Dernier message: 04/11/2004, 17h02

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