mysql – 如何在使用较少内存的单列中存储多个值?

前端之家收集整理的这篇文章主要介绍了mysql – 如何在使用较少内存的单列中存储多个值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个用户表,其中1列存储用户的“角色”.
我们可以为特定用户分配多个角色.@H_301_3@

然后我想在“角色”列中存储角色ID.@H_301_3@

但是,如何将多个值存储到单个列中以便以易于使用的方式保存内存?例如,使用逗号分隔字段存储并不容易并且使用内存.@H_301_3@

有任何想法吗?@H_301_3@

最佳答案
如果用户可以拥有多个角色,那么拥有存储此信息的user_role表可能会更好.它被规范化,并且查询起来会容易得多.@H_301_3@

像这样的表:@H_301_3@

@H_301_3@

user_id | role
--------+-----------------
      1 | Admin
      2 | User
      2 | Admin
      3 | User
      3 | Author

将允许您查询具有特定角色的所有用户,例如SELECT user_id,user.name FROM user_role JOIN user WHERE role =’Admin’,而不必使用字符串解析从列中获取详细信息.@H_301_3@

除此之外,这将更快,因为您可以正确地索引列,并且比任何将多个值放入单个列的解决方案所占用的空间略大 – 这与关系数据库的设计是相对立的.@H_301_3@

不应该存储它的原因是它效率低,因为DCoder在comment to this answer上声明.要检查用户是否有角色,需要扫描用户表的每一行,然后是“角色”必须使用字符串匹配扫描列 – 无论此操作如何公开,RMDBS都需要执行字符串操作来解析内容.这些是非常昂贵的操作,并没有完善的数据库设计.@H_301_3@

如果您需要一个专栏,我强烈建议您不再遇到技术问题,而是人员管理问题.将其他表添加到正在开发的现有数据库中应该不难.如果这不是您有权做的事情,请向合适的人解释为什么需要额外的表 – 因为munging将多个值组合到一个列中是个坏主意.

原文链接:https://www.f2er.com/mysql/434022.html

猜你在找的MySQL相关文章