我有用户角色。
用户可以拥有多个角色。我有一张名为users_roles
的表。
我有三列 - id
,user
,role
。
id
是一个自动增量列。
所以,
放弃id
列是不是一个好主意,因为我从未在代码中使用它?
如果是,那么该列应该是哪个列的索引?或者根本没有索引?
答案 0 :(得分:0)
我同意如果用户是userid,那么你不需要id列,userid可以是你的索引PK。
如果user是用户的名称,那么您将要保留id,或者创建user_id,以便您可以拥有一个有效的索引键。
答案 1 :(得分:0)
如果您要删除“id”字段,那么如何在user和user_roles表之间建立关系。
定义主键总是更好。定义主键时会创建默认索引。它以某种方式提高了性能。
同样,当您定义外键时,也会生成外键索引。因此,您的表查询执行将变得更快。
这是您的第一个答案: 根据您的要求,目前您可以从user_roles表中删除“id”主键,因为它只是用作用户和角色之间的关系表。 但是在大多数PHP框架中,即使在关系表中删除主键也不是一个好习惯。
这是您的第二个答案:如果您要删除主键,则必须将“user”和“role”字段上的索引维护为foreignKey索引。如果您不打算从user_roles表中删除主键。然后将为“id”,“user”和“role”字段生成3个索引。第一个索引是主索引,其余两个是foreignKey索引。
在表上明确定义更多索引也会导致查询执行带来一些额外开销。
答案 2 :(得分:0)
users_roles
是许多链接表。
在许多表格中至少有两种常用的主键方法:
users_roles
有自己的代理主键,如此处的情况(users_roles.id
)关于简单vs复合键的讨论很多,例如Why single primary key is better than composite keys?
请注意,索引和主键是不同的概念。主键是唯一性,索引是性能。 (您可以在表上有多个索引,但只能有一个PK)
如果您似乎在说,没有其他表引用user_roles,那么您实际上并不需要主键。
如果您的users_roles
表变大,您可能希望在users列上添加索引,也可能在role表中添加索引,例如如果您经常搜索特定角色的用户。