私は、エンド カスタマーに関する多くの情報を保存する金融サービス製品に取り組んでいます。私たちのクライアントは継続的に新しい属性を追加したいと考えていますが、それは多くの場合、製品のプロセスを駆動するために使用されていません。それらはキャプチャされて表示されますが、他には何もありません。クライアントの操作方法の違いにより、多くの場合、非常に異なる値を保存したいと考えています。それらに対応するために、次の 2 つのソリューションを試しました。
- 数百の列を持つまばらにデータが入力されたテーブル。
- 顧客が必要に応じて新しい列を定義できるエンティティ属性値テーブル。
私たちは、両方のソリューションのほとんどの欠点を経験しました。多くの列は、データベースに追加するデータを把握しているという点で安心感を与えてくれますが、お気に入りのゴルフ クラブのように顧客が新しい値を「ただ」保存したい場合、柔軟性がなく高価に見える可能性があります。EAV は、クエリのパフォーマンスの低下、データの制御の喪失、検証の欠如、保守性の問題など、通常の問題をすべて示しています。
では、もっと良いパターンはありますか?