对如何为清单应用程序设计我的数据库感到困惑
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
我有一个清单应用程序,我正在尝试为其设计数据库。
清单由一堆选项卡(清单的部分)组成,每个选项卡都有多个 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