2010-07-07 6 views
1

2D 시계열 행렬 데이터를 저장하기위한 데이터베이스 설계/DBMS에 대해 조언 해 줄 수있는 사람이 있습니까? 예 :2 차원 행렬 대수학을위한 데이터베이스 설계

표 A, B, C .. Col1 : 날짜 - 타임 스탬프 col2 : 데이터 배열? 빠른 BACK END 대수 계산을 허용하려면? (매트릭스 데이터)

  • SQL 사이비 코드

B.Data 에 의해 곱하기 A.Data을 선택 표 C INTO INSERT 어디 매트릭스 시작 날짜 = 매트릭스 B 시작 날짜 그리고 매트릭스 종료 날짜 = 행렬 B 종료 날짜

계산을위한 좌표를 기본적으로 설정합니다.

+0

인가를? –

+0

좀 더 정교 할 수 있습니까? 아직 명확하지 않다. 테이블에 포함될 내용과 그 테이블에서 가져올 내용 –

답변

1

행렬 대수의 어려움은 데이터 모델링을 위해 행렬에서 도메인이 무엇인지 결정하는 것입니다. 그것은 가치인가? 그것은 전체적으로 행렬입니까? 이것은 미리 정의 된 질문이 아니므로 두 가지 해결책과 절충점을 알려 드리겠습니다.

해결 방법 1 :

CREATE TABLE matrix_info (
    x_size int, 
    y_size int, 
    id serial not null unique, 
    timestamp not null, 
); 

CREATE TABLE matrix_cell (
    matrix_id int references matrix_info(id), 
    x int, 
    y int, 
    value numeric not null, 
    primary key (matrix_id, x, y) 
); 

큰 관심이 아주 잘 매트릭스 크기를 적용하지 않는다는 것입니다 : 매트릭스 셀의 값은 도메인입니다. 또한 누락 된 값을 사용하여 0을 표시하거나 허용하지 않을 수 있습니다. 행렬을 전체적으로 도메인으로 사용한다는 아이디어에는 매력이 있습니다. 이 경우 :

CREATE TABLE matrix (
    id serial not null unique, 
    timestamp not null, 
    matrix_data numeric[] 
); 

PostgreSQL을 포함한 많은 db는 배열이 실제로 행렬임을 강조합니다. 그렇다면 승산 등을위한 함수를 직접 작성해야합니다. 객체 관계형과 PostgreSQL에서이 작업을 수행하는 것이 좋습니다. 같은 뭔가 :

CREATE TABLE matrix(int) RETURNS matrix LANGUAGE SQL AS 
$$ select * from matrix where id = $1 $$; 

CREATE FUNCTION multiply(matrix, matrix) RETURNS matrix LANGUAGE plpgsql AS 
$$ 
DECLARE matrix1 = $1.matrix_data; 
     matrix2 = $2.matrix_data; 
begin 
    ... 
end; 
$$; 

그런 다음 당신은 행렬의 곱셈을 호출 할 수 있습니다

SELECT * FROM multiply(matrix(1), matrix(2)); 

당신은 심지어 테이블에 다른 두 행렬의 곱 삽입 할 수 :이 숙제가

INSERT INTO matrix (matrix_data) 
SELECT matrix_data FROM multiply(matrix(1), matrix(2)); 
+0

행렬이 크기가 변할 때까지 양호합니다. +1 –

+1

@ CADbloke, 우리는 행렬을 다른 크기로 업데이트한다는 것을 의미한다고 가정합니다. 그러나 이것은 어떤 특별한 문제도 제기하지 않습니다. 곱셈 함수에서 크기 불변량을 처리해야합니다. 우리는이 경우 객체 또는 변경 가능한 유형보다는 값 (및 값이 변경되지 않음)에 대해 작업합니다 .... –

+0

그래, 그게 내가 의미하는 바 였어. 내 유스 케이스는 때때로 두 차원 모두에서 추가 항목을 추가 할 것이고, 기본적으로 X와 Y 거리 테이블입니다. 동의 했으니 까 불합리한 일이 아닙니다. –