2011-07-05 19 views
2

私は電子メール通知を送信するプロセスを書いています。現在、私は次の列を持つテーブルでの電子メール通知を記述します。私は使用するためのマッピング戦略を指導が必要です

  • email_notification_id => PK
  • notification_id =>通知
  • SENDER_ID =>ユーザーまたはグループのオブジェクト
  • recipient_id =>ユーザーまたはグループオブジェクト

送信者と受信者は、ユーザーまたはグループのタイプにすることができます。明らかに、現時点では、送信者または受信者にFKを割り当てることはできません。

1)最初のオプションは、マッピングでAnyを使用し、その型に2つの追加の列を追加することです。タイプグループの

クラス1 =>送信者、タイプグループ
クラス2タイプグループの=>送信者、受信者の受信者:

2)第2のオプションは、各組み合わせについて4つのクラスを作成し、識別器を使用してそれらをマッピングすることですタイプユーザーのタイプユーザーの
Class3に=>送信者、タイプユーザーのタイプグループ
CLASS4 =>送信者の受信者、種類ユーザー

3)他のオプションの受信者?

あなたはこれについてどう思いますか?

よろしく

答えて

0

GroupUserの両方が継承するEmailEntityBase(またはそれよりも良いフレーズが見つかります)クラスを作成することもできます。
Notificationエンティティは、EmailEntityBaseの送信者と受信者のプロパティを参照します。

+0

ちょっと、Userとgroupが1つのテーブルに入っていれば、これは素晴らしいことです。また、私はこれらの2つのエンティティを基底クラス(これは.netプロジェクト=>単一基本クラス)で汚染したくありません。 – mynkow

+0

私はあなたがテーブルごとのマッピング戦略を使用することができ、nHibで列のものを並べ替えることができると信じています。この質問を参照してください:http://stackoverflow.com/questions/5993200/fluent-nhibernate-collection-table-per-subclass P.S. 2つのクラスがある種の共通の論理ベースを持っている場合、私はそれを「汚染」とは考えません。ユーザーとグループの唯一の共通点は、あなたが正しいというより、通知を送受信できるということだけです。 –

+0

10人の男、私はそれを試してみましょう。 – mynkow

1

それは私だったと私は、私は2列をsender_idをしてに送信者受信者をrecipient_id変更しますデータベースを制御していた場合。これらは、使用する予定の生の電子メールアドレスを含む文字列フィールドです。

これはこれを行う別の方法です。データベース設計に関する限り、必ずしも最良ではありませんが、実装とマッピングの観点からは単純です。

+0

合意しておきますが、このソリューションはソリューション1と似ていますが、あなたはFKを一切持っていないので、より単純です。 – mynkow

関連する問題