我正在开发一个 ASP.NET 应用程序,它有一些可能很大的数据表。我想知道定义主键的最佳方法是什么。我知道以前已经有人问过这个问题,但由于这是针对特定情况的,所以我认为这个问题是有效的。
我在 SQL Server 2008 数据库上使用实体框架 4。
考虑以下因素,定义主键的可能性有哪些:
- 随着时间的推移,记录数很可能会超过 32 位边界,因此自动递增整数将不可能实现。
- 无法在表中其他列的组合上定义主键。
- 出于数据同步的原因,应用程序生成的 ID 优于数据库生成的 ID。此外,在 EF 中,这意味着需要额外往返数据库来检索新生成的 id。
- 对于插入性能,顺序键会更好。
- 我认为(顺序)指南的空间要求是一个缺点。
- 对于字符串 id,最好不区分大小写。
到目前为止,我自己想出的是一种自定义算法,它生成日期时间部分和随机部分,并转换为十六进制字符串表示形式。这给我留下了比引导线稍短的字符串。我仍然可以将其转换为 base64,但这将违背第 6 项。
感谢您的建议。
您可以考虑将密钥存储为BIGINT http://msdn.microsoft.com/en-us/library/ms187745.aspx(8 字节整数)。
BIGINT 的工作方式与 INT 完全相同,并且可以以相同的方式在自动递增标识列中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)