2014-04-05 3 views
0

저는 Sqlite를 처음 사용하고 데이터베이스 디자인에 대한 딜레마가 있습니다. 테이블에 저장 될 (다양한 크기의) 행렬이 여러 개 있다고 가정합니다. 우리는 더 이상 혼재가 없다고 추측 할 수 있습니다.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] 

우리는 우리가 행렬이 가진 모든 크기를 모르는 테이블을 생성

. 나중에 테이블 크기를 변경하는 것이 좋지 않을 것이라고 생각합니다. 매트릭스를 효율적으로 복원하기 위해 저장하는 것이 바람직한 방법은 무엇입니까? 행별로 행렬을 쿼리하려고합니다. 나는이 모양이 sqlite에서 쿼리 선으로 다시 라인을 얻을 수 어떻게 든이 같은 테이블에 끝나는 열 벡터로 변신 행렬 생각하고

,

CREATE TABLE mat(id INT, 
       row INT, 
       col INT, 
       val TEXT) 

행렬 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에서 데이터 집합을 쿼리하는 방법을 모르겠다는 것입니다. 누구나 (토니)는 생각을 가지고 있습니까?

+0

정보가 충분하지 않지만,이 정보는 실제로 나쁜 생각처럼 보입니다. 단순히 행렬을 직렬화하면 더 좋은 방법이 될 것입니다. 왜 행렬에 하나의 셀을 가져올 수 있기를 원하십니까? –

+0

의견을 보내 주셔서 감사합니다 .--) 여러 테이블 크기의 행렬을 하나의 테이블에 저장하고 싶습니다. 어떻게하면 좋을까요? 어떻게 그들을 질의합니까? – Snowrabbit

+0

정보가 충분하지 않습니다. 어떻게 matrix.id를 사용할 계획입니까? –

답변

0

데이터를 가져 오려면 피벗/크로스 탭 쿼리 (또는 조인 해당)가 필요합니다. 이 재미보다 작 볼 수 있듯이

예컨대

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 버전을 살펴볼 수 있습니다.

+0

고마워요, 토니. 네 말이 맞아. 나는 행이나 열을 추출 할 필요가 없다. 그러나 BogoMips가 10보다 큰 모든 행렬과 같은 일종의 데이터를 가진 행렬을 검색 할 수 있다면 좋았습니다. – Snowrabbit

+0

음, 그것이 필요한 경우 올바른 방법을 사용하고 있지만 비용이 많이 듭니다. 셀에 저장된 데이터로부터 행렬을 작성합니다. 절충안은 BogoMips> 10과 같은 것들이 저장된 일종의 분석 DB 일 것입니다. '하나의'테이블에서 두 가지 요구 사항을 모두 충족 시키려고하면 무언가가 심하게 어려워 질 것입니다. –