在DB中有效地表示nD数组

时间:2012-01-13 20:50:09

标签: sql database database-design

我有一些 n -D数组的数据(目前是CSV格式) - 有 n - 维度,每个数据点有一个数据值每个 n 维度。我提出的用于存储此数组的所有模式解决方案都不具有空间效率 - 例如,2d的明显解决方案:

Table ArrayData
----------------
id
row
column
dataValue

占用O(N ^ 2)空间,类似地,nD阵列占用O(N ^ N)空间。据我所知rowcolumn的大小和形状(它们只是0到任何范围)我觉得我只需要存储id和{{1} - 数据的顺序应该足够,类似于 n -D数组的数据如何存储在C的内存中。

我可以定义索引到数组和数组到索引的函数 - 但这似乎有点过度杀戮。我错过了明显的吗?这种事情是否有预定义的SQL函数?

1 个答案:

答案 0 :(得分:1)

我们不考虑传统关系数据库设计的维度。我们通常会考虑对象。您可能会稍微进入杂草 - 只是因为您在代码中将数据存储在多维数组中并不意味着您的数据库模式应该反映出来。

话虽如此,有很多次在尺寸方面考虑很方便,特别是OLAP(多维数据库设计)。通常,这些模式是为报告目的而构建的,可以从大量数据中快速检索和聚合数据。他们对查询不友好,他们可以允许不良数据,但他们在做的事情上非常有效。

如果我想按3维存储字符串。

SOME_VALUE_FACT
----------------
X_DIM_ID int (FK)
Y_DIM_ID int (FK)
Z_DIM_ID int (FK)
THE_STRING_BEING_STORED varchar(200)

X_DIM
--------------
X_DIM_ID int (PK)
X_DIM_VALUE 

(Y, and Z tables are similar)