【问题标题】:How to store multiple values of user in mysql database?如何在mysql数据库中存储多个用户值?
【发布时间】:2016-03-21 14:21:06
【问题描述】:

我有如下表。

我想存储 admin、reader、writer

等用户角色

如何将值存储在我的表中。

我在 google 中搜索了很多结果,例如 2 种类型。

  1. 将值作为 user_roles 存储到单个列名,并以竖线 (|) 分隔存储值(同上)。
  2. 将值存储在另一个表中,例如 user_roles,并使用用户的外键存储。

以上两种方法哪个更适合开发?

请告诉我两者的优缺点...

感谢和问候

【问题讨论】:

  • 第二个选项 - 第一个选项使查询单个字段变得更加困难,例如,如果您想显示角色为writer的所有用户的列表
  • “数据库规范化”的快速谷歌搜索将是有益的
  • 这真的取决于您要制作多大的系统,最聪明的方法是拥有一个单独的权限表,但如果您的系统只是一个小系统并且不会扩展就这么多,然后把它保存在同一个表中。
  • @uruloke 小项目变大,相反的情况很少发生
  • @Steve,但是数据库的大小是因为这个而变大的吗?

标签: php mysql database database-design


【解决方案1】:

如果您的用户拥有多个用户角色,那么它肯定会定义为one to many 关系。

因此,仅使用用户 ID 添加带有排列的表是最佳选择。 Cz 一个用户可以拥有多个用户角色。


这种组合永远不会发生(一对一)

user A - admin
User B - writer
User C - reader

可能是(一对多)或(多对一)

User A- Admin + reader
User B - reader + writer
user C - Admin + reader + writer
user D - Admin + writer
.....

以及阅读这些

  1. One to Many and Many to One Relationships - code.tutsplus.com
  2. One-to-many relationship - www.databaseprimer.com/
  3. Database Normalization

【讨论】:

  • 我想要选择一对多关系而不是第一个关系的原因。你能告诉我吗..:)
  • 阿卜杜拉,你没有给出合理的技术理由。如果需要,您可以将一对多的数据保存在文本文件中。他不是在问如何保存数据。他在问什么是最佳实践以及为什么。您只是在说:“可以保存数据”
  • @Drew 对不起,我没找到你
  • @JishadP 我的回答有帮助吗??如果有帮助,请接受 + 投票给我
【解决方案2】:

你想要第二个选择的原因主要包括

  • 数据规范化健全性
  • 快速使用索引而不是表扫描
  • 避免像find_in_set() 这样的编码噩梦

参见Junction Tables 或关联表(更简化)

在没有它的情况下查看Nightmare Coding(并且性能会随着所有人起床而变慢)。

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多