Database 创建用户名,即使用户名是唯一的?
我的web应用程序将有各种类型的用户:根用户、系统管理员、客户、承包商等。我希望有一个表“user”,其中包含“Username”、“Password”和“Role”列,其中Role是上述角色之一。例如,我还将有一个名为“Customer”的表,用于存储特定于客户的属性 这是我的问题。因为所有用户名都是唯一的,所以我可以使用用户名作为用户表的主键。但是,创建一个“用户ID”列并使用它而不是用户名列作为PK是否更有意义?还有许多其他表将使用此用户PK作为外键,我认为,从性能角度来看,比较用户ID比比较用户名文本字符串更快Database 创建用户名,即使用户名是唯一的?,database,database-design,Database,Database Design,我的web应用程序将有各种类型的用户:根用户、系统管理员、客户、承包商等。我希望有一个表“user”,其中包含“Username”、“Password”和“Role”列,其中Role是上述角色之一。例如,我还将有一个名为“Customer”的表,用于存储特定于客户的属性 这是我的问题。因为所有用户名都是唯一的,所以我可以使用用户名作为用户表的主键。但是,创建一个“用户ID”列并使用它而不是用户名列作为PK是否更有意义?还有许多其他表将使用此用户PK作为外键,我认为,从性能角度来看,比较用户ID比
感谢您的回复。我会创建用户名,因为虽然用户名可能是唯一的,但它们通常不是不可更改的,而且我不希望更改数千或数百万条记录,因为HLGEM希望成为HLGEM_1。整数上的进一步连接速度更快 有两个学派。数据库纯粹主义者认为,应该尽可能使用自然键(这是有道理的)。因此,如果您同意这一思路,并且用户名是不可更改的,那么将密钥设置为用户名
数据库实用主义者认为代理键更有用,而且更能适应需求的变化。在某些情况下,它们也可以更快,特别是对于大字符串键。还有安全问题,使用自然密钥可能会泄漏代理密钥无法提供的信息。这是旧的自然密钥与代理密钥之争 简言之,任何事情都不是一成不变的,你需要在相互竞争的利益之间取得平衡:
…因此,在这种情况下,代理密钥可能是合理的。尽管不言而喻,但无论您最终选择什么,都不要将密码存储在明文中。谢谢,布兰科。你提出了一些我没有考虑过的有趣的观点。我决定按照你和HLGEM的建议使用代理密钥。