質問

10 のフィールドが 3 つ含まれるフォームがあるとします。フィールド1..フィールド10。おそらく 10 個のデータベース列を使用して、フォーム データを 1 つ以上のデータベース テーブルに保存します。

数か月後、さらに 3 つのフィールドを追加したいとします。また、将来的には、要件の変化に基づいてこのフォームのフィールドを追加または削除する可能性があります。フォームフィールドごとにデータベース列がある場合、フォームを変更するたびにデータベースに対応する変更を加える必要があります。これはメンテナンスの頭の痛い問題のようです。もっと洗練された方法があるはずです。

そこで私の質問は、UI と疎結合なデータ モデルをどのように設計すればよいでしょうか?具体的なユースケースは、ユーザーによる拡張/カスタマイズが可能な CRM システムです。

役に立ちましたか?

解決

これを行う正当な理由がない限り、これは一般的に悪い考えです。これにより、データベースの最適化と拡張が非常に困難になります。

どうしてもそうしなければならない場合は、Travis の提案は小さなテーブルには適していますが、実際にはそれほどうまく拡張できません。

他のヒント

フィールドを別のテーブルに抽象化して、フォーム テーブルに対して多対多になるようにすることができます。

形状

ID
名前

分野

ID
ラベル
価値

フォームフィールド

フォームID
フィールドID

AIMS (www.totalaims.com) の Quest Computing で働いていたときに、私のチームがこの解決策を考え出しました。要約すると、管理者がメタデータを追加できるメンテナンス画面を追加し、その結果、特定のテーブルのデータベースにフィールドを追加できるようになりました。フィールドは、独自のメンテナンス画面と検索画面にも自動的に追加されました。これを OpenACS の上に構築しました。詳細については、www.openacs.org で「flexbase」または「dynfields」を検索するか、www.project-open.org/doc/intranet-dynfield/ をご覧ください。これは非常にうまく機能しました。主な欠点は、主な利点の副作用です。フィールドの追加は DBA 以外でも行うことができ、その結果、パフォーマンスが簡単に低下する可能性があります。

私は過去に、データベース内の XML 列を使用して追加のフィールドを保存してこれを実行しました。通常、XML 列に大きなプロパティ バッグを設定し、更新または挿入を行うときに XSD を使用して検証を強制します。データを取得するときに、要素を表示するかどうか、どのような追加の書式設定を適用するかを決定する XSL またはオブジェクト モデルのルールがあり、Web フォームの場合はプロパティ ノード内のデータのタイプに基づいてどのタイプの入力要素を使用するかを決定します。

これは、多くの NULL 行を含む広いテーブルの影響を避けるために、一部のデータをリレーショナルに保存し、他のデータを拡張的に保存する必要がある場合に非常にうまく機能します。

データベース内の他のテーブルとの結合やピボットなど、データに対してリレーショナルなことを行う必要がない場合は、単純な自己完結型 XML フォームも適切なソリューションです。

現在、ほとんどのデータベースは、この種のものに対するファーストクラスの XML サポートを備えています。たとえば SQL Server では、XSD スキーマをデータベース内の XML データ型の列に直接適用できます。最近のバージョンでは、これらの列のインデックス作成もサポートされています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top