【问题标题】:database table design for storing different sized datasets用于存储不同大小数据集的数据库表设计
【发布时间】:2012-12-29 20:27:31
【问题描述】:

我正在设计一个 Microsoft Access 数据库来存储来自实验室设备的结果。它们以数百个频率与响应曲线列表的形式存在,我以前相当容易地存储这些曲线,但在 Excel 中效率低下。

困难在于频率可以在 1 - 50E9 Hz 之间变化,数据点之间的步长可以在 1 - 1E9, Hz 之间变化,并且点的数量可以在 ~ 100 - 40,000 之间变化。这给桌子设计带来了挑战,因为我尝试的一切似乎都非常低效。

我曾考虑使用指向外部文本文件的链接来存储解决表设计的数据点,但似乎违反了良好的数据库设计。我考虑过使用数组表(即 Start Freq、Stop Freq、Freq Step Size 和 Array of Responses),但数组大小可能会有很大差异,这似乎同样低效。

是否有存储此类数据的推荐做法?存储仪器数据时这似乎是一项常见任务,但我似乎无法在网络搜索中找到任何内容。任何帮助将不胜感激。

【问题讨论】:

  • 如果任何一个 NoSQL 数据库都可以像 MongoDB 等一样使用,它可以很容易地实现。实际上 NoSQL DB 是为这些数据集制作的。但不确定 MS Access。
  • 您为什么不能将每个数组或响应存储为一行,并带有其关联的 ID 以启动、停止等数据?
  • 我可能无法理解您的评论,但我认为这与下面 DImitrijevic 先生的回答非常相似。我一定会试一试的。

标签: arrays ms-access database-design dynamic-arrays variable-length


【解决方案1】:

在我看来,这是一种经典的 1:N 关系。 “1”是测量会话,“N”是在该会话中进行的所有测量(即数据点)。这是由两个表和它们之间的一个外键建模的,类似于:

调整字段以满足您的需求,但这种通用设计应该能够处理大量数据和每个会话的不同测量次数。

话虽如此,MS Access 历来对可存储在单个数据库中的数据大小有很大限制。如果您达到这些限制,请考虑使用“真正的”DBMS。

【讨论】:

  • 我没有考虑过这种方法可能是因为我认为我会克服 Access 的限制。有 100 次测量,每个测量平均有 10,000 个数据点,我的表中有 1E6 行。它确实解决了不同大小的数据集的问题,所以我一定会尝试一下。还有什么更“优雅”的东西可能是更复杂的桌子设计,但会导致更快或更高效的操作?
  • @CLAKE1978 这是在逻辑级别对此类数据建模的关系方式。然而,有些东西可以在物理层面进行调整以提高性能。例如,考虑clustering MEASUREMENT 表(因此同一会话的测量值在物理上靠近存储在一起,极大地有利于范围扫描)。不幸的是,这种技术仅在某些 DBMS 中可用(包括 Oracle、MS SQL Server 和 MySQL/InnoDB)。
  • @CLAKE1978 顺便说一句,一百万行在数据库世界中被认为是“小”的(但不一定适用于 MS Access)。
  • 我最初拒绝了这种方法,因为它仍然要求我包含三个测量字段(会话 ID、频率、响应)。这似乎很浪费,因为频率往往遵循标准的进展,包含三个关键信息(起始频率、终止频率和步长)。但是,如果我在我的测量中不包括频率,我将失去我的响应的顺序。也许在测量表中包含 Freq 并不是什么大问题,但它似乎使我的表的大小增加了一倍。这就是为什么我在考虑数组,但被它们长度不同的事实所困扰。
猜你喜欢
  • 2011-11-19
  • 2019-08-14
  • 2015-05-01
  • 2016-03-23
  • 2011-11-24
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多