C'est une question très débattue, avec beaucoup d'émotion sur les deux côtés.
À mon humble avis, si il y a un bon, utilisable clé naturelle disponible -- comme un ISBN -- je l'utilise. Je vais stocker dans la base de données de toute façon. Oui, une clé naturelle est généralement plus grand qu'un entier auto-incrément de la clé, mais je pense que ce problème est exagérée. L'espace disque est bon marché aujourd'hui. Je serais vous inquiétez plus au sujet de ce que ça prend plus de temps à traiter. Si vous parlions d'une 80 octets de texte champ comme clé primaire, je dirais que non. Mais si vous songez à utiliser un 10 octets ISBN au lieu de 8 octets grand entier, je ne peux pas imaginer qu'apporte beaucoup de performances.
Parfois, il y a un avantage de performance à des clés naturelles. Supposons, par exemple, je veux savoir combien d'exemplaires du livre ont été vendus. Je n'aime pas parler de toutes les données à partir du Livre d'enregistrement maître. Si la clé primaire est l'ISBN, je pourrais écrire tout simplement "select count(*) de vente où isbn='143573338X'". Si j'ai utilisé un auto-incrémentation de la clé, je dois faire une jointure pour rechercher l'isbn, et la requête devient plus complexe et plus lent, comme "select count(*) from livre adhérer à la vente en utilisant (bookid) où isbn='143573338X'". (Et je peux vous assurer que ce particulier ISBN est de mon livre, le nombre de vente des enregistrements est très petite, donc faire la jointure et la lecture d'un enregistrement supplémentaire est un grand pourcentage de la différence!)
Un autre avantage de la lumière de touches est que lorsque vous avez à travailler sur la base de données et que vous regardez les dossiers que vous référer à ce tableau par la clé, il est facile de voir ce dossier, ils parle.
D'autre part, si il n'est pas bon, tout naturellement la clé, ne pas essayer de bricoler un fou. J'ai vu des gens essayer de faire une clé naturelle par la concaténation de l'ensemble des 6 premières lettres des clients prénom, son année de naissance et son code postal, et puis prier pour que qui sera unique. Ce genre de bêtise est juste faire des problèmes pour vous-même. Souvent, les gens finissent par prendre sur un numéro de séquence pour s'assurer qu'il est unique, de toute façon, et à ce point, pourquoi s'embêter? Pourquoi ne pas simplement utiliser le numéro de séquence par lui-même comme la clé?