gpt4 book ai didi

sql - "many-to-many"表中的主键

转载 作者:行者123 更新时间:2023-11-29 12:28:56 25 4
gpt4 key购买 nike

我在 SQL 数据库中有一个表,它提供“多对多”连接。

该表包含两个表的 ID 和一些字段以及有关连接的附加信息。

CREATE TABLE SomeTable (
f_id1 INTEGER NOT NULL,
f_id2 INTEGER NOT NULL,
additional_info text NOT NULL,
ts timestamp NULL DEFAULT now()
);

该表预计包含 10 000 - 100 000 个条目。

如何设计主键比较好?我应该创建一个额外的“id”字段,还是根据两个 id 创建一个复杂的主键?

数据库管理系统是 PostgreSQL

最佳答案

从双方都有很好的论据的意义上说,这是一个“困难”的问题。我倾向于在我使用的所有表中放入自动递增的 ID。随着时间的推移,我发现这对开发过程很有帮助,我不必考虑它们是否有必要。

这样做的一个重要原因是对表的外键引用只能使用一列。

在多对多联结表(又名“关联表”)中,这可能不是必需的:

  • 不太可能将具有外键关系的表添加到联结表。
  • 无论如何,您都需要在列上建立唯一索引。
  • 它们可能会被声明为not null

有些数据库实际上是根据主键存储数据的。因此,当您执行插入操作时,必须在页面上移动数据以容纳新值。 Postgres 不是这些数据库之一。它像对待任何其他索引一样对待主键索引。换句话说,您不会通过将多一列声明为主键来招致“额外”工作。

我的结论是拥有复合主键很好,即使我可能有一个带有单独约束的自动递增主键。复合主键将占用更少的空间,因此可能比自动递增的 id 更有效。但是,如果此表有可能用于外键关系,则添加另一个 id 字段。

关于sql - "many-to-many"表中的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com