266 votes

Avantages et inconvénients des clés de base de données GUID / UUID

J'ai travaillé sur un certain nombre de systèmes de base de données dans le passé, et le déplacement des entrées de bases de données ont été faites beaucoup plus facile si toutes les clés de bases de données avait été GUID / UUID valeurs. J'ai pensé à y aller dans cette voie, à quelques reprises, mais il y a toujours un peu d'incertitude, en particulier autour de la performance et de l'onu-lecture-sur-la-téléphone-mesure Url.

Quelqu'un a travaillé avec les Guid dans une base de données? Quels avantages aurais-je obtenir en allant de cette façon, et ce sont probablement les pièges?

279voto

Nic Wise Points 4722

Avantages:

  • Pouvez les générer en mode hors connexion.
  • Rend la réplication trivial (par opposition à l'int, ce qui en fait est VRAIMENT dur)
  • L'ORM est généralement comme eux
  • unique à travers les applications. Nous pouvons donc utiliser le PK est de notre CMS (guid) dans notre application (également guid) et nous savons que nous n'allons JAMAIS à obtenir un "clash".

Inconvénients:

  • Plus grande utilisation de l'espace, mais l'espace n'est pas cher(er)
  • ne pouvez pas commander par ID pour obtenir l'insert de commande.
  • Peut moche dans une URL, mais vraiment, WTF faites-vous de mettre un RÉEL DB-clés dans l'URL!?
  • Plus difficile de le faire en manuel de débogage, mais n'est pas bien dur

Personnellement, je les utiliser pour la plupart des PK est dans tout système d'une taille décente, mais je me suis "formés" sur un système qui a été reproduit partout, nous avons donc DÛ avoir. YMMV.

Je pense que les données en double chose c'est de la foutaise, vous pouvez obtenir des données en double cependant vous le faites. Les clés de substitution sont généralement mal vu de là où je travaille. Nous utilisons wordpress comme système de tho:

  • IDENTIFIANT unique de la ligne (GUID/whatever). Jamais visibles à l'utilisateur.
  • public ID est généré à la FOIS à partir d'un certain domaine (par exemple le titre - en faire le titre de l'article)

Travaille pour nous :)

20voto

Eric Z Beard Points 18473

Il a été également abordé ici sur Stack Overflow, et ce n’est un excellent article sur le web qui répertorie les avantages et inconvénients.

15voto

Troels Arvin Points 2454

@Matt Sheppard:

Disons que vous avez une table de clients. Vous ne voulez sûrement pas un client d'exister dans la table plus d'une fois, ou il y a beaucoup de confusion va se passer tout au long de vos ventes et de la logistique ministères (en particulier si plusieurs lignes sur le client contiennent des informations différentes).

Si vous avez un numéro de client unique, qui identifie le client et vous assurez-vous que l'identifiant est connu par le client (factures), de sorte que le client et le service à la clientèle de gens ont une référence commune dans le cas où ils ont besoin de communiquer. Pour garantir l'absence d'dupliqué les enregistrements de client, vous ajoutez un caractère unique-contrainte à la table, soit par le biais d'une clé primaire sur l'identificateur du client ou par l'intermédiaire d'un PAS NULL + contrainte UNIQUE sur le numéro de client de la colonne.

Ensuite, pour une raison quelconque (que je ne peux pas penser de), vous êtes invité à ajouter un GUID de la colonne à la table des clients et faire que la clé primaire. Si l'identificateur du client colonne est maintenant à gauche sans unicité de garantie, vous demandez pour de futures difficultés tout au long de l'organisation car les Guid sera toujours unique.

Certains "architecte" peut vous dire que "oh, mais nous nous occupons de la véritable client contrainte d'unicité dans notre app niveau!". La droite. Fashion concernant l'usage général des langages de programmation et (surtout) de niveau intermédiaire cadres change tout le temps, et de façon générale à vivre votre base de données. Et il ya une très bonne chance que vous allez à un certain point besoin d'accéder à la base de données sans passer par la présente demande. == Difficulté. (Mais heureusement, vous et "l'architecte" ont disparu depuis longtemps, de sorte que vous ne sera pas là pour nettoyer le gâchis.) En d'autres termes: Ne conserver évident contraintes dans la base de données (et dans d'autres niveaux, ainsi, si vous avez le temps).

En d'autres termes: Il peut y avoir de bonnes raisons pour ajouter GUID des colonnes dans les tableaux, mais s'il vous plaît, ne tombez pas dans la tentation de faire que la baisse de vos ambitions, pour plus de cohérence dans le réel (==non-GUID) de l'information.

15voto

Mendelt Points 21583

Les principaux avantages sont que vous pouvez créer un id unique, sans connexion à la base de données. Et id sont uniques au monde, de sorte que vous pouvez facilement combiner des données provenant de différentes bases de données. Ceux-ci semblent comme des petits avantages, mais ont m'a sauvé beaucoup de travail dans le passé.

Les principaux inconvénients sont un peu plus d'espace de stockage nécessaire (pas un problème sur les systèmes modernes) et les id ne sont pas vraiment lisible par l'homme. Cela peut être un problème lors du débogage.

Il y a quelques problèmes de performance comme la fragmentation de l'index. Mais ceux-ci sont facilement résoluble (peigne guid par jimmy nillson: http://www.informit.com/articles/article.aspx?p=25862 )

Edit fusionné mes deux réponses à cette question

@Matt Sheppard, je pense qu'il veut dire que vous pouvez dupliquer des lignes avec différentes Guid comme clés primaires. C'est un problème avec n'importe quel type de clé de substitution, et pas seulement de Guid. Et comme il le dit, il est facilement résolu par l'ajout significatif unique contraintes de non-colonnes de clé. L'alternative est d'utiliser une clé naturelle et ceux qui ont de réels problèmes..

12voto

Troels Arvin Points 2454

Guid peut vous amener beaucoup de mal à l’avenir s’ils sont utilisés comme « uniqifiers », laissant les données dupliquées à entrer dans vos tables. Si vous souhaitez utiliser les GUID, veuillez considérer en conservant UNIQUE-contraintes sur les autres colonnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X