Sql 用DB高效地表示nD数组

Sql 用DB高效地表示nD数组,sql,database,database-design,Sql,Database,Database Design,我有一些数据(目前是CSV格式)是一个n-D数组-有n维,每个n维中的每个数据点有一个数据值。我提出的所有存储此阵列的模式解决方案都不是节省空间的—例如,2d: Table ArrayData ---------------- id row column dataValue 占用O(N^2)空间,类似地,nD数组占用O(N^N)空间。正如我所知,行和列的大小和形状是什么(它们只是从0到任何值的范围),我觉得我应该只需要存储id和dataValue——数据的顺序应该足够,类似于n-D数组的数据如

我有一些数据(目前是CSV格式)是一个n-D数组-有n维,每个n维中的每个数据点有一个数据值。我提出的所有存储此阵列的模式解决方案都不是节省空间的—例如,2d:

Table ArrayData
----------------
id
row
column
dataValue
占用O(N^2)空间,类似地,nD数组占用O(N^N)空间。正如我所知,
的大小和形状是什么(它们只是从0到任何值的范围),我觉得我应该只需要存储
id
dataValue
——数据的顺序应该足够,类似于n-D数组的数据如何存储在C中的内存中


我可以定义index-to-array和array-to-index函数,但这似乎有点过分了。我是否错过了显而易见的事情?这类东西有预定义的SQL函数吗?

我们不考虑传统关系数据库设计的维度。我们通常用物体来思考。您可能会有点陷入困境——仅仅因为您在代码中以多维数组存储数据并不意味着您的数据库模式应该反映这一点

也就是说,在很多情况下,从维度,特别是OLAP(多维数据库设计)的角度来思考是很方便的。通常,这些模式是为报告目的而构建的,用于从大量数据中快速检索和聚合数据。它们对查询不友好,可以允许不良数据进入,但它们的工作效率极高

如果我想存储一个三维的字符串

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)

谢谢,我收到你关于对象和传统数据存储的评论-你知道其他技术吗?我仍然希望尽可能高效地保存这些数据。您描述的
FK
int
,因此存储空间仍然是O(N^N)否?我不确定您的意思是什么?您可以选择不规范化并将所有值保留在一个表中(复制记录)或使用外键。如果您试图存储的数据实际上是整数,那么通过规范化就不会节省任何空间(这可能是您所要求的?)。如果您只打算使用较小的整数,您可以尝试使用较小的数据类型(16位整数?),但这会大大限制您的增长。