一个人有一个名字和多个别名。一个人可以按名字和别名编制索引。所以我设计了两个表来存储这种关系:和。像这样:
<user table>
|user_id | int
|name | varchar
<alias table>
|user_id | int
|alias | varchar
两个表由用户\ id连接。因此一个用户可以设置多个别名并可以按别名索引。但现在我们需要添加唯一约束。如果用户名和每个别名相同,则视为重复!因此,我认为使用一个如下表存储:
<user table>
|user_id | int
|name | varchar
|sorted_alias_str | varchar
ps: sorted_alias_str store each alias which join by comma. like: 'name1,name2'
具有唯一约束(名称、排序的\u别名\u str)
但用户别名的数量受“sorted\u alias\u str”长度的限制。你知道吗
有没有更好的办法?你知道吗
唯一约束应该在(user\u id,name)上。这样可以防止一个人(用户id)多次使用同一别名。你知道吗
我同意使用唯一约束,但它应该是
UNIQUE CONSTRAINT (user_id, alias)
表上的alias
。但我对sorted_alias_str
感到失望。此列的维护将很麻烦,因为每次用户添加或删除别名时都必须重新计算它。相反,您可以使用GROUP_CONCAT
为每个用户获取别名的CSV列表,例如你已经给了一个用户多个别名。复合唯一约束可确保一个用户不会多次使用同一别名。你知道吗
每个唯一约束也是一个索引。你知道吗
对于更多的结构,可以将所有已知别名放在一个表中。你知道吗
最后,如果您承认一个名称只是一个特别标识的别名,您可以添加更多的结构:
相关问题 更多 >
编程相关推荐