Quelle est la meilleure clé primaire pour stocker l'adresse du site Web et les URL de la page? Pour éviter l'utilisation de l'ID auto-incrémental (qui n'est pas vraiment lié aux données), j'ai conçu le schéma en utilisant une signature SHA1 de l'URL comme clé primaire. Cette approche est utile de plusieurs façons: par exemple, je n'ai pas besoin de lire last_id de la base de données pour pouvoir préparer toutes les mises à jour de la table en calculant la clé et faire la vraie mise à jour en une seule transaction. Aucune violation de contrainte.Meilleure clé primaire pour stocker les URL
En tout cas, j'ai lu deux livres qui me disent que je me trompe. Dans "Haute performance MySQL", il est dit que la clé aléatoire n'est pas bonne pour l'optimiseur de DB. En outre, dans chaque livre de Joe Celko, il dit que la clé primaire devrait être une partie des données.
La question est: les clés naturelles pour les URL sont ... les URL elles-mêmes. Le fait est que si pour un site il est court (www.something.com), il n'y a pas de limite imposée pour une URL (voir http://www.boutell.com/newfaq/misc/urllength.html). Considérer que je dois stocker (et travailler avec) quelques millions d'entre eux.
Quelle est la meilleure clé, alors? Identifiants auto-incrémentés, URL, hachages d'URL?
Je pense que cela dépendra beaucoup de ce que vous faites d'autre avec ces URL, patrons d'accès, etc. L'utilisation de SHA1 devrait être sûre des collisions, où une fonction de hachage plus courte (par exemple CRC32) serait évidemment inappropriée, mais les collisions peuvent toujours être possibles, vous seriez juste malchanceux. –