IDと、そのIDに関連するデータの行列(n x n)で構成されるデータセットがあります。
列名(A、B、C、D)と行名(1、2、3)も重要であり、データ(a1、b1、c1、d1)と同様に、個々のIDごとに保持する必要があります。 、...)
例えば:
このデータセットをデータベースでモデル化する最良の方法を決定しようとしていますが、RDBMSのフラットな性質を考えると難しいようです。
IDとデータマトリックスを表すXML Blobを保持するほうがよいのでしょうか、またはここでより簡単なソリューションを見落としているのでしょうか。
ありがとう。
RDBMSはフラットではありません。 R部はそれを見ています。必要なものは:
Table Entity
------------
ID
Table EntityData
----------------
EntityID
MatrixRow (1, 2, 3...)
MatrixColumn (A, B, C, D...)
Value
Entity:EntityData
は1対多の関係です。行列の各セルにはEntityData行があります。
これで、データレベルで分析するのではなく、SQLレベルで分析できるスキーマができました。スキーマについて何かを見つけるために、アプリケーションレベルですべてを引き出して抽出する必要があります。
これが、PostgreSQLがデータ型として配列をサポートする理由の1つです。見る
それが示す場所では、ARRAY[[1,2,3],[4,5,6],[7,8,9]]
のような構文を使用して3x3マトリックスの値を定義したり、val integer[3][3]
を使用して列タイプを3x3マトリックスとして宣言したりできます。
もちろん、これは標準SQLではなく、PostgreSQL固有です。他のデータベースには、似ているが少し異なる実装がある場合があります。
真にリレーショナルなソリューションが必要な場合:
Matrix
------
id
Matrix_Cell
-----------
matrix_id
row
col
value
しかし、有効なデータがあることを確認するための制約は恐ろしいものになります。
私は、DBに関する限り、行列を単一の値と見なし、csvとして格納します。
Matrix
------
id
cols
data
これはXMLよりもやや軽量です。
私はおそらくこれを次のように実装します:
Table MatrixData
----------------
id
rowName
columnName
datapoint
探しているのがデータの保存だけの場合、この構造は任意のサイズの行列を保持し、IDから任意の行列を再構成できます。 「マトリックス形式」で表示するには、いくつかの後処理が必要ですが、それがフロントエンドコードの目的です。
データは「行データ」と考えることができますか?もしそうなら、おそらく、各行をデータA、B、C、Dを持つオブジェクト(またはXML Blob)として格納し、「表現」でLinkedHashMap(Javaを想定)のようなものを使用してオブジェクトを取得できます。 IDキー。
また、典型的なデータベーステーブルは、その非常に基本的な性質上、すでに必要な機能を果たしているようです。