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] Gestion des clefs


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] Gestion des clefs
    Bonjour les amis,

    Je voulais savoir le mécanisme de gestion interne (par le SGBD) des clefs des tables.
    En fait ce qui me gêne c'est cette histoire qu'une clef est utilisée une fois et ne peut pas être réutilisée après. Donc ma question est la suivante:
    Si la taille de la variable contenant la clef est de 1octet, alors que se passe-t-il lorsque on arrive à la dernière valeur possible sur 1octet. Le système reprend-t-il les nombres non utilisés ou il ne peut plus générer de clef et donc ce cas il renvoit une erreur de dépassement?

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    Avec, une clé d'1 octet, tu peux gérer au plus 255 occurrences, 1 point c'est tout.

    Il faut garder présent à l'esprit qu'une clé sert avant toute chose de discriminant: elle permet de différentier 2 occurrences, même si ces occurrences sont très proches.

    L'exemple type sont des jumeaux: mêmes nom de famille, date de naissance, etc...
    => pour la famille, c'est le prénom qui sert de clé
    => pour les autorités, c'est le n° de S.S (il contient le rang de naissance)

    Pour en revenir au SGBD, il est clair que 2 enreg ne peuvent avoir la même clé:
    1/ d'abord parcequ'il serait incapable de restituer 1 enreg à partir de cette clé (en fait, il peut, mais ce sera tjs le même enreg: au 1er trouvé, il arrête de bosser)
    2/ ensuite parceque peut se poser le pb des clés étrangères : nos jumeaux vont avoir des enfants, et pour indiquer la filiation on peut vouloir utiliser le n° S.S du parent: si on demande "quels sont les enfants d'un des jumeaux, on récupère tous les enfants des 2 jumeaux !
    3/ d'autres soucis en cascade : UPDATE/DELETE => comment indiquer le décès d'un des jumeaux ?
    4/ déclarer 1 clé, ça donne implicitement 1 index sur la colonne "clé"=> le classement des valeurs est maintenu dans l'ordre (croissant ou décroissant) par le SGBD: si on dispose de 2 clés de valeur=1, laquelle est supérieure à l'autre ? si (comme) tu ne peux répondre à cette question, pourquoi le SGBD pourrait-il le faire ?

    J'espère avoir répondu à tes interrogations.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  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
    Je te remerci d'avoir pris le temps de réponde à ma question.
    Pour plaisanter: puisque ta réponse n'est pas la bonne alors je considère que ma question est mauvaise. .
    En fait, je comprend bien le principe de clef (unicité). Comme tu me la fait remarquer avec 1 octet tu peux avoir 255 clef seulement, mais c'était juste pour l'exemple. Bon je reformule ma question:
    suppons que la la dernière clef attribuée par le SGBD est 255, alors quelle clef attribuera-t-il à un nouveau enregistrement? Est-ce qu'il reprend les clefs qui ont été supprimé (entre 1 et 255) et donc qui ne sont pas utilisés ou bien il ne peut plus attribuer de clef?

    Merci.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    Tu sembles évoquer l'auto-attribution par le SGBD d'un numéro faisant office de clé ? (avec auto-incrément ?)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  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
    1) après 255 il générera une erreur et plus d'insertion
    2) on utilise en général une clef basée sur l'entier de taille du mot processeur, soit 32 octets et cela pour des raions de performances (donc 4 milliards 300 millions de clefs possibles)
    3) en 32 bits, à raison d'une insertion par seconde sans jamais s'interrompre, il te faudra 136 ans pour générer cette erreur.
    Dans le cas improbable ou tu arrive à la fin de tes clefs, tu peut combiner une deuxième colonne. Dans ce cas, tu disposera de quelques 600 millirads d'années avant d'épuiser toutes mes combinaisons...

    Enfin, principe de base UNE CLEF CONSOMMÉ NE DOIT JAMAIS ÊTRE RÉATTRIBUÉ...

    Que se passe t-il si tu doit remonter une sauvegarde partielle ?

    A lire :
    http://sqlpro.developpez.com/ClefsAu...ClefsAuto.html

    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
    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
    Merci a tous.

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    une erreur est produite si on laisse le soin au SGBDR de choisir lui même la clé. Par contre si dans notre INSERT on précise comme clé la valeur
    d'une qui a été supprimée, alors l'INSERT se produit correctement au
    risque de perdre l'intégrité des données.

    Bonne journée.

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Petite précision. Dans le cas où on précise la valeur de la clé dans
    l'INSERT, le SGBDR attribuera la valeur maximale possible à la clé
    si la valeur saisie est plus grande que la valeur maximale permise.
    La valeur maximale possible ne sera attribuée que si elle n'est pas
    déjà utilisée.

    exemple d'une clé codée sur un SMALLINT(1) :

    Si dans notre INSERT, on précise la valeur 100 000 pour la clé alors
    le SGDR attribuera la valeur maximale 32 767 (si elle n'est pas déjà
    utilisée).

    Face à ce phénomène, il est important de s'assurer que les clés des
    tables liées par une relation (clés primaires et étrangères) soient du
    même type.

    Pour revenir à notre exemple.....

    Supposons que notre transaction doit insérer un enregistrement dans
    une table dont la clé primaire est codée sur un SMALLINT(1) puis insérer
    une enregistrement dans une autre table dont la clé étrangère est codée
    sur un INTEGER (ces deux tables étant liées par une relation).

    L'insertion de la valeur 100 000 pour la clé primaire donnera 32 767.
    L'insertion de la valeur 100 000 pour la clé étrangère donnera 100 000.

    Résultat : clés primaire et étrangère différentes => problème d'intégrité
    des données.

    Bonne journée.

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

Discussions similaires

  1. [phpMyAdmin] gestion des clefs (clés) étrangères
    Par ledisciple dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 29/03/2011, 17h23
  2. Gestion des doublons sur une clef inversée
    Par Sve@r dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/12/2010, 17h47
  3. MERGE INTO : gestion des clefs
    Par Nams29 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/04/2010, 23h31
  4. KDE sous Ubuntu : gestion des clefs USB
    Par troumad dans le forum Ubuntu
    Réponses: 2
    Dernier message: 12/05/2009, 20h40
  5. Gestion des erreurs (doublon clef primaire)
    Par capitaine dans le forum Access
    Réponses: 3
    Dernier message: 19/06/2006, 12h22

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