我有一个应用程序在几乎所有表中使用GUID作为主键,我已经读过使用GUID作为主键时存在性能问题.老实说,我没有看到任何问题,但我即将开始一个新的应用程序,我仍然想使用GUID作为主键,但我想使用复合主键(GUID和可能是另一个字段) .)
我正在使用GUID,因为当您拥有不同的环境(如"生产","测试"和"开发"数据库)以及数据库之间的迁移数据时,它们很好并且易于管理.
我将使用Entity Framework 4.3,我想在将其插入数据库之前在应用程序代码中分配Guid.(即我不想让SQL生成Guid).
创建基于GUID的主键的最佳做法是什么,以避免与此方法相关的假设性能命中?
sql-server database-design entity-framework guid primary-key
在我的团队的一个相当生气勃勃的讨论中,我被认为是大多数人喜欢的主键.我们有以下小组 -
什么是PK的最佳方法?如果你可以证明你的意见,这将是很棒的.上面有没有更好的方法?
编辑:任何人都有一个简单的样本/算法来生成可扩展的行的人类可读标识符?
algorithm ddl database-design primary-key relational-database
我必须为一个非常大的网站提供会员解决方案.该站点将使用ASP.NET MVC 2和MS SQL2008数据库构建.
目前的会员提供商看起来似乎有点过分,功能太多了.
我要存储的只是电子邮件/密码和基本个人资料信息,例如First/LastName,电话号码.我只需要2个角色,管理员和用户.
考虑到可能有数百万用户注册,您对此类情景有何建议?StackOverflow使用什么?
我过去经常使用现有的会员API,并将其扩展到存储其他信息等.但是有表格如
aspnet_Applications
aspnet_Paths
aspnet_SchemaVersions
aspnet_WebEvent_Events
aspnet_PersonalizationAllUsers
aspnet_PersonalizationPerUser
Run Code Online (Sandbox Code Playgroud)
这是非常多余的,我从来没有找到用途.
编辑
只是为了澄清@drachenstern回答之后的一些其他冗余,还有一些额外的列,我在Membership/Users表中没有用,但会添加到每个select/insert语句的有效负载中.
此外,我听说GUID并不是那么快,而且更愿意使用整数(就像Facebook那样),这也是公开曝光的.
我如何创建自己的成员资格提供程序,重新使用一些成员资格API (验证,密码加密,登录cookie等),但只能使用符合我要求的表格?
我们非常欢迎链接到文章和现有实施,我的谷歌搜索返回了一些非常基本的例子.
在此先感谢
Marko
我注意到有些人不打扰通常增加的数字作为ID,而只是生成一个GUID.优点包括:
一些缺点是:
我的理解是,在大多数情况下使用GUID是有益的,除非时间或空间的优化是个问题.我错过了什么?或者你同意这个想法吗?