在MySql列中存储字符串列表

Eli*_*oni 2 sql database arrays database-design list

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

admin;moderators;devteam  
Run Code Online (Sandbox Code Playgroud)

而且我想知道:"这是一个好主意吗?",有没有更好/更安全的方法来做这个,不需要付出很多努力来实现,或者这是"好"吗?
这是现在的表格的照片: 用户表

Ste*_*ini 8

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

简短回答:可能不是.

为什么

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

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

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

使用您示例中的数据

userID  | group
--------|----------
     1  | admin
     1  | moderator
     1  | test
Run Code Online (Sandbox Code Playgroud)

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

select  group
from    user_groups
where   userID = '1'
Run Code Online (Sandbox Code Playgroud)