设计我的 mysql 表的最佳方法是啥?我需要用偏好图代表用户

Posted

技术标签:

【中文标题】设计我的 mysql 表的最佳方法是啥?我需要用偏好图代表用户【英文标题】:What is the best way to design my mysql tables? I need to represent a user with a map of preferences设计我的 mysql 表的最佳方法是什么?我需要用偏好图代表用户 【发布时间】:2019-12-10 11:52:16 【问题描述】:

我正在创建一个 Web 应用程序,它允许管理员跟踪用户并修改他们的信息和访问权限。需要表示的关于用户的大部分信息都很简单(姓名、电子邮件、工作 ID 等),但我无法表示用户对我们系统中应用程序的访问权限。

有些应用程序是用户可以访问或不可以访问的。应用程序列表正在增长,因此我不想硬编码对应用程序“x”的访问,因为 xAccess 是一个布尔值。我目前有一个地图,其中字符串是应用程序的名称,布尔值是用户的访问权限。

我不知道如何在 mysql 表中表示它。我应该如何存储这些数据?这是跟踪这些数据的最佳方式吗?我愿意接受任何想法。

我正在创建一个 Web 应用程序,并且我硬编码了一个带有数据的 typescript 类,这样我就可以在前端工作而不必担心保存数据。我目前有这个打字稿类:

export class UserModel 
  userId: number;
  windowsId: string;
  fullName: string;
  role: number;
  roleName: string;
  appAccess: Map<string, boolean>;

appAccess 是我目前尝试表示这些数据,但我不知道将它存储在 MySQL 表中的好方法。

【问题讨论】:

对于基于角色的权限来说,这似乎是一个很好的用例。在最基本的情况下,您将拥有具有角色的用户,并且这些角色将具有权限(例如,访问应用程序)。所以你会有一个用户表、角色表和一个权限表;然后是 user_role 表和 role_permission 表来维护这三个对象之间的映射。 Kind of like this answer outlines 【参考方案1】:

您可能需要三个表:

用户:user_id、user_name、user_status

应用程序:app_id、app_name

user_applications:ua_id、user_id、app_id

因此,如果用户有权访问应用程序,那么 user_applications 表中需要有一条记录,其中包含用户的 user_id 和相关应用程序的 app_id。

【讨论】:

以上是关于设计我的 mysql 表的最佳方法是啥?我需要用偏好图代表用户的主要内容,如果未能解决你的问题,请参考以下文章

阻止人们破解基于 PHP 的 Flash 游戏高分表的最佳方法是啥

第一次将数据从其他来源插入应用程序表的最佳方法是啥?

创建聚合表的最佳方法是啥?

MySql 发布档案。处理需要保留的大量存档帖子的最佳方法是啥?

更新闭包表的最佳方法是啥?

Oracle SQL:选择超大表的子集的最佳方法是啥