重复数据与数据库中的计算数据

问题描述 投票:-1回答:1

我开始跟踪生活中的一系列变量(QuantifiedSelf)。我有很多输入源,我正在努力将它全部放入数据库中。我计划在R上使用这个数据库来询问关于我生活的任意问题(“哪条路线是最快的工作”,或“哪些食物会影响我的心情”等)

我试图在这里回答的关键问题是“我是否在将输入粘贴到数据库之前处理它?”

“过程”的例子:

  1. 我的一些输入是心情列表(每天一个)。截至目前,只有5种可用的情绪(名称在-2和2之间)。我是否规范化这些数据并创建两个表:一个Mood表(包含5个项目)和一个DailyMood表? 如果我处理数据,那么我将丢失原始数据。也许我改变了一种情绪,有一个不同的名字。如果我在规范化的数据库中执行此操作,那么我将丢失在更改之前的信息,我有一种心情“oldName” 如果我不处理数据,那么我有重复的数据
  2. 另一个输入是GPS位置列表(lat,long)。然而,我的大部分时间都花在一个地方,或花在驾驶上。我是否处理此数据以创建两个表“位置”和“路径”? 如果我不处理数据,那么我有一大堆重复的位置(在不同的时间戳),这很难查询并获得良好的数据。 如果我处理数据,那么我将丢失原始数据。我最终得到了一组易于查询的好位置和路由,但如果这些位置或路由错误,我将不得不重新下载输入源并重建数据库。

但是,我觉得我被困在两个对立的“理想”之间:

  1. 如果我处理数据,那么我没有原始数据。
  2. 如果我不处理数据,那么我有重复的,难以使用的数据。

我考虑过存储原始数据和计算数据。这感觉就像我得到了两个世界中最糟糕的一样:我的一些桌子不是原创的,如果它们是错的则需要完全重新计算,而其他表格是原始的但很难使用并且具有重复数据。

database database-design relational-database database-normalization
1个回答
0
投票

对于评论中的一些要点,我认为您存储的数据取决于您的应用程序中的需求,我会通过用例镜头处理每组数据。

对于第一个用例,情绪数据,听起来有价值的是能够随着时间的推移看到这些数据(即看起来在过去一个月,我的情绪一直在改善)以及拉出个别事件(即在日期x,我吃了一个汉堡包,这对于我在日期x)之后的情绪输入中的情绪有何影响。

如果是我,我会创建一个Mood表,有两个属性:

  • name
  • Id(pk)

该表基本上用作定义表。在这里,您可以添加特定于心情的属性(例如描述)。

然后我将创建一个具有以下属性的MoodHistory表: - Timestamp - MoodId - IsCurrent(Boolean)

在您的应用程序中输入心情之前,UPDATE MoodHistory SET IsCurrent = 0 WHERE IsCurrent = 1,然后使用IsCurrent = 1插入新记录。此结构已标准化,并通过IsCurrent列进行索引或分区(老实说,即使没有任何内容)索引/分区),即使你的表变得非常大,你应该总是能够快速地查询当前的情绪。

对于您的第二个用例,这不仅取决于您的计划使用情况,还取决于数据的来源(特别是路线)。我不确定你是如何计划将地点分组为“路线”的,但如果你在评论中澄清,我很乐意添加我的答案。

但是对于位置,我假设您在某个设定的时间间隔内拍摄了位置快照。我将创建一个与MoodHistory表类似的LocationSnapshot表:

然后,我将创建一个具有以下属性的MoodHistory表:

  • 时间戳
  • 纬度
  • 经度
  • IsCurrent通过以与MoodHistory数据类似的方式处理IsCurrent数据,获取最后输入的位置应该非常简单。如果您想避免重复,也可以进行一些额外的处理。基本上,在更新IsCurrent之前,查询IsCurrent = 1的行。然后比较在插入新记录之前将纬度和经度记录到新的纬度和经度。如果有任何更改,请继续执行插入,否则无需插入新记录。

您还可以创建一个已知位置的表,例如KnownLocation:

  • 纬度
  • 经度
  • name

加入这张桌子的纬度和经度应告诉你何时在特定地点花时间,说“家”与“工作”

© www.soinside.com 2019 - 2024. All rights reserved.