我开始追踪生活中的许多变量(QuantifiedSelf)。我有很多输入源,我正在努力将其全部粘贴到数据库中。我打算将此数据库与R一起使用,以询问有关我的生活的任意问题(“哪种路线最快”,或“哪些食物会影响我的心情”等)
我要在此处回答的关键问题是“在将输入内容粘贴到数据库之前是否要对其进行处理?”
“过程”的示例:
我的一些输入是心情列表(每天一个)。截至目前,只有5种可用的心情(名称介于-2和2之间)。我是否将这些数据标准化并创建两个表:Mood表(包含5个项目)和DailyMood表?
另一个输入是GPS位置列表(纬度,经度)。但是,我大部分时间都花在一个地方或开车上。我是否要处理这些数据以创建两个表“ Locations”和“ Routes”?
但是,我感觉自己陷入了两个相对的“理想”之间:
我考虑过同时存储原始数据和计算结果。感觉就像两全其美:我的某些表不是原始表,如果表不对,则需要完全重新计算,而其他表是原始表,但难以使用且具有重复数据。
答案 0 :(得分:0)
对于评论中的某些要点,我认为您存储的数据取决于应用程序的需求,并且我将通过用例的角度来处理每组数据。
在第一个用例中,情绪数据听起来很有价值,因为随着时间的推移,可以看到这些数据(例如,在过去的一个月中,我的情绪一直在改善),并且可以提高个人事件(例如,在日期x,我吃了一个汉堡包,这在日期x之后的随后的情绪输入中如何影响我的情绪)。
如果是我,我将创建一个具有两个属性的Mood表:
此表实际上将用作定义表。在这里,您可以添加特定于心情的属性(例如描述)。
然后我将创建具有以下属性的MoodHistory表: -时间戳 -MoodId -IsCurrent(布尔值)
在您的应用程序中输入心情之前,请在UPDATE MoodHistory SET IsCurrent = 0 WHERE IsCurrent = 1处插入新记录,然后在IsCurrent = 1处插入此记录。此结构已规范化,并通过IsCurrent列进行索引或分区(说实话)即使没有任何索引/分区),即使表变得很大,您也应该始终能够快速查询当前的心情。
对于第二个用例,这不仅取决于计划的使用情况,而且还取决于数据来自何处(尤其是对于路由)。我不确定您是如何计划将位置分组为“路线”的,但是如果您在注释中进行了说明,我很乐意添加到我的答案中。
但是,对于位置,我假设您正在某个设置的时间间隔内拍摄位置快照。我将创建一个类似于MoodHistory表的LocationSnapshot表:
然后我将创建具有以下属性的MoodHistory表:
您还可以创建一个已知位置的表,例如KnownLocation:
加入此表后,“经度和纬度”应该告诉您何时在特定位置花费时间,例如说“家”还是“工作”