2009-11-04 1 views
6

Pourquoi aspnet_users utilise-t-il guid pour l'identifiant plutôt que d'incrémenter int?Pourquoi aspnet_users utilise-t-il guid pour id au lieu d'incrémenter int? points bonus pour l'aide sur l'extension des champs utilisateur

Y a-t-il également une raison pour ne pas l'utiliser dans d'autres tables en tant que clé primaire? Cela me semble un peu étrange car je sais que la plupart des applications avec lesquelles j'ai travaillé dans le passé utilisent simplement le système normal. Je suis également sur le point de commencer à utiliser cet identifiant pour faire face à une table de détails étendue pour des préférences utilisateur supplémentaires, etc. Je pensais également utiliser une table de liens avec un guid et un int dedans, mais j'ai décidé que Je ne pense pas que je doive avoir un identifiant d'utilisateur en tant qu'int public.

Bien que je voudrais avoir l'int (se sent plus facile de faire une recherche utilisateur etc stackoverflow.com/users/12345/user-name), comme je vais juste avoir le nom d'utilisateur, je ne pense pas que je besoin de transporter cet objet, et d'inciter la complexité supplémentaire des recherches lorsque j'ai besoin de trouver un utilisateur int.

Merci pour toute aide avec tout cela.

Répondre

13

Il garantit l'unicité des systèmes déconnectés. Tout magasin de données qui peut avoir besoin de s'interfacer avec un autre magasin de données précédemment non connecté peut potentiellement rencontrer des collisions - par ex. ils ont tous les deux utilisé int pour identifier les utilisateurs, maintenant nous devons passer par un processus de résolution complexe pour choisir de nouveaux identifiants pour les conflits et mettre à jour toutes les références en conséquence. L'inconvénient de l'utilisation d'un identificateur unique unique dans SQL (avec newid()) comme clé primaire est que les GUID ne sont pas séquentiels. Ainsi, lorsque de nouvelles lignes sont créées, elles sont insérées à une position arbitraire dans la base de données physique. d'annexé à la fin. Cela provoque sévère fragmentation de page pour les systèmes qui ont un taux d'insertion important. Il peut être corrigé en utilisant newsequentialid() à la place. J'ai discuté de cela dans more detail here.

En général, il est recommandé d'utiliser newsequentialid() pour votre clé primaire GUID ou n'utilisez pas de GUID pour la clé primaire. Vous pouvez toujours avoir une colonne indexée secondaire qui stocke un GUID, que vous pouvez utiliser pour conserver vos références uniques.

+0

Merci pour la réponse, donc si j'utilise l'authentification intégrée asp.net, utilise-t-elle newsequentialid() en standard? Je ne vois pas pourquoi vous ne voudriez jamais l'utiliser? –

+0

@optician ce n'est pas le cas, mais voyez ce lien pour changer cela: http://www.ericswann.org/blog/archive/2008/03/15/asp.net-sql-server-2005-membership-provider-and -newsequentialid.aspx –

5

Les GUID en tant que clé primaire sont très populaires auprès de certains groupes de programmeurs qui ne se soucient pas (ou ne veulent pas) de leur base de données sous-jacente.

GUID sont cool parce qu'ils sont (presque) garantis d'être unique, et vous pouvez les créer "à l'avance" sur l'application cliente dans le code. Malheureusement, ces gens ne sont pas conscients des inconvénients terribles (fragmentation de l'index horrible et donc perte de performance) de ces choix quand il s'agit de SQL Server. Beaucoup de programmeurs ne se soucient vraiment pas d'un bit ... et puis blâmer SQL Server pour être lent comme un chien. Si vous voulez utiliser des GUID pour vos clés primaires (et ils ont de très bons usages, comme Rex M. l'a souligné - dans les scénarios de réplication principalement), alors OK, mais assurez-vous d'utiliser une colonne INT IDENTITY comme votre clé de clustering dans SQL Server pour minimiser la fragmentation de l'index et donc les pertes de performances.

Kimberly Tripp, la "reine de l'indexation SQL Server", a un tas d'articles très bons et perspicace sur le sujet - voir de mes favoris:

et bas icalement tout ce qu'elle publie sur her blog vaut la peine d'être lu.

Questions connexes