为什么aspnet_users使用guid作为id而不是递增int?
还有什么理由不在其他表中使用它作为主键?感觉有点奇怪,因为我知道我以前使用的大多数应用程序只使用普通的int系统.
我也将开始使用此id来匹配扩展的详细信息表以获取额外的用户prefs等.我还在考虑使用带有guid和int的链接表,但我决定,因为我不认为我实际上需要将用户ID作为public int.
虽然我想有int(感觉更容易做用户查找等stackoverflow.com/users/12345/user-name),因为我只是要有用户名,我不认为我需要携带这个当我需要找到一个用户int时,周围的项目并且会增加查找的额外复杂性.
感谢您对此任何帮助.
解决方法
它确保了断开连接的系统的唯一性.可能需要与另一个先前未连接的数据存储区接口的任何数据存储都可能遇到冲突 – 例如他们都使用int来识别用户,现在我们必须经历一个复杂的解决过程,为冲突的ID选择新ID,并相应地更新所有引用.
在sql中使用标准uniqueidentifier(使用newid())作为主键的缺点是GUID不是顺序的,因此创建新行时它们会插入物理数据库页面中的某个任意位置,而不是附加到结束.这会导致具有任何实质插入率的系统出现严重的页面碎片.可以使用newsequentialid()来纠正它.我在more detail here讨论过这个问题.
通常,最佳做法是将newsequentialid()用于GUID主键,或者仅使用GUID作为主键.您始终可以拥有存储GUID的辅助索引列,您可以使用该列来保持引用的唯一性.