将任务分配给用户和用户组

时间:2016-06-06 20:19:49

标签: mysql user-permissions access-rights taskscheduler pyp

我想用MYSQL和PHP构建一个小任务应用程序。我想将任务分配给单个用户和多个用户组。我想要有一个user_table:

userid  name
1       Peter
2       Hans

usergroup_table

usergroup_id name
1            Usergroup 1
2            Usergroup 2

usergroupmap_table(2个共享主键)

usergroup_id userid
1            1
1            2

tasks_table

taskid  taskname            due_date
1       Finish my exams     10-06-2016
2       Another task 2 do   15-06-2016

从这很容易。现在我可以想出如何将用户和用户组分配给任务的3种方法。但我不能选择哪一个最好(Normalization ??)

解决方案1 ​​

两个单独的表,一个表包含单个用户,另一个包含已分配的组: usertask_table(2个共享主键)&& usergroup_table

taskid  userid
1       1
1       1

taskid  groupid
1       1
2       1

解决方案2

具有userid 0或groupid 0的组合表:

taskid  groupid  userid
1       1        0
2       1        0
2       0        1
2       0        2

解决方案3

包含所有已分配任务的组合表,但使用varchar定义选择了哪个组

taskid  type  id
1       group 1
1       group 2
2       user  1      
2       user  2

我不知道哪种解决方案能给我最优化的设计。我想在一些其他表中扩展此应用程序,同样需要分配用户和组权限。现在我正在考虑第3种解决方案......

我感谢大家的帮助!

问候,罗恩

1 个答案:

答案 0 :(得分:0)

解决方案1:好的但后来会创建冗余表格,在我看来这不仅是不必要的,而且每次你​​想要获得所有分配的任务时都需要你查询2个不同的表格。

解决方案2:对我毫无意义..因为您要确定某个任务是否已分配给组或用户,您必须检查每列中的值,其中一列具有任务ID为0,然后检查另一列中的任务ID。发动机不必要的负荷。

解决方案3:对我来说很完美 - 您只需要知道类型列中的内容即可确定。另外,在解决方案1的情况下,您可以避免使用多个表的缺点。

为了进一步改进解决方案3,你可以使用数字或布尔来区分不同的类型(例如,如果是1,那么它是组,如果是2那么它的个体),只是为了减少由数据库的表/列生成的字符