4

私は最近、EAVデータベース構造に大きく依存するシステムを継承しましたが、パフォーマンスの観点からは本当に苦労しています。

私がやりたいのは、nhibernateまたは別の適切なORM製品を使用して、行をプロパティにマップできるように、これらのEAVテーブルをエンティティにマップすることです。次に、データベースをリファクタリングして、リレーショナルにすることができます。これが可能かどうか誰かが知っていますか?例もいただければ幸いです。:)

構造の感触を与えるために、次のようになります。

Entity(EntityId)EntityVarchar(EntityId、VarcharValue)EntityFloat(EntityId、VarcharValue)

等々。Customerエンティティがある場合は、Customer.Varchar ["Name"]ではなく、Customer.Nameと言って名前を取得します。

私たちのシステムではEAVモデルを使用する必要はなく、データ構造の実行時の変更は許可されていないことに注意してください。とにかくそれは悪い習慣だと思います。

4

1 に答える 1

1

これはそう簡単にはいかないと思います。データベース スキーマを読み取り、適切なマッピングとクラスを生成できるジェネレーターはありますが、これは既存の eav db のアクセス レイヤーになるだけです。このデータベースのリレーショナル バージョンを生成するには、データを読み取り、データベースに設定された値のプロパティを含む新しいドメイン オブジェクトを作成する必要があります。これにより、eav データベースに存在するすべてのプロパティを含む 1 つの大きなテーブルが作成される可能性があります。そのため、既存のデータを手作業で分析し、アプリケーションのニーズを考慮して、リレーショナル DB モデルを作成することをお勧めします。特にテーブルの継承は、ここであなたの友達になるはずです。次に、両方のスキーマのアクセス レイヤーを作成した後でも、データ移行用のマッピングを作成する必要があります。

于 2009-07-18T09:33:56.863 に答える