我有一张桌子,代表连接到游戏室的用户。它看起来像这样:
id | gameRoomId | userId
------------------------
0 abc bob
1 xyz joe
2 xyz frank
...
我有没有办法删除自动增量主键id
列?我没有使用它进行任何查询,也不打算。
gameRoomId
和userId
分别对它们有一个通用索引。
我现在正在使用mysql,如果重要的话,最终可能会切换到postgres。
答案 0 :(得分:5)
表必须具有主键约束。如果表具有主键,则不必自动生成该键。在某些情况下,没有任何有意义的意义,甚至可以自动生成给定的主键。
您应该能够从数据库中删除现有的主键列,如下所示:
alter table my_table drop column id;
或者你可以避免首先创建它。
这是否明智,取决于你的情况。
答案 1 :(得分:3)
您的表格看起来像关系表。它代表了游戏室和用户之间的多对多关系。假设两者的给定组合只能出现一次(这似乎是合理的),您可以声明这两列的复合主键,并且不使用id字段。
某些设计工具需要一个简单的主键,但这不是关系建模的一部分。
在物理层面,声明主键会产生各种后果。为您创建的索引将是复合索引。如果你对userids和gemeroomids使用整数而不是你显示的字符串,那将会稍微有效。
如果没有声明任何主键,我不推荐。迟早,您的应用程序中会出现一个错误,它会在其中包含重复的行,并且您将开始从查询中获得意外结果。让DBMS帮助您管理数据会好得多。
答案 2 :(得分:2)
没有
主键必须是唯一的,必须100%保证,并且NON为NULL 如果可能的话,主键应该是稳定的而不是更改。 所以你没必要,但这是一个很好的选择,因为没有其他自然独特的数据,你不想拥有巨大的主键。
要回答你的子问题,你真的不想,它没有那么多的数据而且它是独一无二的。