【发布时间】:2011-03-18 22:42:45
【问题描述】:
我正在开发一个 asp.net 应用程序,其中包含一些可能很大的数据表。我想知道定义主键的最佳方法是什么。我知道以前有人问过这个问题,但由于这是针对特定情况,我认为这个问题是有效的。
我在 SQL Server 2008 数据库上使用 Entity Framework 4。
考虑以下因素,定义主键有哪些可能性:
- 随着时间的推移,记录数很有可能会超过 32 位边界,因此无法使用自增整数。
- 无法在表中其他列的组合上定义主键。
- 出于数据同步的原因,应用程序生成的 ID 比数据库生成的 ID 更可取。此外,在 EF 中,这意味着需要额外往返数据库以检索新生成的 id。
- 为了提高插入性能,最好使用顺序键。
- 我认为(顺序)引导的空间要求是不利的。
- 对于字符串 ID,最好不区分大小写。
到目前为止,我自己想出的是一个自定义算法,它生成一个日期时间部分和一个随机部分,并转换为十六进制字符串表示。这给我留下了比 guid 略短的字符串。我仍然可以将其转换为 base64,但这会违反第 6 项。
感谢您的建议。
【问题讨论】:
-
"在 EF 中,这意味着需要额外往返数据库以检索新生成的 id。"错误的。
INSERT和获取新 ID 在 EF 中的单个 SQL 语句中完成。 -
同意 Craig - EF 很乐意在同一次往返中返回任何生成的 ID - 无需额外的往返 - 该论点没有实际意义
-
啊,我不知道 EF 在同一往返中检索 id。不知道为什么我认为它不能。
标签: c# asp.net sql-server entity-framework sql-server-2008