0

这确实是一个关于最佳实践的问题。
我正在开发一个系统,我将在其中收集一些测量值(称为 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 的速度非常快......

任何指针?谢谢。

4

1 回答 1

1

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

在第二个问题上,意见会有所不同,但我倾向于阅读集的父表和个人阅读的详细信息。自我参照表感觉它赢得了一些风格点,但根据您想要获得的答案,重新加入自己可能会变得棘手。此外,您最终的 DB 平台选择可能包括也可能不包括一些专门的选项,例如 MSSQL 的 CTE,它们可以解决其中的一些复杂性。

总的来说,你可能有:

  • ReadingSet(ReadingSetID [,需要的其他信息])
  • ReadingR(ReadingRID、ReadingSetID、Value、TimeStamp)
  • ReadingH(ReadingHID、ReadingSetID、Value、TimeStamp)
于 2013-10-15T16:41:08.347 回答