【问题标题】:Finding the right primary key找到正确的主键
【发布时间】:2015-06-21 00:16:44
【问题描述】:

我决定将三个值的组合设置为我的数据库表的主键(复合键)。大多数情况下,前两列是唯一的。但在少数情况下,它们都是相同的,此时第三列的值对于该行将始终是唯一的。问题是第三列是用户可以输入的任何字符串的描述。我知道不建议将用户给定的字符串作为主键。但是可以将它作为复合键的一部分。我真的没有其他选择。

【问题讨论】:

  • 我假设不可能添加一个可以充当代理主键的新列?
  • 如果不是 - 也许使用时间戳作为第三个组件比使用描述更好
  • 哦..timestamp 可能很好。我会尝试取回..谢谢:)
  • 使用时间戳有用吗?

标签: mysql database composite-key


【解决方案1】:

如果可能,您应该添加一个代理主键,这意味着一个唯一且没有任何业务意义的键。

复合主键通常不如预期的“稳定” - 但如果您必须使用一个,则最好使用一个或多个用户几乎无法控制或无法控制的组件列(如 created_timestamp)。

【讨论】:

  • 补充 morsor 的回答:如果您需要主键的唯一性,您可以创建额外的索引作为“唯一”
【解决方案2】:

添加一个名为id 的单独列并将其设为auto increment,并将此列用作primary key

希望这能解决您的问题。

干杯。

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2017-01-09
    • 2014-10-02
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多