1

ある程度計画された非正規化(DBAによって計画された)を備えたデータベースを持つプロジェクトでNHibernateを使用することを考えています。1セットのテーブルから読み取り、1つの列を1つのプロパティにマッピングすることは問題ではありません。ただし、更新するときは、1つのプロパティを元のテーブルの元の列にマップし直し、さらに非正規化されたテーブルのその列のコピーをいくつか更新する必要があります。ストアドプロシージャを使用せずにNHibernateでこれを行うことは可能ですか?

編集:私はNXCの答えに同意する傾向がありますが、この質問は、データベースで問題を解決するのではなく、NHibernateの問題を解決する方法についてです。

4

2 に答える 2

1

非正規化されたデータに関するいくつかの考え:

  • 慎重に使用してください。非正規化されたデータの過度の使用は、今後のメンテナンスとデータ品質の問題の原因となることが知られています。私が関わった1つのJ2EEプロジェクトでは、560個のテーブルに4つの非正規化データ項目がありました。そのうちの2つは検索テーブルでした。

  • 非正規化されたデータの同期を維持するためにアプリケーションに依存することは、既知のアンチパターンです。トランザクションシステムで非正規化データを維持するために一般的に受け入れられている方法は、データベーストリガーを使用することです。トリガーを使用するということは、(アプリケーションだけでなく)任意のソースからの更新がデータベース自体によって伝播されることを意味します。特定の何かがそれを妨げない限り、非正規化されたデータを維持するためにトリガーを使用する方が良いでしょう。

  • 非正規化されたデータは、保守開発者に象の罠を残します(特に、データの保守にDBトリガーを使用しない場合)。非正規化されたデータのすべてが文書化されていることを確認してください。

于 2009-02-22T23:33:01.453 に答える
1

Yes, you can register an event listener inheriting from DefaultSaveOrUpdateEventListener, override OnSaveOrUpdate and update the other entities.

Here are some blog posts about event listeners:

于 2009-02-22T22:27:08.523 に答える