web-dev-qa-db-fra.com

Clé de substitution VS Natural Key

J'ai une table appelée périphériques. La plupart des appareils qui seront stockés dans ce tableau peuvent être identifiés de manière unique par leur numéro de série et leur numéro de pièce. Mais certains types de périphériques ne disposent pas de numéro de série et de numéro de pièce assigné. Au lieu de cela, ils peuvent être identifiés de manière unique par un autre champ (ID interne).

Devrais-je créer une clé de substitution pour ce tableau ou dois-je créer une clé primaire composite (numéro de série, numéro de pièce, ID interne) et insérer des valeurs par défaut au numéro de série et aux colonnes de numéro de pièce lorsqu'ils ne sont pas fournis? Les types de périphériques qui n'ont pas de numéro de pièce et de numéro de série maintenant, auront les chiffres qui leur sont attribués dans les prochains versions (peut être de 5 ans à partir de maintenant). Devrais-je créer une clé de substitution ou une clé composite dans ce scénario? Ou en utilisant les trois attributs uniques, devrais-je créer un hachage dans le programme et utiliser cela comme une clé de substitution pour les tables?

5
DBK

Utilisez la touche de substitution comme clé primaire pour le moment. Lorsque des clés naturelles deviennent disponibles, faites-leur des contraintes uniques non involonibles.

Par le YAGNI principe, vous ne devez coder que pour les exigences de courant "réelle" - une clé primaire qui peut (ou peut ne pas) arriver en 5 ans ne vaut pas la peine d'envisager maintenant !

Les touches de substitution sont très largement utilisée dans la pratique, beaucoup à l'horreur des puristes: le reste d'entre nous les utilise simplement! Voir cette pile débordement de réponse (ainsi que le reste du fil).

4
Vérace