2017-07-27 62 views
-3

我一直在绞尽脑汁,但仍然想不到一个解决方案。在MySQL中存储清单结果

我正在创建清单Web应用程序的数据库。基本上,创建一个清单并用“完成”或“不完整”选项来完成,然后生成一份报告,显示哪些项目未完成。

目前,有一个“清单”表由多个“清单项目”组成。检查表的结果(无论是完整的还是不完整的)将被存储在名为“报告”的表格中,但这是我需要帮助的地方。这是因为我需要存储他们是否被标记为完整且未完成,并且每个检查列表具有不同的长度。

一个可能的解决方案是简单地存储每个'Checklist Item'的唯一ID,该ID不在可以存储在'Report'中的字符串中工作,每个ID都用逗号分隔。然后可以使用PHP的“爆炸”功能提取每个ID,这可能会起作用。不过,我不认为这是最优雅的解决方案,所以任何帮助更好的解决方案将不胜感激。

编辑(重要):检查清单每天完成,报告打算长期保存。因此,向每个项目添加“报告”字段将不起作用。

+0

为什么每个清单项目在“报告”中都没有单独的行?为什么有些名单比其他名单更重要? – BeetleJuice

+0

https://en.wikipedia.org/wiki/Database_normalization – deceze

+0

我不明白你为什么需要同时存储。也许你可以只存储完成的任务? – Strawberry

回答

2

您的问题,素质重构进行不同的设置:

  • 为清单表(ID,检查单的名称,...)
  • 的清单项表(checlistId,的itemId,标题,.. )

现在您可以为每个清单或每个checklistitem添加一个新表格。但是对于我来说,每个上述表格(TRUE或FALSE)上的简单字段就足够了。

编辑

阅读注释后的表格报告应包括以下字段 - 的itemId - 用户id - (当项目可以链接到多个清单可选checklistId) - (已完成始终是真实的)

仍然存在一个问题:完成后将项目添加到清单中。 更好的解决方案是为正在进行的清单(与启动它的用户)和指向当前完成项目的链接添加表格。

+0

这是行不通的,因为清单已经多次完成(例如每天一次)。要做你的建议将需要每次重新创建的项目。 但是我的数据库中已经有两个表格(checklist,checklist-items)。 – PL200

+0

然后只需添加完整的表格checklistItemId,完成日期。 – Bee157

+0

但我认为我们错过了一些信息。什么是不同的用例:创建清单,添加项目,删除项目,启动清单,完成项目,...在这个配置中,你应该保存在数据库中的开始(进行中)清单 – Bee157

0

我在我们公司的软件(建立的PHP框架)中实施了一个清单。这仅仅是一个对象的基于字符串的属性checklist。在那里我保存了一个JSON格式的字符串,它代表了一个带有复选框元素的数组。每个元素本身又是一个包含checked(布尔值1或0)和label(实际复选框标签文本)的数组。这适用于我,也许可以帮助你:)看看jsonencode()/jsondecode()

要对它们进行排序,只需添加另一个元素sort