Quelle différence entre clé primaire et identifiant naturel ?

La notion d'identifiant naturel relève du modèle conceptuel.

La notion de clé primaire relève du modèle relationnel.


Un identifiant naturel est formé d'un ou plusieurs attributs de l'entité. L'identifiant naturel est significatif pour l'utilisateur.

Une clé primaire est formée d'une ou plusieurs colonnes de la table. En principe, la clé primaire n'est pas significative pour l'utilisateur.


La valeur d'un identifiant naturel doit pouvoir changer au cours du temps, ne serait-ce que pour corriger des erreurs de saisie. Donc, l'utilisateur doit pouvoir éditer la valeur d'un identifiant naturel.

La valeur d'une clé primaire ne doit pas changer au fil du temps car elle est utilisée comme référence dans les contraintes de clés étrangères. Donc, l'utilisateur ne doit pas pouvoir éditer la valeur d'une clé primaire. La valeur de la clé primaire est alimentée automatiquement par le système de gestion de base de données.


Une entité peut avoir plusieurs identifiants naturels. Par exemple, les codes (numéros) et les noms de départements en France ou les abrégés et les noms de cantons en Suisse.

Une table (normalisée) a obligatoirement une et une seule clé primaire.


Si les divers attributs d'une entité ne permettent pas de créer un identifiant naturel, il y a lieu de créer un identifiant artificiel. Par exemple, un numéro de client, de facture ou de commande.

Lors de la transformation de l'entité en table l'identifiant artificiel deviendra une clé primaire telle que décrite ci-dessus. L'utilisateur peut visualiser la valeur de clé primaire pour, par exemple, référencer un client, une commande ou une facture.


Remarque:

La plupart des constructeurs de bases de données relationnelles offrent la possibilité de changer de valeurs de clés primaires en effectuant des mises à jours en cascade au niveau des contraintes de clés étrangères.

Ce mécanisme est utile lors d'une fusion de bases de données pour, par exemple, fusionner deux tables de clients. En régime normal, ce mécanisme est à proscrire car la mise à jour en cascade nécessite de verrouiller les tables avec le risque d'avoir un blocage par une étreinte mortelle (deadlock).

https://sites.google.com/a/smartmodel.ch/conceptionsii/config/pagetemplates/modelemldr/PageGardeAmazon.jpg