0

私は自分のウェブサイトの通知システムを作ろうとしています:

これがテーブル構造です

notification
-----------------
id (pk)
userid
notification_type (for complexity like notifications for pictures, videos, apps etc.)
notification
time


notificationsRead
--------------------
id (pk) (i dont think this field is required, anyways)
lasttime_read
userid

私の理解では、通知が追加されたら、ユーザーの友達を見つけて、それらすべての行をnotificationテーブルに挿入する必要があります。これが正しい場合、これを達成するための最良の方法は何でしょうか?

  1. トリガー?
  2. T-SQL (サーバー側の SQL クエリ) を記述して、すべての友人を選択し、SQL 一括コピーを使用しますか?
4

1 に答える 1

0

優れたリレーショナル アプローチは、ピープル テーブルを持つようにテーブルを設定することです。各個人には、個人を一意に識別する主キーがあります。次に、別のテーブルがピープル キーをフレンドとしてリンクします。これにはいくつかの方法がありますが、大まかな例としては次のとおりです。

People
---------------------------------------
PeopleKey | Name | <other profile data>

次に、人々を友人として関連付けるテーブルを作成します。

Friendships
----------------------------------------------------------------------
PeopleKey |  FriendKey (fk to peoplekey) |  <details about friendship>

次に、人が何かをしたことを示す通知テーブルがあります。

Notification
-----------------------------------------------------------
NotificationKey | PeopleKey | Date | <notification details>

クエリと友達関係を使用して、人のすべての友達のすべての通知を取得できます。

select notification.* from notification inner join 
friendships on friendships.peoplekey = notification.peoplekey
where date = @importantdate 

リレーションシップは、繰り返しデータを保存しなくても多くのことを明らかにすることができます。テーブルを友情やイベントに参加、クエリ、またはリンクする方法は他にも 1000 通りあります。たとえば、 peoplekey が私の友人の 1 人であるすべてのイベントを表示すると言うことができます。peoplekey が私の友人の 1 人だけであるすべてのイベントを表示する etc. etc.

于 2013-04-03T22:15:26.507 に答える