NHibernateは/ ORM EAVをサポートすることはできますか?
-
18-09-2019 - |
質問
私は最近、EAVのデータベース構造に大きく依存しているシステムを継承しましたし、実際にパフォーマンスの観点から、苦労してます。
私は何をしたい、我々はプロパティに行をマップすることができ、このような方法で、エンティティにこれらのEAVテーブルをマップするためにNHibernateのまたは別の適切なORM製品を使用しています。私たちは、それは、リレーショナルようにするためにデータベースをリファクタリングすることができます。これが可能であれば誰でも知っていますか?例もいただければ幸いです! :)
あなたの構造のための感じを与えるために、それは次のようになります:
エンティティ(実体識別子) EntityVarchar(実体識別子、VarcharValue) EntityFloat(実体識別子、VarcharValue)
のように。私はCustomerエンティティを持っていた場合、私はむしろ、Customer.Varchar [「名前」]よりも名を取得するためにCustomer.Nameを言いたい。
EAVモデルを使用するために我々のシステムの必要はありませんのでご注意ください、私たちはデータ構造への実行時の変更を許可しない、と私はそれがとにかく悪い習慣だと信じています。
解決
私は、これはその簡単なことだろうとは思いません。データベーススキーマを読み、これが唯一の既存のEAV DBのアクセスレイヤにつながる適切なマッピングとクラスを生成することができジェネレータがありますが。このデシベルのリレーショナルバージョンを生成するには、データを読んで、あなたのDBに設定された値のプロパティを含む新しいドメインオブジェクトを作成する必要があります。 これは、すべてのプロパティを含む一つの大きなテーブルの中で最も可能性の高い結果がEAV DBに存在する可能性があります。そのため私はより良いアプローチは、既存のデータを分析し、アプリケーションのニーズを考慮し、手でリレーショナルDBモデルを作成することだと思います。特に、表継承はここにあなたの友人でなければなりません。 そして、あなたはまだデータ移行のためのマッピングを記述する必要があります両方のスキーマに対するアクセス層を作成した後でます。