实施用户名唯一性
如果要对存储在用户名列中的值强制实施唯一性,并且还将user_id列设置为相关表的PRIMARY KEY(PK),则可能对执行
用于用户名列.
这种情况意味着,在逻辑层面,用户名将是ALTERNATE KEY(AK). AK是列或列的组合,其包含唯一标识certan行但未被选择为相关表的PK的值;每个表可以有零个,一个或多个AK.如上所述,它们通常通过UNIQUE约束在SQL DDL结构中定义,该约束在物理级别由UNIQUE索引提供.
逻辑和物理层面
因为在构建关系数据库时(区别于所选平台)区分逻辑和物理方面是至关重要的,您可能会发现帮助this answer中包含的概念和链接.
显示警告
如果要向尝试输入已经使用的用户名值的人显示消息,则应在可以访问数据库的应用程序代码中开发此类功能.
设置列的长度
如果您不想允许长度大于18个字符的用户名值,那么您可能希望相应地定义列大小,即VARCHAR(18),因此您可以从MYSQL参考手册中找到以下内容的值关于
从中我将突出以下段落:
The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.
前缀和全文索引
@Ypercube丰富了this answer,回答了有关某些类型索引的个别问题:
Can I use Prefix index?
从技术上讲,你可以,但没有理由.前缀索引很少 – 或从不 – 在MySQL中有用.如果要将用户名的长度限制为18,则列应为VARCHAR(18)而不是(50).如果在用户名中只允许使用ASCII字符,则该列应具有ascii字符集而不是UTF-8.即使你保留VARCHAR(50),索引仍然应该在整个列中,而不是前缀.
What about a Full Text index?
不,你也不需要它们.全文索引适用于想要在大文本中搜索单词或短语的情况.对你的情况没用.一个简单的(唯一的)B树索引是最好的.