首页 > 解决方案 > 表格行或列

问题描述

我有一个项目需要我设置自定义权限,分为三个类别“管理员、经理、用户”我的常规方法是将权限分配在一个表中作为标题,然后为每个类别添加一个原始的 0 或 1 以激活或停用组的权限,如下所示:

id|name|can_do_this|can_do_that
1|admin|1|1
2|manager|1|0
3|user|0|0

但是我的教授要求每个用户单独添加每个权限,而不是每个组,如下所示:

id|user_id|privilege|active
1,1,can_do_this,1
2,1,can_do_that,1
3,2,can_do_this,1
4,2,can_do_that,0

我的问题,为了我的理智..哪个更有效?他的观点是,如果我们需要添加新权限,我们将不需要 ALTER 表来添加新列。希望这个问题有意义。

标签: mysqlsql

解决方案


对我来说,这是一个非常简单的数据建模问题。您的数据模型中有两个“实体”:

  • 用户
  • 特权

这表明每个人都应该有自己的桌子。

因为这是一个多对多的关系(很多用户可以有一个给定的权限,一个用户可以有很多权限),第三张表通常用于表达这种关系;这通常称为“联结表”或“关联表”。

您的教授给出了以行而不是列来表示值的一个很好的理由:添加新权限的能力。

我可以再补充几个:

  • userPrivileges表可以有一个createdOn列,以便您知道权限何时生效。
  • userPrivileges可以有一个列,因此createdBy您知道谁授予了特权。
  • userPrivileges表可以有一个suspended列,因此您可以暂时挂起特权。

推荐阅读