我开始跟踪生活中的一系列变量(QuantifiedSelf)。我有很多输入源,我正在努力将它全部放入数据库中。我计划在R上使用这个数据库来询问关于我生活的任意问题(“哪条路线是最快的工作”,或“哪些食物会影响我的心情”等)
我试图在这里回答的关键问题是“我是否在将输入粘贴到数据库之前处理它?”
“过程”的例子:
但是,我觉得我被困在两个对立的“理想”之间:
我考虑过存储原始数据和计算数据。这感觉就像我得到了两个世界中最糟糕的一样:我的一些桌子不是原创的,如果它们是错的则需要完全重新计算,而其他表格是原始的但很难使用并且具有重复数据。
对于评论中的一些要点,我认为您存储的数据取决于您的应用程序中的需求,我会通过用例镜头处理每组数据。
对于第一个用例,情绪数据,听起来有价值的是能够随着时间的推移看到这些数据(即看起来在过去一个月,我的情绪一直在改善)以及拉出个别事件(即在日期x,我吃了一个汉堡包,这对于我在日期x)之后的情绪输入中的情绪有何影响。
如果是我,我会创建一个Mood表,有两个属性:
该表基本上用作定义表。在这里,您可以添加特定于心情的属性(例如描述)。
然后我将创建一个具有以下属性的MoodHistory表: - Timestamp - MoodId - IsCurrent(Boolean)
在您的应用程序中输入心情之前,UPDATE MoodHistory SET IsCurrent = 0 WHERE IsCurrent = 1,然后使用IsCurrent = 1插入新记录。此结构已标准化,并通过IsCurrent列进行索引或分区(老实说,即使没有任何内容)索引/分区),即使你的表变得非常大,你应该总是能够快速地查询当前的情绪。
对于您的第二个用例,这不仅取决于您的计划使用情况,还取决于数据的来源(特别是路线)。我不确定你是如何计划将地点分组为“路线”的,但如果你在评论中澄清,我很乐意添加我的答案。
但是对于位置,我假设您在某个设定的时间间隔内拍摄了位置快照。我将创建一个与MoodHistory表类似的LocationSnapshot表:
然后,我将创建一个具有以下属性的MoodHistory表:
您还可以创建一个已知位置的表,例如KnownLocation:
加入这张桌子的纬度和经度应告诉你何时在特定地点花时间,说“家”与“工作”