Sqlite-将矩阵存储在表中
我是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'], ['
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