我如何设计一个数据库来每周跟踪每个人的统计数据变化?

Alo*_*nso 4 database-design

有一群人,我需要每周跟踪每个人的个人数字,例如他们的体重减轻、步行的步数和吃的坏食物。我计划将此数据库实施到 highcharts 模型中,他们可以在其中以可视方式查看他们的进度,进一步激励他们继续做好。

问题是,我怎么能做到这一点?最初,我想创建一个名为 Person 的表,并包含他们的姓名、年龄、行走步数、减肥等。但是如果我要更新行走步数,它会覆盖之前行走的步数数据,而不是添加一个单独的实例. 如果我每个统计数据做一张桌子,那似乎效率低下,因为我最终每 10 个人就有 52 张桌子,那就是 520 张桌子!

我希望这是有道理的,因为我有点难以理解它的整个范围以了解需要什么......非常感谢任何帮助!

封闭是我的意思 在此处输入图片说明

Tod*_*ett 5

您想存储关于每个人的信息是正确的。由于您想记录其统计数据的历史记录,因此最好的方法是使用另一个表,该表将在每次记录统计数据时保留一行,并附上记录的日期。现在问题变成了你想如何记录每个统计数据?您有两个基本选项。

列明智

如果您有一个相当固定的集合并想让它变得非常简单,您可以按名称将每个统计数据作为一个列放在MeasurementDate 上。例如,您有一个用于WeightSteps Walked等的列。这种方法的优点是简单明了,您可以使用特定于每种统计数据的数据类型。这种方法的缺点是要添加新类型的统计信息,您必须添加新列,并且如果您没有为给定的Measurement记录一个或多个统计类型,则必须将所有统计类型设为可选。 在此处输入图片说明

明智的行

第二种选择是通过使用统计类型表来使统计更加概括。会有连续统计类型为每个类型的统计要录制。然后,您将测量统计类型相关联并记录。这种方法的优点是您可以轻松添加更多统计信息,并且您只需记录您测量的统计类型的值。缺点是这更抽象和复杂,并且您必须使用可以支持所有各种度量单位的通用数据类型,或者您必须创建一组互斥的列,每个列的数据类型都与统计类型相匹配。如果你采用第一种方法,你真的可以把它变成一个科学项目,以支持所有不同的数据类型并仍然确保数据完整性。 在此处输入图片说明

其他要点

我展示的图表是使用 Oracle 的Data Modeler工具创建的,该工具可以免费下载并且非常强大。您可以直接从它创建 DDL。您要考虑的一件事是我没有讨论的,如果您像我在这里所做的那样使用代理键,您还想使用更自然的列为每个表定义一个备用的唯一键。在Person的情况下,可能是Name。这样,如果您的列表很长,您就不会意外地将同一个人添加两次。第二件事是您必须考虑每个统计数据是一个值还是多个值。例如,Weight 和 Steps 是测量. 今天你记录我体重200磅,走了5000步。但是对于类似的东西在那里吃的坏食物可能不止一种。如果是这种情况,您就有了我们所说的重复组。要解决此问题,您必须创建固定数量的列 - 每种不良食物一列 - 或创建一个新表,该表将成为测量的子项,每种不良食物都有一行。

例子

以下是使用列方法(为了简化显示而跳过代理键)的数据外观示例:

在此处输入图片说明

以下是使用行方法的数据外观示例:

在此处输入图片说明

我希望这有帮助!Steve Hoberman 的Data Modeling Made Simple是一本关于数据建模的好书。