【问题标题】:Assign task to users and user groups将任务分配给用户和用户组
【发布时间】:2016-10-06 13:53:17
【问题描述】:

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

userid  name
1       Peter
2       Hans

用户组表

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 种方法来将用户和用户组分配给任务。但我无法选择哪个最好(标准化??)

解决方案 1

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

taskid  userid
1       1
1       1

taskid  groupid
1       1
2       1

解决方案 2

用户标识为 0 或组标识为 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

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

【问题讨论】:

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


    【解决方案1】:

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

    解决方案 2:对我来说根本没有意义。因为要确定任务是分配给组还是用户,您必须检查每一列中的值,其中一列具有任务 ID 0,然后您检查另一列中的任务 ID。对您的引擎造成不必要的负载。

    解决方案 3:对我来说是完美的 - 您只需要知道类型列中的内容即可确定。您还可以避免像解决方案 1 那样拥有许多表的缺点。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      相关资源
      最近更新 更多