0

我有一个实体框架模型,该模型带有一个预计可以容纳大量数据的表。我担心使用 int 主键,因为我希望它会变得更大。我正在考虑使用 Int64 来解决这个问题。

这是真正的踢球者 - 我在有问题的表上使用每个类型继承的表。因此,如果我使用 Int64,将有几个其他表(实际上是任意数量的表,因为我将添加更多)必须使用 Int64 主键,即使它们增长超出 int 范围的可能性很苗条。似乎是一个低效的解决方案。想法?

我正在考虑使用由 int ID 和子类型鉴别器(可能是 char)组成的复合键。我想知道这种方法对性能的影响。我一直更喜欢代理键,除非它是一个简单的关联实体。有没有比这两种方法更好的方法?其中哪一个是更可取的路线?

更新:

我想澄清一下,我正在考虑的复合键不是自然复合键。它只包含 ID 和子类型鉴别器。我有兴趣使用它来避免 int 主键的大小限制。我主要担心的是:

1) 使用 Int64 主键是否存在性能问题?特别是在每个类型继承的表中,只有父表需要,但也必须在子表中使用。

2) 使用复合键(非自然键)实现比 int 主键更大的范围是否比使用 Int64 键执行相同操作提供任何性能优势?

4

1 回答 1

1

请查看这个 SO 问题/答案。基本上,为什么不同时使用两者?对连接和外键使用整数代理键,但要确保有一个有意义的复合自然键(如果正确的自然键是复合的),以确保数据一致性并最大限度地减少插入重复行的风险......

BigintId  firstName LastName   Phone        Gender   Birthdate
  1         Bob      Smith    111 234-5678    M     1 jan 1978
  2         Bob      Smith    111 234-5678    M     1 jan 1978
  3         Bob      Smith    111 234-5678    M     1 jan 1978
  4         Bob      Smith    111 234-5678    M     1 jan 1978

这些真的是不同的实体,只是因为它们有不同的 id 吗?只有当我们盲目地重新定义different以简单地表示它具有不同的 Key...

于 2013-09-05T08:16:48.067 回答