表只有一列或添加数字主键?

Ric*_*nop 8 mysql database schema database-design

假设我需要一个带有帐号ID的简单表,而不需要其他信息.有两种方法可以做到:

id varchar(255) PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

或者添加数字主键:

id int PRIMARY KEY
accountId varchar(255) UNIQUE NOT NULL
Run Code Online (Sandbox Code Playgroud)

这两种方法有哪些优点/缺点,您可以选择哪种方法?为什么?

第一个解决方案对可维护性有什么影响(如果我们需要更改单行的id)和性能?

Jos*_*ien 9

这归结为数据库世界中的替代关键自然关键争论.例如,请参见此处,此处此处有关该主题的文本.我认为这两个选项都是有效的,但在这种情况下,我会选择AccountID自然键(假设AccountID每个帐户都是唯一的,不会为空,也不会有变化),因为这意味着开销更少.在这种情况下,我没有看到代理键的附加值.

自然键:

  • 对用户有意义
  • 在需要时很难改变
  • 可能导致在查询中需要较少的连接

代理键:

  • 对用户没有任何意义
  • 不受更改
  • 可能导致在查询中需要更多联接
  • 可能需要额外或更大的索引

  • 很好的答案.我没有意识到事实上的问题是关于代理键.另一个问题是其他表可能有FK指向这个PK.除了"稳定键"问题之外,它还意味着所有引用表都需要varchar(255)来引用我们. (2认同)