对如何为清单应用程序设计我的数据库感到困惑

Confused on how to design my database for a checklist app

我有一个清单应用程序,我正在尝试为其设计数据库。

清单由一堆选项卡(清单的部分)组成,每个选项卡都有多个 checklist_items。可以开始和完成清单。完成后,用户可以随后创建新的清单。我正在尝试设计数据库,但让我感到困惑的是如何设计它以便我可以查询类似的内容:

在创建的所有清单中,"Household" 选项卡上有多少项目被勾选了?

我有一个初步设计:

当我创建第一个清单时,我的选项卡 table 将如下所示:

tab_id, checklist_id, name
1,      1,            "Household"
2,      1,            "Outdoors"
3,      1,            "Work"
4,      1,            "School"

我的 checklist_item 选项卡将如下所示:

   checklist_item_id, checklist_id, tab_id, checked
   1,                 1,            1,      0
   2,                 1,            1,      0
   3,                 1,            1,      0
   4,                 1,            2,      0
   5,                 1,            2,      0
   6,                 1,            2,      0
   7,                 1,            3,      0
   8,                 1,            3,      0
   9,                 1,            3,      0
   10,                1,            4,      0
   11,                1,            4,      0
   12,                1,            4,      0

checklist项只知道tab_id,当有多个checklist时,就不是说select from checklist_item where tab_id = 1那么简单了,因为Household的tab条目会多,怎么可能我想出了类似上面的查询?另外,到目前为止我的设计是不是很糟糕?有没有更好的方法来解决这个问题?

编辑:值得一提的是我是数据库设计新手

你的桌子很好。您仍然可以使用您的查询 SELECT * FROM checklist_item WHERE tab_id = 1,因为 tab_id 唯一确定 checklist_id(即每个选项卡属于一个特定的清单),因此不同清单的家庭条目之间不会有任何混淆(每个都有自己的tab_id)。

如果您想获得所有清单中的家居用品,请加入 checklist_item 标签,如下所示:

SELECT i.*
FROM checklist_item i
INNER JOIN tab t ON i.tab_id = t.tab_id
WHERE t.name = 'Household'

嗯,我用 http://www.w3schools.com/sql/sql_join.asp

学的

我认为您在查询中遗漏了连接。

SELECT CI.checklist_item_id, CIchecked, T.checklist_ID, T.name, C.time_started, C.time_ended
FROM checklist_item CI 
LEFT JOIN tab T ON CI.tab_id = T.tab_id 
LEFT JOIN checklist C ON CI.checklist_id = C.checklist_id
WHERE tab_id = 1