任何人都可以建議用於存儲二維時間序列矩陣數據的數據庫設計/ DBMS。爲了允許快速的後端代數計算:例如:二維矩陣代數的數據庫設計
表A,B,C .. Col1:Date-Timestamp col2:Data- Array? (矩陣數據)
- SQL的僞代碼
INSERT INTO表C 通過B.Data SELECT 乘法A.Data A式矩陣的開始日期=基質B開始日期 和基質甲結束日期=矩陣B結束日期
基本上設置計算的座標。
任何人都可以建議用於存儲二維時間序列矩陣數據的數據庫設計/ DBMS。爲了允許快速的後端代數計算:例如:二維矩陣代數的數據庫設計
表A,B,C .. Col1:Date-Timestamp col2:Data- Array? (矩陣數據)
INSERT INTO表C 通過B.Data SELECT 乘法A.Data A式矩陣的開始日期=基質B開始日期 和基質甲結束日期=矩陣B結束日期
基本上設置計算的座標。
矩陣代數的難點在於確定數據建模目的是什麼是矩陣上的一個域。這是一種價值嗎?它是一個整體的矩陣嗎?這不是一個預先定義的問題,所以我會給你兩個解決方案和權衡。
解決方案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將執行一個數組實際上是一個矩陣。然後你需要編寫你自己的函數來進行乘法運算等等。我會建議用對象關係的方式和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));
好...直到矩陣改變大小。 +1 – 2017-06-27 01:41:23
@CADbloke,我假設你的意思是我們將矩陣更新爲不同大小之一。但是,這並不構成任何特殊問題。您必須以任何方式處理乘法函數中的大小不變性。我們在這種情況下處理值(而且值不會改變),而不是對象或可變類型...... – 2017-06-28 10:08:29
是的,這就是我的意思。我的用例偶爾會在兩個維度中添加額外的項目,它基本上是和X,Y距離表。同意,這不是一個不可能完成的任務,只是很煩瑣。 – 2017-06-28 10:15:07
這是家庭作業? – 2010-07-07 10:02:29
你能更精心製作嗎?尚不清楚。表格將包含什麼以及將從中獲取什麼。 – 2010-07-07 20:35:31