0

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

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

2张桌子:

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

表 1 显示了可以由管理面板更改的动态复选框,因此内容将如下所示

1个任务 1
2 个任务 2
5 个任务 5

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

在表二中是应该执行表 1 中的任务的人。目标是显示未选中的任务。

所以表 2 的内容为:

1 名称1 1,5
2 名称2 1,2 3 名称
3 1,2,5

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

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

欢迎提出建议!

4

1 回答 1

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 

希望这会帮助你。

于 2013-10-02T09:15:48.797 回答