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

Décisions SGBD Discussion :

[SGBDR]Clés primaires?


Sujet :

Décisions SGBD

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 47
    Points
    47
    Par défaut [SGBDR]Clés primaires?
    Bonjour,

    Je suis entrain de réfléchir sur un système d'identification pour mes tables. En fait, j'ai recensé trois façon:
    1. Utiliser l'incrémentation automtique. Pb: il faut gérer la non redendance des données. (Compliqué)
    2. Utiliser les clés relatives. Pb: la clé primaire sera composé d'autant de champs qu'il y'a de tables. (Complexe)
    3. Générer les clés manuellement: la clé d'une table sera une chaîne de caractère composée de toutes les clées des autres tables reliées à cette table. Donc mes clés primaires vont être des chaîne de caractères très longue (entre 8 à 255 caractères ou même plus ) et je me demande s'il y'a des contraintes avec cette méthode: temps nécessaire pour trouver un enregistrement dans mes tables,... (ça pourra être une bonne technique à mon avi, mais je ne sais pas s'il ya des inconvénients).

    Merci pour votre aide.

  2. #2
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    Pour des clefs primaires, en général le mieux c'est un entier (auto-)incrémenté par le SGBD ou par toi. Pense aux futurs problèmes de maintenance. En quoi la non-redondance serait un problème ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 47
    Points
    47
    Par défaut
    En quoi la non-redondance serait un problème ?
    Avec les clés primaires automatiques, avant d'insérer un nouveau enregistrement, t'es oubligé de parcourir ta table afin de vérifier qu'il n'existe pas déja dans ta table. Le temps nécessaire à la recherche sera relatif à la taille de la table. Tandis qu'avec des clés primaire codifiées cela te permettera de savoir juste à partir de la clé le contenu de ton enregistrement et donc la recherche sera plus rapide.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    absolument pas, au pire, si la notion de séquence n'éxiste pas dans le SGBDR, tu peux faire une table qui contient la dernière valeur de chacune de tes PK

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 47
    Points
    47
    Par défaut
    Avec les clés primaires automatiques, avant d'insérer un nouveau enregistrement, t'es oubligé de parcourir ta table afin de vérifier qu'il n'existe pas déja dans ta table. Le temps nécessaire à la recherche sera relatif à la taille de la table. Tandis qu'avec des clés primaire codifiées cela te permettera de savoir juste à partir de la clé le contenu de ton enregistrement et donc la recherche sera plus rapide.
    En fait, je ne parlais pas de la clé primaire mais des données référencées par cette clé. Mon idée est que la clé de chaque enregistrement permettera de connaitre le contenu de l'enregistrement. Par exemple:
    Supposons que les champs de ma table sont :
    ----------------------------------------------------
    ID_PERSONNE | NOM | PRENOM | FONCTION
    ---------------------------------------------------

    1er cas: clé automatique j'aurais comme données par exepmle
    ----------------------------------------------------
    ID_PERSONNE | NOM | PRENOM | FONCTION
    ---------------------------------------------------
    1001 nom1 prenom1 fonction1
    1002 nom2 prenom2 fonction2

    Supposons que je veux insérer encore une fois le uplet (nom1,prenom1,fonction1):
    - Sans gérer la redondance des données j'aurais dans ma tables cela:
    ----------------------------------------------------
    ID_PERSONNE | NOM | PRENOM | FONCTION
    ---------------------------------------------------
    1001 nom1 prenom1 fonction1
    1002 nom2 prenom2 fonction2
    1003 nom1 prenom1 fonction1

    -Avec gestion de la redandance je suis oubligé de parcourir ma table pour vérifier que le uplet que je veux insérer n'existe pas déjà. Dans le cas d'une table de très grande taille cela prendera un temps donné.

    2eme cas: clé codé j'aurais comme données par exepmle
    ----------------------------------------------------
    ID_PERSONNE | NOM | PRENOM | FONCTION
    ---------------------------------------------------
    n1_p1_f1 nom1 prenom1 fonction1
    n2_p2_f2 nom2 prenom2 fonction2

    Dans ce cas pour insérer un nouveau uplet et notamment (nom1,prenom1,fonction1), On construit en premier la clé primaire et on l'insére dans la table en premier avant les autre données. La sera 'n1_p1_f1' et au moment de l'insérer dans la table le système dira que c'est impossible, puisque cette clé primaire existe dèjà. Donc la gestion de la redondance des données est faite au niveau de la clé primaire.

    J'espère que c'est clair pour vous et merci pour votre aide.




    [/quote]

  6. #6
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    Ok perso je te conseille de poser des index plutôt que de bidouiller.

  7. #7
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    Si tu tiens à ton système, ne le fais pas pour la clef primaire. Rajoute une colonne avec un index UNIQUE qui ne te sers qu'à ça. Sa mise à jour pourrait se faire par triggers. Comme ça ça restera propre ET tu pourras changer facilement de façon d'optimiser si ça ne fonctionne pas comme prévu.

  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 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 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    A lire sur le sujet :
    http://sqlpro.developpez.com/cours/clefs/

    La meilleure clef est : monocolonne, entier de longueur mot processeur, auto incrémentée, monotone, continue, indexation en cluster.

    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. choix des clés primaires
    Par dcollart dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 17/08/2005, 17h25
  2. Requête sur table à double clés primaires
    Par darkian dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/03/2005, 17h28
  3. [C#] Probleme sur les clés primaires composites
    Par stardeus dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2005, 23h28
  4. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 08h29
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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