【问题标题】:Number or char for primary key column主键列的数字或字符
【发布时间】:2011-12-13 07:16:59
【问题描述】:

我正在建立一个非常重要的国家机构的数据库。到目前为止,对于主键列,我有时使用数字,特别是 int32 或 int64,有时我使用 char 但我仍然只存储数字字符。由于这是一项非常关键的任务,我必须使其性能和舒适性都有效。现在我想知道,考虑到 char 列中的值仍然是数字字符,对 PK 列使用 number 或 char 是否有任何区别。

P.S.如果我无论如何都存储数字字符,您可能想知道使用 char 有什么意义。原因是PK栏由很多部分组成,比如国家3个字,省3个字,城市3个字,个人6个字。除此之外,我可以对这些列进行字符串操作,而不必担心显式转换。(我知道 Oracle 中有隐式转换,但不鼓励依赖它。)

【问题讨论】:

  • 为什么要使用 char 列来存储数字?使用数字列会更加高效和灵活。

标签: oracle integer char primary-key


【解决方案1】:

两者都不是。 您的主键应该是代理项。 Int 或 big int,如果缩放将成为问题,则为 Guid。 然后你应该有国家,省,城市和人作为唯一的复合键。 “智能”数字很少是个好主意。

【讨论】:

  • 谢谢你,托尼。我想我会按照你的建议使用代理。
【解决方案2】:

通常用于主键的整数数据类型,因为它比 varchar 提供更好的数据索引性能。如果您需要另一个唯一键(例如字符组合),可以将其添加到标记为唯一的主键旁边。

对我来说,使用通用数据作为主键(如整数或 GUID)的另一个重要原因是为了灵活性。例如,您可以使用电子邮件地址作为用户表的主键。但是几天后,当您需要更改一个用户可以拥有多个电子邮件地址的应用程序规则时。你会更难改变你的数据结构。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 2019-07-19
    • 2012-11-25
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2021-05-11
    相关资源
    最近更新 更多