Juste pour être contraire, non, vous n'avez PAS toujours besoin d'un PK AutoInc numérique.
Si vous analysez soigneusement vos données, vous identifiez souvent des clés naturelles dans les données. C'est souvent le cas lorsque les données ont une signification intrinsèque pour l'entreprise. Parfois, les PK sont des artefacts d'anciens systèmes que les utilisateurs professionnels utilisent comme seconde langue pour décrire les attributs de leur système. J'ai vu des numéros d'identification de véhicule (VIN) utilisés comme clé principale d'un tableau "Véhicule" dans un système de gestion de flotte, par exemple.
Quelle que soit l'origine, si vous avez déjà un identifiant unique, utilisez-le. Ne créez pas une seconde clé primaire sans signification; c'est un gaspillage et peut causer des erreurs.
Parfois, vous pouvez utiliser un PK AutoInc pour générer une valeur client significative, par exemple des numéros de stratégie. Définir la valeur de départ sur quelque chose de sensé et appliquer les règles de gestion relatives aux zéros non significatifs, etc. Il s'agit probablement d'une approche du "meilleur des deux mondes".
Lorsque vous avez un petit nombre de valeurs relativement statiques, utilisez des valeurs qui ont du sens pour l'utilisateur du système. Pourquoi utiliser 1, 2, 3 alors que vous pouvez utiliser L, C, H, où L, H et C représentent Vie, Voiture et domicile dans un contexte "type de police" d'assurance ou, si vous revenez à l'exemple du VIN, que diriez-vous d'utiliser "TO "pour Toyota? Toutes les voitures Toyata ont un VIN qui commence par "TO". C’est une chose à retenir de la part des utilisateurs, qui risquent moins d’introduire des erreurs de programmation et des erreurs et qui peut même servir de substitut utilisable pour une description complète dans les rapports de gestion, ce qui simplifie les rapports. écrire et peut-être plus rapide à générer.
Un développement ultérieur de ceci est probablement "un pont trop loin" et je ne le recommande généralement pas, mais je l'inclue par souci d'exhaustivité et vous pourrez en trouver un bon usage. Autrement dit, utilisez la description comme clé primaire. Pour des données qui changent rapidement, c'est une abomination. Pour les données très statiques rapportées sur Tout le temps , peut-être pas. Il suffit de le mentionner pour que cela reste une possibilité.
J'utilise des PC AutoInc, je m'engage simplement dans mon cerveau et cherche d'abord de meilleures alternatives. L'art de la conception de base de données donne quelque chose de significatif qui peut être interrogé rapidement. Avoir trop de jointures empêche cela.
ÉDITER Un autre cas crucial où vous n'avez pas besoin d'une PK générée automatiquement est le cas des tables représentant l'intersection de deux autres tables. Pour rester fidèle à l’analogie voiture, une voiture a 0..n accessoires, chaque accessoire peut être trouvé sur de nombreuses voitures. Donc, pour représenter ceci, vous créez une table Car_Accessory contenant les PK de Car et Accessory et d'autres informations pertinentes sur le lien Dates, etc.
Ce dont vous n’avez pas besoin (généralement), c’est un AutoInc PK sur cette table - il ne sera accessible que par la voiture "dites-moi quels accessoires sont sur cette voiture" ou à partir de l’accessoire "dites-leur quelles voitures ont cet accessoire"