【问题标题】:Can I composite primary key be used in place of an ID primary key?我可以使用复合主键代替 ID 主键吗?
【发布时间】:2017-01-08 14:11:30
【问题描述】:

我目前有一个数据库设置,其中有 5 列设置为可以唯一标识行的复合主键。我还应该有一个 ID 列来标识每一行吗?这似乎是多余的,虽然我不确定什么是标准的。

我正在使用 SQLAlchemy。我注意到,当我将 5 列作为复合主键时,与我有一个 ID 列相比,从 CSV 文件插入数据的表要慢得多。列的速度只有一半(不确定这是否相关)。

明确一点:我的问题是,我是否应该在复合主键旁边有一个 ID 列,即使 ID 列是多余的?

【问题讨论】:

  • 所以您仍然将 5 列标识为 UNIQUE,而不是 PRIMARY?
  • 我只将这些字段标记为主要字段。我的印象是主键必须是唯一的。但我可以将它们标记为应有的独特性。列的唯一性和主要性是否可以替代没有 ID 列?

标签: python mysql sqlalchemy


【解决方案1】:

是的,您应该始终有一个单独的 rowid(基于 int 的 one-up 或 UUID)。尤其是当您进入 mysql 或数据库 DevOps 的其他方面时,拥有该 ID 字段是一种救命稻草(例如,复制或 galera 集群)。它还使使用 django 等框架变得更加容易。

【讨论】:

  • 是否也推荐它作为主键?我想要做的(在 SQLAlchemy 中)是拥有该 ID,但不是作为主键,而是让它是唯一的和 auto_increment。
  • 不需要它作为主键,但建议(为了更快的查询和索引大小)将它用作 a 键。 mysql 有很多更精细的方面,比如集群索引,如果它是主键会更容易,但对于复制或 galera 集群之类的东西来说,这不是必需的。
  • 或者“不,虽然它在某些情况下非常有用,但它也会给你的数据集增加不必要的冗余”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多