我正在建立一个非常重要的国家机构的数据库。到目前为止,对于主键列我有时使用数字,特别是int32或int64,有时我使用了char但仍然只存储了数字字符。由于这是一项非常关键的任务,我必须使其兼具性能和舒适性。现在我想知道,如果使用数字或char为PK列有任何不同,考虑到char列中的值仍然是数字字符。
P.S.你可能想知道如果我无论如何存储数字字符,使用char是什么意思。原因是PK列由多个部分组成,如国家3个字符,省3个字符,城市3个字符和一个人6个字符。除此之外,我可以在这些列上进行字符串操作,而不必担心显式转换。(我知道Oracle中存在隐式转换,但不鼓励依赖它。)
答案 0 :(得分:6)
也不是这样。 您的主键应该是代理。 Int或big int,Guid如果缩放将是一个问题。 那么你应该把国家,省,城市和人作为一个独特的复合键。 '智能'数字很少是一个好主意。
答案 1 :(得分:2)
通常用于主键的整数数据类型,因为它为varchar提供了更好的数据索引性能。如果您需要另一个唯一键,例如字符组合,则可以将其添加到标记为唯一的主键旁边。
对我来说,使用泛型数据(如整数或GUID)的另一个重要原因是灵活性。例如,您可以使用电子邮件地址作为用户表的主键。但几天后,当您需要更改应用程序规则时,一个用户可以拥有多个电子邮件地址。你将更难以改变你的数据结构。