应用程序特定的MySQL表结构

时间:2013-10-02 07:34:49

标签: mysql database database-design

我对我的数据库表结构有疑问。我想知道我是否走在正确的轨道上,或者我是否错过了一个好的选择。情况就是这样:

为了便于阅读,我没有粘贴全部内容,因为我的问题只是关于结构。

2张表:

1:id(AI),任务
2:id,name,task

表1显示了可由管理面板更改的动态复选框,因此内容将类似于此

1 task1
2任务2
5任务5

(缺少3& 4导致管理员删除了这些记录)。

表二中的人员应该从表1中完成任务。目标是显示未检查的任务。

所以表2的内容是:

1 Name1 1,5
2名称2 1,2
3 Name3 1,2,5

表2中的数字代表表1中的复选框。因此,通过查询,我可以将表2中的数字与表1中的id进行比较,并将缺少的ID显示为“todo”。

在我看来,这看起来非常过分,必须有一种更简单的方法来创建动态选项,可以比较和存储为待办事项。

欢迎提出建议!

1 个答案:

答案 0 :(得分:0)

我建议你使用多对多关系的基本结构:

tasks                users            user_tasks
+----+-----------+   +----+-------+   +---------+---------+
| id | name      |   | id | name  |   | user_id | task_id |
+----+-----------+   +----+-------+   +---------+---------+
|  1 | Buy milk  |   |  1 | John  |   |       1 |       2 |
|  2 | Get drunk |   |  2 | Tim   |   |       3 |       2 |
|  3 | Have fun  |   |  3 | Steve |   |       2 |       4 |
|  4 | Go home   |   +----+-------+   |       3 |       4 |
+----+-----------+                    +---------+---------+

您可以使用以下查询获取未分配的任务:

SELECT
    tasks.*
FROM
    tasks
LEFT JOIN
    user_tasks
    ON (tasks.id = user_tasks.task_id)
WHERE
    user_tasks.user_id IS NULL

您还可以获取没有分配任务的用户:

SELECT
    users.*
FROM
    users
LEFT JOIN
    user_tasks
    ON (users.id = user_tasks.user_id)
WHERE
    user_tasks.user_id IS NULL 

希望这会对你有所帮助。