34

ユーザー定義のフィールドと値を許可する (無制限の数を許可する) データベース ソリューションを探していました。一見すると、EAV は適切に適合するように見えましたが、少し読んだ後では、もはや確信が持てません。

EAV の長所と短所は何ですか?

ユーザー定義の属性/フィールドと値を許可する別のデータベース メソッドはありますか?

4

4 に答える 4

34

これは網羅的な回答とは見なされませんが、このトピックに関するいくつかのポイントにすぎません。

質問にもタグが付けられているので[sql]、一般に、リレーショナル データベースはEAVモデルを使用してデータを保存するのには特に適していません。SQL で EAV モデルを設計することはできますが、リレーショナル データベースが提供する多くの利点を犠牲にする必要があります。参照整合性を強制したり、値に SQL データ型を使用したり、必須属性を強制したりできないだけでなく、非常に基本的なクエリでさえ、作成が難しくなる可能性があります。実際、この制限を克服するために、いくつかの EAV ソリューションは、ご想像のとおり、多くの欠点がある関連テーブルと結合する代わりに、データの複製に依存しています。

「無制限の数の属性を許可する」スキーマレス設計が本当に必要な場合は、おそらくNoSQLソリューションを使用することをお勧めします。リレーショナル データベースに対する EAV の弱点は NoSQL の代替手段にも当てはまりますが、従来の SQL データベースでは実現が困難な追加機能が提供されます。たとえば、通常、NoSQL データストアは、ある種のスケーラビリティの問題を解決するように設計されており、スケーリングを困難にする機能を意図的に削除したという理由だけで、リレーショナル データベースよりもはるかに簡単にスケーリングできます。

多くのクラウド コンピューティング プラットフォーム ( AmazonGoogleMicrosoftが提供するものなど) は、EAV モデルに基づくデータストアを特徴としており、任意の数の属性を特定のエンティティに関連付けることができます。アプリケーションをクラウドに展開することを検討している場合は、これをビジネス上の利点と技術的な利点の両方と考えることができます。これは、大手ベンダー間の激しい競争により、価値とコストの比率が非常に高いレベルに押し上げられているためです。継続的に機能を押し上げ、財務および実装コストを押し下げます。

于 2010-02-08T19:30:26.657 に答える
2

posgtres hstore http://www.postgresql.org/docs/9.0/static/hstore.htmlを見てください。 これは、ほとんどの欠点なしで、まさにあなたが望むことを行います

于 2012-09-23T03:09:47.497 に答える
-10

ユーザー定義の属性/フィールドと値を許可する別のデータベース メソッドはありますか?

代替手段の 1 つは、ユーザー入力に基づいてデータベース スキーマを変更することです。たとえば、ユーザーが新しいフィールドを必要とする場合は、対応する列をデータベースに追加します。

于 2010-02-08T19:56:22.097 に答える