我在提供“多对多”连接的 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()
);
Run Code Online (Sandbox Code Playgroud)
该表预计包含 10 000 - 100 000 个条目。
如何更好地设计主键?我应该创建一个额外的“id”字段,还是从两个 id 创建一个复杂的主键?
DBMS 是 PostgreSQL
这是一个“困难”的问题,因为双方都有很好的论据。我倾向于在我使用的所有表中放入自动递增的 ID。随着时间的推移,我发现这只是对开发过程有所帮助,我不必考虑它们是否有必要。
这样做的一个重要原因是对表的外键引用只能使用一列。
在多对多联结表(又名“关联表”)中,这可能不是必需的:
not null无论如何,它们可能会被宣布。有些数据库实际上是根据主键来存储数据的。因此,当您执行插入操作时,必须在页面上移动数据以容纳新值。Postgres不是这些数据库之一。它像对待任何其他索引一样对待主键索引。换句话说,您不会通过将另外一列声明为主键而招致“额外”的工作。
我的结论是,拥有复合主键很好,即使我可能会有一个带有单独约束的自动递增主键。复合主键将占用更少的空间,因此可能比自动递增的 id 更有效。但是,如果有可能将此表用于外键关系,则添加另一个 id 字段。
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |