私は4つのテーブルを使用しています。
- ユーザー :: ID(PK)、名前、電子メール。
- UserMessage :: ID(PK)、件名、本文、送信日。
- UsersFromMessage :: ID(PK)、FromUSerID(FK (PK => (UserMessage)))、MessageTableID(FK (PK => (UserMessage))) およびいくつかの追加列。
- UsersToMessage :: ID(PK)、FromUSerID(FK (PK => (UserMessage)))、MessageTableID(FK (PK => (UserMessage))) およびいくつかの追加列。
上記でデータベース設計を共有しています。
例として、smtp を使用しないメール アプリケーションを考えてみましょう。
user テーブルに 3 人のユーザーがいるとします。U1、U2、U3。
U1 は U2 と U3 にメッセージを送信します。したがって、1 つのエントリが UserMessage テーブルに移動し、2 つのエントリが UsersToMessage テーブルに移動し、1 つのエントリが UsersFromMessage テーブルに移動します。
U1 から送信されたすべてのメッセージを表示したいので、次のクエリを使用します。
とりあえず userid は 1 とする。
ForumEntities objEntities = new ForumEntities();
List<UsersFromMessage> lstUsers = objEntities.UsersFromMessages.Where(x => x.FromUserID == 1).Tolist();
User、UsersFromMessage のデータを取得しますが、UserToMessage は UsersFromMessage テーブルと直接関係がないため、UserToMessage に関する情報は取得しません。
U1 から送信されたメッセージを表示できますが、U1 によってメッセージが送信されたすべてのユーザーの名前を表示し、Listview にバインドしたいと考えています。