SQL Server バックエンドを使用して .NET アプリケーションを開発しています。クライアントは、アプリケーションがデプロイされた後、エンティティにカスタム属性を動的に追加する機能を要求します。
同様の質問で示唆されているように、各カスタム属性値の行を含むテーブルを作成できます (エンティティ属性値モデル)。ただし、エンドユーザーが実際にテーブルを変更できるようにすることを検討しています (同じ質問でも提案されています)。つまり、列の追加と削除です。
(編集:コメントに記載されているように、DDLはユーザーまたはアプリケーションによって直接実行されるのではなく、すべてがスムーズに実行されるようにストアドプロシージャを介して実行されます)
主な理由は次のとおりです。
- パフォーマンスの向上/検索可能な属性
- ほとんどの場合、属性は列として表示する必要があります。たとえば、ユーザー インターフェイスのデータ グリッドに表示する場合や、Excel/PowerPivot でさらに処理するためにデータを抽出する場合です。
- データは厳密に型指定されます (すべての属性値を varchar として格納するのではなく)
- 単純化されたデータ モデル
注意すべき点はありますか?
頭に浮かぶことは次のとおりです。
- 変化するデータ構造を処理できない可能性があるバックアップ/復元操作
- これらの変更を反映するように適切に更新されていない依存オブジェクト (ビューなど) (依存ビューは
select * from table
、追加された列を含めるために を実行する必要があります)。 - ...
このアプローチに関するご意見をお待ちしております。