Sqlite-将矩阵存储在表中

Sqlite-将矩阵存储在表中,sqlite,select,matrix,insert,store,Sqlite,Select,Matrix,Insert,Store,我是Sqlite的新手,对数据库设计有一个两难的选择。假设我们有许多矩阵(大小不同)要存储在一个表中。我们可以进一步假设没有矩阵是稀疏的 假设我们有: A = [[1, 4, 5], [8, 1‚ 4], [1, 1, 3]] B = [['what', 'a', 'good', 'day'], ['for', 'a', 'walk', 'outside']] C = [['AAA', 'BBB', 'CCC', 'DDD', 'EEE'], ['

我是Sqlite的新手,对数据库设计有一个两难的选择。假设我们有许多矩阵(大小不同)要存储在一个表中。我们可以进一步假设没有矩阵是稀疏的

假设我们有:

A = [[1, 4, 5], 
     [8, 1‚ 4], 
     [1, 1, 3]]

B = [['what', 'a', 'good', 'day'],
     ['for', 'a', 'walk', 'outside']]

C = [['AAA', 'BBB', 'CCC', 'DDD', 'EEE'],
     ['FFF', 'GGG', 'HHH', 'III', 'JJJ'],
     ['KKK', 'LLL', 'MMM', 'NNN', 'OOO']]


And D which is [NxM] 
当我们创建表时,我们不知道矩阵的所有大小。我不认为事后改变桌子的大小是件好事。建议使用什么方法来存储矩阵以有效地将其取回?我想逐行查询出一个矩阵

我在考虑将矩阵转换成列向量,以某种方式在这样的表格中结束

CREATE TABLE mat(id INT,
                 row INT,
                 col INT,
                 val TEXT)
如何在sqlite中使用类似于矩阵a的查询逐行返回它们

[1, 4, 5] 
[8, 1‚ 4]
[1, 1, 3]
想法?或者,有人能提到类似的问题吗

----------------------更新----------------------

好的。我的问题不够清楚。这可能就是我打算在数据库中排列数据的方式。我希望你能帮我找到整理数据库的方法

假设我们有一些数据集:

Compilation    User    BogoMips
1              Andrew  1.04
1              Klaus   1.78
1              James   1.99
1              David   2.09
.              .       .
.              .       .
1              Alex    4.71



Compilation     Time    Temperature    Colour
2              10:20    10             Blue
2              10:28    21             Green
2              10:42    25             Red
.               .       .              .
.               .       .              .
2              18:16    16             Green



Compilation    Colour    Distance
3              Blue      4
3              Green     9
.              .         . 
.              .         .
3              Yellow    12
…而且将有更多具有不同数字列和新标题的数据集。某些标头名称将返回另一个集合。我们事先不知道需要存储什么样的集合。每个集合都有一个共同的标题“编译”,将它们绑定在一起

您将如何构造数据库中的数据

我发现很难相信为每个集合创建一个新表是一个好的解决方案。还是

我的想法是有两个表,标题和数据

CREATE TABLE headers (id INT,
                      header TEXT
                     )

CREATE TABLE data (id INT, 
                   compilation INT,
                   fk_header_id INT REFERENCES headers,
                   row INT,
                   col INT,
                   value TEXT)


So the populated tables looks like this,

SELECT * FROM headers;
id    header
------------
1     User
2     BogoMips
3     Time
4     Temperature
5     Colour
6     Distance


SELECT * FROM data;
id   compilation    fk_header_id   row   col   value
----------------------------------------------------
1    1              1              1      1    Andrew
2    1              2              1      2    1.04
3    1              1              2      1    Klaus
4    1              2              2      2    1.78
.    .              .              .      .    .
.    2              3              1      1    10:20
.    2              4              1      2    10
.    2              5              1      3    Blue
.    2              3              2      1    10:28
.    2              4              2      2    21
.    2              5              2      3    Green
.    .              .              .      .    .
.    3              5              1      1    Blue
.    3              6              1      2    4
.    3              5              2      1    Green
.    3              6              2      2    9
.    .              .              .      .    .
.
and so on

问题是我不知道如何查询Sqlite中的数据集。有人(Tony)有想法吗?

您需要一个透视/交叉表查询(或它的连接等价物)来获取数据

e、 g

正如你所看到的,这一点都不好笑。特别是在上面,您必须提前知道列的数量。交叉表或pivot将从sql方面减轻您的负担,但您仍然需要从查询结果中读取数据

您的问题表明需要从矩阵中提取行或列,更不用说从数据库中提取单元格了

我的桌子一开始就很简单 汇编、描述、矩阵

矩阵将是矩阵对象、二进制、xml甚至某种字符串的序列化,例如1,2,3 | 4,5,6 | 7,8,9


如果这就是我需要存储的全部内容,我会选择NoSQL变体。

信息不够,但从表面上看,这似乎是一个非常糟糕的主意。简单地序列化矩阵似乎是一个更好的方法,为什么你希望能够得到一个矩阵中的一个单元?谢谢评论:-我只想在一个表中保存不同大小的矩阵,你会怎么做?你是如何查询出来的?信息不够,你打算如何使用matrix.id?谢谢阅读。我刚刚更新了我的问题,这变成了一个新问题。我应该如何构建我的数据库?谢谢你,托尼。你说得对,我不需要提取行或列。但是能够搜索具有某种数据的矩阵是很好的,比如BogoMips大于10Um的所有矩阵如果这是您需要的,那么您走的是正确的道路,但是从单元格存储的数据构建矩阵的成本会很高。一个折衷方案是某种分析数据库,其中存储了BogoMips>10之类的内容。如果您试图从“一个”表中同时满足这两个要求,则会有严重的问题。
Select c1.value as col1, c2.value as col2, c3.value as col3
from data c1 on col = 1
inner join data c2 on col = 2 and c2.compilation = c1.compilation and c2.row = c1.row
inner join data c3 on col= 3 and c3.compilation = c1.compilation and c3.row = c1.row
Where c1.compilation = 1 order by c1.row