|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 58 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : mars 2002 Messages : 323 ![]() |
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 |
|
|
00
|
|
|
#3 | |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 58 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
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
|
|
|
00
|
|
|
#5 | |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 58 ![]() |
Citation:
Supposons que les champs de ma table sont : ---------------------------------------------------- ID_PERSONNE | NOM | PRENOM | FONCTION --------------------------------------------------- ---------------------------------------------------- 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é. ---------------------------------------------------- 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] |
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : mars 2002 Messages : 323 ![]() |
Ok perso je te conseille de poser des index plutôt que de bidouiller.
__________________
creapage.net |
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : mars 2002 Messages : 323 ![]() |
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 |
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
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 * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com