我有一个项目需要设置自定义权限,分为三类“管理员、经理、用户” 我的常规方法是将权限作为标题分布在一个表中,然后为每个类别添加一个 raw 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
我的问题,为了我的理智..哪个更有效率?他的观点是,如果我们需要添加新权限,我们将不需要更改表来添加新列。 希望这个问题是有道理的。
最佳答案
对我来说,这是一个非常简单的数据建模问题。您的数据模型中有两个“实体”:
- 用户
- 特权
这表明每个人都应该有自己的 table 。
因为这是一个多对多的关系(多个用户可以有给定的权限,一个用户可以有很多权限),所以通常使用第三个表来表达这种关系;这通常称为“连接表”或“关联表”。
您的教授给出了一个以行而不是列来表示值的很好的理由:添加新权限的能力。
我可以再补充几个:
userPrivileges
表可以有一个createdOn
列,以便您知道权限何时生效。userPrivileges
可以有一个createdBy
列,因此您知道谁授予了权限。userPrivileges
表可以有一个suspended
列,因此您可以暂时暂停权限。
关于mysql - 表格行或列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50554287/