Sqlite - 在表中存储矩阵

时间:2014-04-05 14:54:16

标签: sqlite select matrix insert store

我对Sqlite很陌生,并且在数据库设计方面遇到了困境。假设我们有许多矩阵(各种大小)将存储在一个表中。我们可以进一步假设没有matrise是稀疏的。

让我们说:

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]

想法?或者有人可以提及任何类似的问题

---------------------- UPDATE ----------------------

好。我的问题不够明确。这可能是我打算在我的数据库中安排数据的方式。我希望你能帮我找到一种方法来组织我的数据库,

假设我们有一些数据集:

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中查询数据集。任何人(托尼)有个主意吗?

1 个答案:

答案 0 :(得分:0)

您需要一个数据透视/交叉制表符查询(或者它的等效连接)来获取数据。

e.g

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

正如你所看到的,这不是很有趣。特别是上述内容,您必须事先知道列数。对于sql而言,交叉表或者数据库会减轻你的负担,但你仍然需要从查询结果中读取数据。

没有看到任何问题,表明需要从矩阵中提取行或列,不要介意db中的单元格

我的表将开始如此简单 编译,描述,矩阵

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

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