2

我想用 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

任务表

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

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

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

4

1 回答 1

0

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

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

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

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

于 2018-06-13T18:15:00.867 回答