我想用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 ??)
两个单独的表,一个表包含单个用户,另一个包含已分配的组: usertask_table(2个共享主键)&& usergroup_table
taskid userid
1 1
1 1
taskid groupid
1 1
2 1
具有userid 0或groupid 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
我不知道哪种解决方案能给我最优化的设计。我想在一些其他表中扩展此应用程序,同样需要分配用户和组权限。现在我正在考虑第3种解决方案......
我感谢大家的帮助!
问候,罗恩
答案 0 :(得分:0)
解决方案1:好的但后来会创建冗余表格,在我看来这不仅是不必要的,而且每次你想要获得所有分配的任务时都需要你查询2个不同的表格。
解决方案2:对我毫无意义..因为您要确定某个任务是否已分配给组或用户,您必须检查每列中的值,其中一列具有任务ID为0,然后检查另一列中的任务ID。发动机不必要的负荷。
解决方案3:对我来说很完美 - 您只需要知道类型列中的内容即可确定。另外,在解决方案1的情况下,您可以避免使用多个表的缺点。
为了进一步改进解决方案3,你可以使用数字或布尔来区分不同的类型(例如,如果是1,那么它是组,如果是2那么它的个体),只是为了减少由数据库的表/列生成的字符