我知道代理主键通常推荐使用自然主键,但是在用户名方面有没有任何支持代理主键的参数?用户名是主键的有效候选者吗?
回答
如果您不想获取重复的用户名,请创建一个UNIQUE constraint
。
如果DWong1145
想要更改它的用户名呢?你会使所有的数据库关系为UPDATE CASCADE
?
从客户的角度来看,你打赌。我不希望我的用户名是DWong1145。
否,您应该使用用户名只作为唯一键/常量。用户名可以更改,只是举例而已:它可能是商标,所有者请求您放弃它。
听起来有点简洁;)你*是*权利虽然。我讨厌你不能更改你的用户名的系统 - 但是,OP在评论中说他不希望它被改变,所以... – 2010-01-27 15:12:52
这是一个很好的候选人,但是你必须考虑你是否真的想要这样做。例如,您有一个具有某个用户名的用户,则用户将被“删除”(或标记为已删除)。因此,实际上没有理由不允许使用相同的用户名创建另一个用户,但由于它是主键,因此它已被“取用”。
将字符串作为主键的一个很大的缺点是,无论是用户名还是其他名称,所有引用表的外键列也必须是字符串,这样既慢又浪费更多空间。
它不一定要慢。好的数据库引擎可以预先散列任何字符串值。最重要的是,使用自然键可能会消除对应用程序中的许多连接的需求,从而加快查询速度。我承认,自然钥匙通常会消耗更多的空间,但诚实地说,空间便宜而丰富。 – 2010-07-28 08:40:55
- 1. 候选键和主键是什么?
- 2. 对主键使用现有的候选键或新的组合键
- 3. 所有候选键都是超级键,而所有超级键都不是候选键。为什么?
- 4. 引用表中没有与引用列相匹配的主键或候选键
- 5. 不包含与引用匹配的主键或候选键
- 6. 不能创建外键“有被引用表中没有主或候选键”
- 7. 主键,唯一键和候选键之间的区别
- 8. 有状态的DLL是状态模式的良好候选者吗?
- 9. 是`column`有效的mysql列名吗?
- 10. 我可以拥有比列更多的候选键吗?
- 11. 主键和候选键之间的区别
- 12. 如果我有多个候选键,哪一个是主键并证明您的选择正确?
- 13. LINQ是一个有效的选项吗?
- 14. 是否保证主机名是有效的Windows目录名?
- 15. 查找关系的所有候选键
- 16. 候选键或超级键
- 17. Joomla!用户名问候
- 18. 使用没有主键的主键选择语句
- 19. 阻止grails不是一个有效的候选人
- 20. 这是一个候选关键?
- 21. 指定候选键Grails的?
- 22. 候选键有什么意义?
- 23. @符号在Unix用户名中有效吗?
- 24. “MUL”是可接受的“主键”吗?
- 25. '用户'是HTTP授权标头的有效方案吗?
- 26. 候选键约束12.1
- 27. 候选关键字/缩小
- 28. 如何找到候选键?
- 29. 这是有效的JSON吗?
- 30. 这是有效的XML吗?
我的问题是在一个认证系统的背景下,不会允许用户名更改。我应该提到这一点。 – 2010-01-27 09:03:10
@Emanuil - 引用侏罗纪公园的Jeff Goldblum的话说,“人生找到一条路。”如果您有一天需要更改用户名,现在您可能会后悔此刻...... – 2010-01-27 09:23:19
“'信息'不能用作密钥;'数据'可能”; '数据'不需要改变,就像程序一定要理解一样。如果我打电话给SO并要求更改我的用户_id_会怎么样?我不能这样做,但我可以更改我的用户_名称。 – 2010-01-27 09:30:39