我有一个带有表的实体框架模型,该表预计会包含大量数据。我担心使用int主键,因为我希望它比那更大。我正在考虑使用Int64来解决这个问题。
这是真正的踢球者 - 我在所讨论的表上使用每种类型的表继承。因此,如果我使用Int64,将会有几个其他表(实际上是任意数量的表,因为我将添加更多)必须使用Int64主键,即使它们增长超出int的范围的可能性非常苗条。似乎是一个低效的解决方案。想法?
我正在考虑使用一个由ID ID和子类型鉴别器组成的复合键,可能是一个char。我想知道这种方法的性能影响。我总是喜欢代理键,除非它是一个简单的联想实体。有比这些更好的方法吗?哪一个是最好的路线?
更新
我想澄清一下,我正在考虑的复合键不是一个自然的复合键。它只包含ID和子类型鉴别符。我有兴趣使用它作为避免int主键的大小限制的方法。我主要担心的是:
1)使用Int64主键是否存在性能问题?特别是在每个类型继承的表中,它只需要父表,但也必须在子表中使用。
2)使用复合键(非自然)来实现比int主键更大的范围是否比使用Int64键执行相同的操作提供了任何性能优势?
答案 0 :(得分:1)
请查看this SO question / answer。基本上,为什么不同时使用?使用整数代理键进行连接和外键,但要确保有一个有意义的复合自然键(如果正确的自然键是复合键),以确保数据一致性并最大限度地降低插入重复行的风险...
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?只有当我们盲目地重新定义不同只是意味着它有一个不同的Key ...