2012-03-05 15 views
1

私は、ログイン時に管理者から通知を受け取る必要があるユーザーのためのWebアプリケーションを作成しています。これらの通知は、ダッシュボードに表示する必要があります。ユーザーのための通知システムのスキーマ

ユーザーがメッセージを読んだら、一度そのメッセージを閉じることができます。新しいユーザーは、メッセージが作成される前に表示されてはいけません。私は、ユーザーがメッセージを「却下」したことを確認するにはどうすればよい

  1. 私は、スキーマを設計するには二つの問題を抱えていますか?

  2. 新しいユーザーは作成後にメッセージを表示するにはどうすればよいですか?

は、ここで通知用のテーブルです:#1については

CREATE TABLE [dbo].[Notification] 
(
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Message] [varchar](max) NOT NULL, 
    [DateCreated] [datetime] NOT NULL, 
    [CreatedById] [int] NOT NULL 
) 

、私は(DismissedNotification_User)テーブルを作成することを考えていたNotification.IdUser.Idの間でマップすること。ペアが存在する場合、ユーザーはその通知を破棄しました。しかし、これが最良のアプローチ(not inleft join)であるかどうかはわかりません。

#2の場合、ユーザーにDateCreated列を追加し、#1(where [DateCreated] >= [User].DateCreated)に条件を追加すると、最も簡単な方法がわかります。

クッキーが必要なのは、本当に不要な重量がアプリケーションに加わるからです。 #1のために

答えて

1

ここでは#1と#2のためのあなた自身の解決策がうまくいくと言えます。

「却下された」通知を表すリンクテーブルは、1つの通知レコードとは対照的に通知を表すために、ユーザーごとに1つの行を作成する必要があります。

私は#2についても、通知の作成日があると思います。ユーザーは分かりやすいオプションになります。 「却下された」列を使用する他の提案では、リンクされた表のオプションに依存している場合にユーザー作成後の通知のみを表示することはできません。存在した。

+0

ありがとうございます - 私は私の元の計画に固執するつもりです。 – TheCloudlessSky

+0

私はそれが最も賢明な選択肢だと思います、私は最近アラートシステムと同様のことをしました。ユーザーごとに行を挿入して削除することを検討しましたが、2-3kのユーザーがいて、アラートはおそらく10-20ユーザーにしか関係しないため、決して触れないであろう何千もの行を追加するのは非効率的でした。 – dougajmcdonald

0
  • 、あなたのアプリケーションで、ユーザーがメッセージを開くと、デフォルト値の0またはfalseでbooleanすなわちdismissedまたはデータ型bitreadedようNotificationテーブル何かに新しい列を追加します。 dismissedの値を1に更新すると、Markという名前のボタンが追加されているので、ユーザーが確実に読むことができます。 #2のために

  • あなたは、彼らがユーザーによってopendedとreadedされていないとしてユーザーにまだ却下されていないメッセージのみを表示するには、このフィールドdismissedを使用することができます。

だから、通知表には、次のようになります。

アプリケーションで
[Notification] 
(
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Message] [varchar](max) NOT NULL, 
    [DateCreated] [datetime] NOT NULL, 
    [CreatedById] [int] NOT NULL, 
    [Readed] bit Default(0) 
) 

あなたが好きなユーザーごとに通知を保存するために、余分なテーブルが必要になります、

dbo.UserNotifications 
(
    UserId, NotificationId 
) 

ときシステムへのユーザーログオンは、readed = 0で通知をチェックします。

0

ユーザーとメッセージの両方を含むテーブルを作成して、この2つのタスクに参加することができます。管理者がメッセージを送信すると、既存の(アクティブな)ユーザーごとにエントリが作成されます。履歴が不要な場合は、ユーザーが通知を却下した後にメッセージを削除できます。それ以外の場合は、[Dismissed]列を追加する必要があります。この方法では、ユーザに提示する必要がある通知を得るために複雑なクエリを必要としません。

関連する問題