【发布时间】:2015-02-10 06:45:11
【问题描述】:
我将开发一个多用户网络应用程序,用户将每天记录他们是否完成了各种任务。这些任务每天都在重复,例如:每天需要完成 XYZ。
并非所有用户每天都有相同的任务要完成。可能会有一个包含所有可能任务的数据库表。当新用户在网络上注册时,他们将通过为自己创建个人资料来选择适用于他们的任务。
然后,用户每天都会记录他们是否完成了各自的任务。之后,将有深入的报告和历史统计数据,不仅是关于用户自己的任务历史,......而且在全球范围内寻找趋势。
我只是在寻找有关如何设计数据库的任何建议(一般而言)。有一个包含所有任务的任务表可以吗?然后,当新用户在线创建自己的个人资料时,会创建一个全新的表格,其中包含他们的个人资料信息和他们选择的任务。然后,每个唯一的用户配置文件表都将包含每天完成的任务的持续历史记录。
或者有更好的设计方法吗?
编辑:或者最好有类似下面的东西:
任务历史表:
PersonID | Date | Task1 | Task2 | Task3 | Task 4
001 | 24Jan15 | Complete | Complete | |
002 | 24Jan15 | | Complete | Complete | Not Complete
003 | 24Jan15 | Not Complete | | |
所以会有一个包含所有用户(以及他们选择的任务)的表,另一个包含所有可能任务的表,最后是上面记录每天任务历史的表。
这里唯一的问题是并非每项任务都适用于每个人。所以会有空白。不确定这是否重要。
毫无疑问,我是个初学者。因此,我们将不胜感激。
【问题讨论】:
-
列编号通常表示非规范化设计。您应该在描述任务状态的人员和任务之间建立多对多关系:例如
person_task_status (person_id, task_id, status, status_date)status和status_date可以为空,PK 为person_id, task_id -
谢谢@a_horse_with_no_name,这是有道理的。还有一个问题,如果每项任务的状态不是简单的“完成”与“未完成”怎么办。例如,它也可以是一个百分比,以显示任务已完成 80%。我是否仍然只使用一个状态列,所有数据类型/输入逻辑都将在应用程序中处理?
-
您可以使用整数列,其中任何低于 100 的值表示“不完整”,100 表示“完整”。如果您想查看“单词”,我会创建一个视图来返回此信息。
null在该列中可能表示“尚未开始”。
标签: database postgresql database-design