我想用 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 种如何将用户和用户组分配给任务的方法。但我无法选择哪一个最好(标准化??)
两个单独的表,一个表包含单个用户,另一个表包含指定的组: usertask_table(2个共享主键)&& usergroup_table
taskid userid
1 1
1 1
taskid groupid
1 1
2 1
用户 ID 0 或组 ID 0 的组合表:
taskid groupid userid
1 1 0
2 1 0
2 0 1
2 0 2
包含所有已分配任务的组合表,但使用 varchar 来定义选择哪个组
taskid type id
1 group 1
1 group 2
2 user 1
2 user 2
我不知道哪种解决方案可以为我提供最佳的设计。我还想使用其他一些表来扩展此应用程序,其中需要以相同的方式分配用户和组权限。现在我正在考虑第三种解决方案...
解决方案 1:很好,但会创建冗余表,在我看来,这不仅是不必要的,而且还需要您每次想要获取所有分配的任务时查询 2 个不同的表。
解决方案 2:对我来说完全没有意义。要确定任务是否分配给组或用户,您必须检查每一列中的值,其中一列的任务 ID 为 0 ,然后检查另一列中的任务 ID。发动机上不必要的负载。
解决方案 3:对我来说是完美的 - 您只需要知道类型列中的内容即可确定。您还可以避免解决方案 1 中那样拥有多个表的缺点。
为了进一步改进解决方案3,您可以使用数字或布尔值来区分类型(例如,如果为1,则为一组,如果为2,则为单独的),只是为了减少数据库的表/列生成的字符