3

ユーザーが独自の店舗を作成できるeコマースWebサイトを想像してみてください。
私はそのようなウェブサイトのための内部のメッセージングシステムを設計しています、そして、私は現在、それをデータベース的に実装する方法に躊躇しています。メッセージをブロードキャストできるときにメッセージングシステムのデータベーステーブルを構成する方法は?

次のシナリオがサポートされる必要がある:

  • [U => U]はユーザが別のユーザにメッセージを送信することができます。
  • [u => s]ユーザーはストアにメッセージを送信できます。
  • [s => u]ストアはユーザーにメッセージを送信できます。
  • [s => uu]ストアは、すべての顧客にメッセージを送信できます。

私は単純なMessagesテーブルしか持っておらず、店舗が10,000人のユーザーにメッセージをブロードキャストしたい場合は、10,000個の同様のレコードを一度に挿入する必要があります。

もう1つの方法は、PersonalMessagesBroadcastMessagesを別々に保ち、BroadcastMessageReceivers「マッピング」テーブルを導入することです。ただし、この方法では、削除、受信ボックスと送信トレイの表示など、個々のメッセージの操作が複雑になります。

私はEntity FrameworkとMS SQL 2008を使用していると考えています。

答えて

3

各ユーザが自分の受信ボックスのコンテンツを個別に管理できるようにするには、別々のメッセージ(またはいくつかのM:N関係)のセットとしてブロードキャストメッセージを処理する必要があります。受信ボックスからのメッセージは影響を受けません。実装は、放送をどのように処理するかに依存します。ブロードキャストメッセージ自体を扱う必要がありますか?次に、別のエンティティタイプが必要です。

エンティティフレームワークを使用する場合は、ブロードキャスト用のストアドプロシージャがあることを確認してください。ストアドプロシージャは、メッセージ、送信者、ストアを取得し、すべてのターゲットユーザーのレコードを作成します。これをEF経由で直接行うのは非常に遅いでしょう。私はそれをこのように行います

+0

私はストアドプロシージャを使用します。応答していただきありがとうございます。 –

1

Message Table 
    ID 
    FromUserID int FK 
    ToUserID nullable int FK 
    Title 
    MessageBody 

ToUserIDがnullのときここでは、メッセージは皆のためです。それ以外の場合は、ToUserID専用です。クエリは1人のユーザーのすべてのメッセージを表示するには、あまりにも

シンプルで、あなたが使用できるユーザーを放送し、このアプローチでは

Context.Messages.Where(
     x=> x.ToUserID == null || 
      x.ToUserID == currentUserID 
    ); 

、あなたはブロードキャストのために複数のメッセージを格納することはありません。しかし、このメッセージを削除する場合は、すべてのレコードをすべてのユーザーに挿入するしかありません。

+0

ええ、別々のメッセージで作業することも同様に重要です。 –

関連する問題