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

Administration SQL Server Discussion :

Question de conception sur les ID


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut Question de conception sur les ID
    Bonjour tout le monde.

    On m’a demandé de réécrire un logiciel sur base d’un vieux truc qui a été développé en Access et je me pose une question de conception pour la DB car j’ai moins d’expérience dans ce domaine.

    Dans le vieux logiciel, une commande porte un numéro L + 1 lettre selon le type de commande + 5 chiffres. Cela donne un numéro de commande unique.
    De même un client est identifié par un numéro unique qui commence par 7 et qui est suivi de 6 chiffres.

    Pour moi, ces informations peuvent servir d’ID et devenir une PK.

    Néanmoins l’ancien concepteur a créé dans chacune des tables une colonne d’ID auto incrémenté et en a fait la PK et il fait ses relations sur base de cet ID.
    De mon point de vue, ce qu'il fait est inutile vu que les 2 autres informations existent mais j’en ai parlé avec un ami et il n’est pas d’accord avec moi. Pour lui, je le cite : « ne jamais utiliser un ID externe a la db pour identifier un reccord, de plus pour mettre tes indexs c'est mieux sur des id gérés par la DB, j'aurais fait pareil sans hésiter ».

    Donc voilà, j’aurais souhaité avoir l’avis d’autres personnes sur le sujet.

    Une chose que je vois quand même qui pourrait justifier le fait de créer l’ID en plus. Ça serait pour optimiser la taille de la base. En effet, au vu de ce que j’ai comme identifiant de colonne, j’aurais :
    • une colonne char(7) pour les commandes stockée sur 7 bytes si je ne me trompe pas
    • une colonne int pour les clients stockée sur 4 bytes si je ne me trompe pas

    Alors qu’avec un id auto incrémenté, je pourrais stocker ça dans des small int, stockés sur 2 bytes.
    Ça permettrait de gagner un peu de place mais je pense que l’on est pas en train de parler de gagner des Go mais plutôt quelques Mo au vu de la masse de données (4000 commandes et 2500 clients en 20 ans).

    Merci pour vos avis 😊

    Philippe

  2. #2
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 553
    Par défaut
    Avec un id auto-incrémenté sur un entier, c'est aussi la taille des indexes qui est affecté positivement et les donc les performances des requêtes aussi.
    Autre point, s'il y a une erreur dans le numéro de client ou de facture et que c'est la PK, bonne chance pour corriger ça !
    C'est toujours une bonne idée d'utiliser une id non reliée à la business.

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut
    Merci pour ta réponse :-)
    Je vais donc garder cette idée d'id auto incrémenté.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Il y a de nombreux arguments en faveur d'un identifiant technique attribué par le SGBD :

    • les identifiants uniques candidats composés de combinaisons de lettres et de chiffres (L + 1 lettre selon le type de commande + 5 chiffres...) sont plus encombrants qu'une colonne de type integer à nombre de combinaisons égales.
      Sans compter qu'embarquer une constante "L" dans une PK c'est cramer un octet inutilement. Ca semble peu de choses, mais ça peut faire la différence quand on sait que les PK se propagent dans la plupart des index.
    • plus encore, ces identifiants candidats utilisent des lettres ayant un sens fonctionnel (type de commande...). Ce faisant, si le rôle fonctionnel change (par exemple le type de commande, le type de client...), alors la valeur change. Ce qui pour une PK est catastrophique, car la valeur d'une PK se propage via l'intégrité dans toutes les FK. Une mise à jour de PK peut provoquer un très grand nombre de mises à jour, voire mettre par terre la BDD !
    • les caractères, qu'ils soient fixes ou variables, sont sensibles à la collation. Ce faisant, la même valeur dans deux colonnes de collations différentes auront des comportements différents.

    Une PK doit être "not null" et unique, mais une bonne PK doit aussi être stable et concise, les colonnes sémantiques sont très rarement stables et rarement concises.
    C'est pourquoi on leur préfère le plus souvent une colonne technique, de type integer car plus performant que le char et plus concis.

    Note : parler d'auto incrément est réducteur, de nombreux SGBD proposent la possibilité d'incrémenter ou de décrémenter au choix du DBA.

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 10
    Par défaut
    Merci pour ton complément d'information

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

Discussions similaires

  1. Question toute bête sur les formulaires
    Par pekka77 dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2005, 23h45
  2. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20
  3. [c#] une question de noob... sur les textbox
    Par warenbe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/08/2005, 23h13
  4. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  5. [LG]J'ai honte : question de cours sur les paramètres
    Par letibdesneiges dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2004, 13h57

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