私のプロジェクトには、構成可能なフォーム形式をサポートする必要があります。つまり、ユーザーはフォームに「n」個の列を追加して(デザインするために)、列データをデータベースに保存する必要があります。後で、where 句のこれらの列に対してもクエリを実行したいと思います。
しかし、列の数とタイプは固定されていないため、そのような機能をサポートするようにデータベースを設計するにはどうすればよいでしょうか?? プログラミング言語として Java を使用し、PostgreSQL db を使用しています。
私のプロジェクトには、構成可能なフォーム形式をサポートする必要があります。つまり、ユーザーはフォームに「n」個の列を追加して(デザインするために)、列データをデータベースに保存する必要があります。後で、where 句のこれらの列に対してもクエリを実行したいと思います。
しかし、列の数とタイプは固定されていないため、そのような機能をサポートするようにデータベースを設計するにはどうすればよいでしょうか?? プログラミング言語として Java を使用し、PostgreSQL db を使用しています。
列の値を含む別のテーブルが必要です。
-------------------------------
| formId | columnNo | value |
-------------------------------
| 1 | 1 | first |
-------------------------------
| 1 | 2 | second |
-------------------------------
| 1 | 3 | third |
-------------------------------
列番号を列名に変更することもできます。もちろん、各フォームの列数を保持する別のテーブルが必要です。これが最も簡単な解決策です。列ごとに異なるデータ型が必要な場合、事態はさらに複雑になります。
これは思ったほど難しくありません。フォームの列と各エンティティの値 (入力されたフォームの 1 つのインスタンス) に個別のテーブルが必要なだけです。これは、エンティティ属性値モデルと呼ばれることもあります。
形
フォーム列
実在物
エンティティ属性
エンティティを検索するには、WHERE 句に「OR (entity_attribute.entity_id=entity.entity_id and entity_attribute.attribute=FOO and entity_attribute.value=BAR)」サブ句を追加して、クエリ画面で SELECT ステートメントを作成できます。
別の方法として、フォーム デザインとエンティティ (フォームに入力されたもの) を XML として保存する方法があります。そこから、XMLBeans または DOM パーサーを使用してエンティティを操作できます。
「ランディ」と呼ばれる人物が行ったのとまったく同じ種類のソリューションを構築する必要があります
http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/
「内部プラットフォーム効果」をググることもできます。その要件に一致するものを構築しようとすると、まさにそれがあなたのやることになるからです。
既存の DBMS の外に DBMS を再作成するだけです。アプリケーション コードで型とドメインのチェックを再作成しますが、既存の DBMS には既にそれらがあり、DBMS が既に無料で提供しているものとまったく同じ目的で使用されます。既存の DBMS に既にある式パーサーとコンパイラーを再作成します。既存の DBMS に既にあるデータ アクセス戦略の選択を再作成します。そして、再作成しようとしている、既存の DBMS が既に持っているすべての小さなものは、既存の DBMS が既に持っているもののはるかに劣ったバージョンになります。
あなたのユーザーは、IT 担当者のさらなる介入なしに、今すぐ構築でき、将来遭遇する可能性のあるあらゆるニーズに適合できるソフトウェア ソリューションを求めています (つまり、ユーザーが次の役割を担う場所)。そのためのスキルはありませんが、その役割を果たすためにユーザーが持っていない、必要なすべての知識のギャップをアプリが埋めてくれることを望んでいます)。
それは合理的な要件のように思えますか? そのようなアプリケーションをリモートで構築することさえ本当に可能だと思いますか? まあ、それは可能です。そのようなアプリケーションは存在します。それらは、DB2、Oracle、Sybase、PostgreSQL などと呼ばれています。ユーザーを待たせている時間枠内で、これらに一致するものを構築するのは至難の業であることに疑いの余地はありません。