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