現在、postgres データベースとやり取りする既存の API を変更しようとしています。簡単に言うと、実際の「アセット」(通常、これは何らかのファイル)がサーバーのハードディスクのどこに保存されているかを判断するために、記述子/メタデータを保存します。
現在、これらの「アセット」に任意の数の未定義のキーと値のペア (つまり、uploadBy、addedOn、assetType など) を「タグ付け」することができます。これらのタグは、次のような構造を持つ別のテーブルに保存されます。
+---------------+----------------+-------------+
|assetid (text) | tagid(integer) | value(text) |
|---------------+----------------+-------------|
|someStringValue| 1234 | someValue |
|---------------+----------------+-------------|
|aDiffStringKey | 1235 | a username |
|---------------+----------------+-------------|
|aDiffStrKey | 1236 | Nov 5, 1605 |
+---------------+----------------+-------------+
assetid と tagid は、他のテーブルからの外部キーです。ファイルを表すアセット ID と、タグ ID/値のペアが記述子のマップであると考えてください。
現在、API (Java にある) は、これらすべてのキーと値のペアを Map オブジェクトとして作成します。これには、タイムスタンプ/日付などが含まれます。私たちがやりたいことは、キーと値のペアの値に対して何らかの形でさまざまなタイプのデータを格納できるようにすることです。または、少なくとも、必要に応じて、これらのタグの日付範囲などをチェックするクエリを実行できるように、データベース内に別の方法で保存します。ただし、データベースにテキスト項目として保存されている場合は、a.) これが実際には日付/時刻/タイムスタンプ項目であることを認識し、b.) 実際に実行できるものに変換する必要があります。クエリします。
これまでのところ、データベースのレイアウトをあまり変更せずに完全に変更することなく、私が考えることができるアイデアは1つだけです。
assettag テーブル (上に表示) を拡張して、さまざまなタイプ (数値、テキスト、タイムスタンプ) の列を追加し、それらを null にできるようにしてから、挿入時に、対応する「キー」をチェックしてデータのタイプを特定します。本当にそうです。ただし、この種の実装には多くの問題が見られます。
PostgreSQL-Ninjas は、この問題へのアプローチ方法について提案を提供できますか? 私はつい最近、データベース インタラクションの深いところに引き戻されるようになったばかりなので、少し錆びていることを認めます。