【问题标题】:Should I use time as part of a composite key or create a new primary key?我应该将时间用作复合键的一部分还是创建新的主键?
【发布时间】:2015-01-07 03:36:09
【问题描述】:

我的数据库中有一个表,它由两个外键组成,它们一起仍然不是唯一的,但是向它们添加时间/日期会使它们变得唯一。将这三列一起用作主键是个好主意,还是应该创建一个新列并使用单独的主键?

【问题讨论】:

  • 我认为在这种情况下使用数据库生成的代理键作为主键会更好。
  • 时间/日期如何使其独一无二?就像 Leo 说的,添加一个生成的密钥。
  • 这就是我所倾向于的,但我是数据库设计的新手,所以我只是想确定一下。
  • @ForguesR 是的,现在看起来更明显了,我要为主键添加一个单独的列。
  • 如果一开始就没有可以构成主键的列,那么什么是代理 id 代理 for

标签: mysql database


【解决方案1】:

添加时间戳以人为地从其他 2 列创建复合主键不是一个好主意 IMO,因为您可以拥有足够快的硬件以在数据库中生成两个相同的复合键。

相反,在这种情况下,您可以检查数据库中的代理键生成器(通常是某种序列)。

【讨论】:

    【解决方案2】:

    否:添加“基于时间的值来构建主键”无效,正如您可以从 here 中理解的那样。

    最好为您的表创建一个自己的主键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多