具有相同结构和类似数据的表

时间:2013-10-15 14:42:54

标签: sql database database-design self-referencing-table

这是一个关于最佳实践的问题 我正在开发一个系统,我将收集一些测量值(称为HR和RR)并计算这些测量值的平均值。现在对于用户界面我们只对这些平均值感兴趣,但是对于后面的深入数据分析,我们需要所有单独的测量(导出到matlab)以及所有平均计算(不要问 - 用户)要求,我只保存单个测量值,如果需要则稍后计算平均值。

以下是有关平均计算等的详细信息:
  - HR:我们每500到1500毫米(可变)获得读数。我们根据4-12个读数计算平均值(取决于读数之间的时间)   - RR:我们每3-17秒(变量)得到读数。我们根据2-3个读数计算平均值(取决于读数之间的时间)。

我们两个都保存:
  - 平均值(十进制)以及用于平均计算的读数的第一次读数的时间戳   - 每个读数(十进制)以及读取时间的时间戳。

正如您所看到的,平均计算和个人读数的数据相同。与HR / RR相同 - 数据相同,可以表示为:
- - - - - - - - - -
|阅读|
- - - - - - - - - -
|时间戳|
|值|
- - - - - - - - - -

由于我们以不同的时间间隔计算数据等,我们不能将HR + RR作为单行存储在数据库中,我们需要单独的行或表。
问题是:
1.为HR和RR创建单独的表是否更好?或者最好将它们存储在与单独行相同的表中,并使用一列指示给定行是HR还是RR? 2.为每个读数创建单独的表是否更好?或者更好的是创建自引用表,其中每个单独的读数将引用同一个表中的一行,并使用它的平均计算?

我对数据库设计不是很了解,我不确定在那种情况下使用的最佳实践是什么 我也在考虑使用MongoDB(而不是SQL数据库 - 可能是MSSQL,因为该项目是基于C#的),这可能会让生活变得更轻松,因为我可以在平均计算等文档中嵌入一系列单独的测量。就我而言知道对Mongo的写作非常快......

任何指针?感谢。

1 个答案:

答案 0 :(得分:1)

听起来像是多余的,这取决于。对于您的第一个问题,可以非常合理地将其视为读数表或两个更具体的表。也就是说,几年前我会说一张桌子,但多年来一直倾向于两张桌子。首先,您的关键值变得更加具体 - (阅读)与(阅读+类型)。否则你会发现自己在睡眠中添加了“AND ReadType = ...”。当有人决定一次阅读需要达到不同的精度,或者还存储技术人员穿着的衬衫颜色时,它也会给你更大的灵活性。

关于第二个问题,意见会有所不同,但我会倾向于阅读集的父表和个别阅读的细节。自我引用表感觉它赢得了一些风格点,但加入回到自己可能会变得棘手,取决于你想要获得的答案。此外,您的最终数据库平台选择可能包括也可能不包括一些专门的选项,如MSSQL的CTE,它们可以解决其中一些复杂问题。

总的来说,你可能有:

  • ReadingSet(ReadingSetID [,其他信息,根据需要])
  • ReadingR(ReadingRID,ReadingSetID,Value,TimeStamp)
  • ReadingH(ReadingHID,ReadingSetID,Value,TimeStamp)