Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2004, 18h46   #1
Membre à l'essai
 
Inscription : mai 2004
Messages : 58
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 58
Points : 20
Points : 20
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.
vsavoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2004, 21h34   #2
Membre confirmé
 
Inscription : mars 2002
Messages : 323
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 323
Points : 280
Points : 280
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 ?
__________________
creapage.net
laffreuxthomas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2004, 13h52   #3
Membre à l'essai
 
Inscription : mai 2004
Messages : 58
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 58
Points : 20
Points : 20
Citation:
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.
vsavoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2004, 14h04   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2004, 17h40   #5
Membre à l'essai
 
Inscription : mai 2004
Messages : 58
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 58
Points : 20
Points : 20
Citation:
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]
vsavoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2004, 03h23   #6
Membre confirmé
 
Inscription : mars 2002
Messages : 323
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 323
Points : 280
Points : 280
Ok perso je te conseille de poser des index plutôt que de bidouiller.
__________________
creapage.net
laffreuxthomas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2004, 03h28   #7
Membre confirmé
 
Inscription : mars 2002
Messages : 323
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 323
Points : 280
Points : 280
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.
__________________
creapage.net
laffreuxthomas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2004, 22h48   #8
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h50.


 
 
 
 
Partenaires

Hébergement Web