행렬 대수의 어려움은 데이터 모델링을 위해 행렬에서 도메인이 무엇인지 결정하는 것입니다. 그것은 가치인가? 그것은 전체적으로 행렬입니까? 이것은 미리 정의 된 질문이 아니므로 두 가지 해결책과 절충점을 알려 드리겠습니다.
해결 방법 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));
인가를? –
좀 더 정교 할 수 있습니까? 아직 명확하지 않다. 테이블에 포함될 내용과 그 테이블에서 가져올 내용 –