OVH Cloud OVH Cloud

Colonne AutoID et Clé primaire Naturelle?

2 réponses
Avatar
Christophe Leroquais
Bonjour,

une question de debutant:
j'ai crée une table sous SQL Server 2005 et je me demande quelles sont les
'best practices' concernant les Clés primaires.
Quel est l'interet de creer une colonne AutoID column et la mettre en clé
primaire?
Sinon j'ai une clé primaire naturelle qui est formée par le n-uplet FUND_ID
+ CLASSE_CODE + FEE_ID

Je ne vois pas bien l'interet de creer une colonne AutoID car ca ne me
protegera pas de l'insertion de doublons?

Merci,

Christophe

2 réponses

Avatar
zoltix
Christophe Leroquais a écrit :
Bonjour,

une question de debutant:
j'ai crée une table sous SQL Server 2005 et je me demande quelles sont les
'best practices' concernant les Clés primaires.
Quel est l'interet de creer une colonne AutoID column et la mettre en clé
primaire?
Sinon j'ai une clé primaire naturelle qui est formée par le n-uplet FUND_ID
+ CLASSE_CODE + FEE_ID

Je ne vois pas bien l'interet de creer une colonne AutoID car ca ne me
protegera pas de l'insertion de doublons?

Merci,

Christophe




Dans une clef primaire composé de plusieurs champs aucun ses champs ne
peuvent être a null, Faut essayer d’éviter les clefs primaires
composées pour une question de performance. Parfois, pour une question
de pratique c’est quand même mieux une clef composé.

Ceci dit je ne vois pas l’inconvénient de mettre un champ avec id
unique comme clef primaire et un index avec une contrainte d’unicité.
Et des index de performance pour optimiser la where clause.
Avatar
Fred BROUARD
Christophe Leroquais a écrit :
Bonjour,

une question de debutant:
j'ai crée une table sous SQL Server 2005 et je me demande quelles sont les
'best practices' concernant les Clés primaires.
Quel est l'interet de creer une colonne AutoID column et la mettre en clé
primaire?
Sinon j'ai une clé primaire naturelle qui est formée par le n-uplet FUND_ID
+ CLASSE_CODE + FEE_ID



Imaginons que :
- Fund_id soit de type INTEGER
- Class code soit de type CHAR(8)
- FEE_ID de type INTEGER

Par rapport à une clef autoinc votre clef est au moins 4 fois moins
rapide dans toutes les opérations et notamment dans les comparaisons qui
sont la base des jointures.
De plus, cette structure multi colonne de clef sera lente en recherche
si un filtre WHERE porte sur class code ou fee id ou les deux sans fund_id.

Si cela vous intéresse, venez à mon cours d'optimisation sur SQL Server
que je fais à Orsys... Il y a de belles démo, de ce genre !

Je ne vois pas bien l'interet de creer une colonne AutoID car ca ne me
protegera pas de l'insertion de doublons?



Si, car vous pouvez créer une contrainte d'unicité avec les colonnes sus
visées.


Merci,

Christophe





A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************