在MySql列中存储字符串列表

时间:2017-03-23 15:46:25

标签: sql arrays database list database-design

我有一个用户表,其中包含注册用户的数据,每行代表一个用户。特别是一列应该包含用户所属的组列表,此时该列是TEXT类型,并且我将该列表存储为字符串,其中组用分号分隔,如:

admin;moderators;devteam  

我想知道:"这是一个好主意吗?",是否有更好/更安全的方法来做到这一点,不需要付出很多努力来实现,或者这是& #34; OK&#34 ;?
这是现在的表格的照片: users table

1 个答案:

答案 0 :(得分:7)

  

我想知道:“这是个好主意吗?”

简短回答:可能不是

<强>为什么

如果你需要对该专栏进行任何操作,你会发现自己遇到了大麻烦。简单地选择组中的所有用户将需要对字符串进行一些操作(通常不是性能友好的)。同样适用于排序,连接和SQL非常适合的所有其他操作。

<强>解决方案

您所描述的是N:N关系的典型示例,其中每个用户可以属于多个组,每个组可以包含多个用户。

建立此关系的“标​​准”方法是创建一个新表,其中每一行代表属于一个组的用户。列将是group和userID。

使用您示例中的数据

userID  | group
--------|----------
     1  | admin
     1  | moderator
     1  | test

这允许users表中的每个用户拥有一行,并且获取特定用户的组就像

一样简单
select  group
from    user_groups
where   userID = '1'