我有一张桌子Users
。
我有一个自动增加长ID作为主要。现在我需要用户名也是唯一的。什么是最佳做法?
我应该只保留用户名并删除数字ID吗?我应该以某种方式使它们都独一无二吗?你推荐什么?
也许还应该提一下使用hibernate。
答案 0 :(得分:5)
通常,您会在用户名上添加“唯一约束”。不严格需要自动增量ID,但通常的做法是不使用“自然键”。请参阅此相关问题:Native primary key or auto generated one?。
答案 1 :(得分:2)
要保持用户名唯一,您只需:
ALTER TABLE Users
ADD CONSTRAINT constraint_name UNIQUE (username);
无需更改主键。拥有id
主键很有用。它允许您更改用户名,而无需在链接表上使用UPDATE
。
UPDATE/INSERT/DELETE
吨。在这种情况下,2个索引与1个索引的开销可能很明显。
答案 2 :(得分:1)
这取决于您的应用程序的使用方式。如果用户名可以更改,我建议使用ID作为主键 - 您可以随时在代码中添加一些检查,以确保用户名在创建时是唯一的。
通常的做法是在从数据库访问数据时使用ID(主键),因为如果您要使用其他任何内容,可能会引入难以调试的意外行为。
答案 3 :(得分:1)
用户名是否可以更改?如果没有,您可以将其用作主键。这将是一个自然的关键,因此,在我看来,比你正在使用的代理键更好。
如果用户名可能会改变,那么它就不适合用作主键。
由于您无法了解将来可能出现的所有情况,我怀疑您不能排除用户名可能需要更改的可能性。因此,代理键是面向未来的选择。
即使它不是主键,对用户名也有一个唯一约束是完全没问题的。你很可能也想要一个非空约束。