Mysql 表行或列
我有一个项目,需要我设置自定义权限,分为三类“管理员、经理、用户” 我的常规方法是在一个表中以标题形式分发权限,然后为每个类别添加一个0或1的原始权限,以激活或停用组的权限,如下所示:Mysql 表行或列,mysql,sql,Mysql,Sql,我有一个项目,需要我设置自定义权限,分为三类“管理员、经理、用户” 我的常规方法是在一个表中以标题形式分发权限,然后为每个类别添加一个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,c
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
但是,我的教授要求每个用户单独添加每个权限,每个组不添加,如下所示:
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
我的问题,为了我的理智。。哪个更有效?他的观点是,如果我们需要添加一个新的特权,我们不需要修改表来添加一个新的列。
希望这个问题有意义。对我来说,这是一个非常简单的数据建模问题。数据模型中有两个“实体”:
- 使用者
- 特权
表可以有一个userPrivileges
列,以便您知道特权何时生效createdOn
可以有一个userPrivileges
列,这样您就知道是谁授予了特权createdBy
表可以有一个userPrivileges
列,因此您可以临时挂起特权suspended
- 使用者
- 特权
表可以有一个userPrivileges
列,以便您知道特权何时生效createdOn
可以有一个userPrivileges
列,这样您就知道是谁授予了特权createdBy
表可以有一个userPrivileges
列,因此您可以临时挂起特权suspended
对我来说,这是一个非常简单的数据建模问题。数据模型中有两个“实体”:
- 我建议你选第二个,因为就像你老师说的那样,你不需要改变桌子。更改表意味着为表中的每个成员添加一个新的1或0(可以使用默认值,但仍需要更改需要该权限的用户的值)
你的老师说你可以拥有另一个拥有所有特权的表,并使用外键
通过这种方式,您可以添加一个新的特权,并使用默认值“1”将其分配给他们需要的用户,如果您需要撤销该特权,则将其更改为“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
我建议你选第二个,因为就像你老师说的那样,你不需要改变桌子。更改表意味着为表中的每个成员添加一个新的1或0(可以使用默认值,但仍需要更改需要该权限的用户的值) 你的老师说你可以拥有另一个拥有所有特权的表,并使用外键 通过这种方式,您可以添加一个新的特权,并使用默认值“1”将其分配给他们需要的用户,如果您需要撤销该特权,则将其更改为“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
根据我的经验,如果你不想每次在应用程序中需要更新新权限时都添加额外的列。然后选择第二个选项 好处: 选项1:组将没有冗余数据,并且可以轻松管理,因为您可以对组名应用唯一约束,因此不需要每次插入 选项2:您不需要添加alter表,您只需验证新权限是否已存在,如果不存在,则只需添加新的insert或更新现有权限即可 不利条件: 选项1:每当新权限出现时,您都需要更改表
选项2:每当您要为组添加新权限时,首先必须确定记录是否已存在,然后必须插入到表中。与第一个选项相比,验证该选项也有点复杂 因此,两者都有其优点和缺点。如果您从数据冗余的角度考虑,那么选择选项1,否则选择选项2 据我所知,我更愿意使用选项1,我将要做的只是维护一个额外的表,该表标识它们之间的权限和物理列,并且我将使其通用
好的 根据我的经验,如果你不想每次在应用程序中需要更新新权限时都添加额外的列。然后选择第二个选项 好处: 选项1:组将没有冗余数据,并且可以轻松管理,因为您可以对组名应用唯一约束,因此不需要每次插入 选项2:您不需要添加alter表格,您只需验证新权限是否已存在,如果不存在,则只需添加新的insert或更新existin即可