2011-07-24 5 views
0

各AssetGroupオブジェクトに少なくとも1つのAssetオブジェクトが必要であると仮定します。 a)従来のSQL b)NHibernateデータ制約を実装して、最小数の子オブジェクトを実施する方法は?

削除操作の前に子要素の数を確認できますが、もっと宣言的な方法があります。

AssetGroupを作成する場合、まずAssetGroupを作成する前にAssetGroupを作成する必要がありますか?

+0

適切に強制されると、 'AssetGroup'とその最初の 'Asset'の両方を強制的に作成する必要があります。 –

+0

この質問を参照してください(そして、** '1:1..n' **部分のPerformanceDBAの回答):http://stackoverflow.com/questions/5279984/defining-a-11-relationship-within-a-リレーショナルデータベース**と多くの熱い議論... ** –

答えて

3

あなたはそれを間違ったレベルで処理しようとしています。

これはビジネスレベルの制約であり、データレベルの制約ではありません。あなたのビジネス層で検証を行い、あなたは大丈夫でしょう。

"ビジネスレイヤー"とは、エンティティ自体、またはデータ(NH /リポジトリ)レイヤーの上にあるものを意味します。

+0

私は、この問題がデータベースレベルで対処されるべきではない理由はありません。 –

+0

@ypercube:これらのことをDBレベルで処理したいのであれば、なぜNHibernateをまったく使用していますか? –

+0

私はNHibernateを使用していません:) –

1

3つの方法:

  1. は、前のカウント(*)を行いコミットれる、のいずれかの表にトリガーを取り付けます。
  2. は保証さ制約を、あなたAssetGroupにフィールド 'memberCount' を追加し、確認してください(memberCount < = 1)、その後、挿入時に行います。) A)マニュアル 'アップデート設定memberCount = memberCount + 1'
    Bトリガーを経由して、これを行います(1のように見えますが、格納されている状態で)
  3. アプリケーションレベルでロックを使用してチェックします。 (Diegoが言及したように)
関連する問題