我有一个用户表,其中包含注册用户的数据,每行代表一个用户。特别是一列应该包含用户所属的组列表,此时该列是TEXT类型,并且我将该列表存储为字符串,其中组用分号分隔,如:
admin;moderators;devteam
我想知道:"这是一个好主意吗?",是否有更好/更安全的方法来做到这一点,不需要付出很多努力来实现,或者这是& #34; OK&#34 ;?
这是现在的表格的照片:
答案 0 :(得分:7)
我想知道:“这是个好主意吗?”
简短回答:可能不是。
<强>为什么强>
如果你需要对该专栏进行任何操作,你会发现自己遇到了大麻烦。简单地选择组中的所有用户将需要对字符串进行一些操作(通常不是性能友好的)。同样适用于排序,连接和SQL非常适合的所有其他操作。
<强>解决方案强>
您所描述的是N:N关系的典型示例,其中每个用户可以属于多个组,每个组可以包含多个用户。
建立此关系的“标准”方法是创建一个新表,其中每一行代表属于一个组的用户。列将是group和userID。
使用您示例中的数据
userID | group
--------|----------
1 | admin
1 | moderator
1 | test
这允许users
表中的每个用户拥有一行,并且获取特定用户的组就像
select group
from user_groups
where userID = '1'