1

ソーシャル ネットワーキング アプリの通知スキームを作成しています。フレンド関連とイベント関連の 2 つのグループに分類されるさまざまな種類の通知があります。現在、私のデータベース スキーマは次のようになっています。

+---------------------+------------------------+------+-----+---------+----------------+
| Field               | Type                   | Null | Key | Default | Extra          |
+---------------------+------------------------+------+-----+---------+----------------+
| notification_id     | int(11)                | NO   | PRI | NULL    | auto_increment |
| notification_type   | enum('event','friend') | NO   |     | NULL    |                |
| notification_date   | datetime               | NO   |     | NULL    |                |
| notification_viewed | bit(1)                 | NO   |     | NULL    |                |
| user_id             | int(11)                | NO   | MUL | NULL    |                |
+---------------------+------------------------+------+-----+---------+----------------+

これで、イベント関連の通知とフレンド関連の通知の 2 つの異なるテーブルができました。以下は、イベント関連の通知テーブルのスキーマです。

+-------------------------+----------------------------------------------------+------+-----+---------+-------+
| Field                   | Type                                               | Null | Key | Default | Extra |
+-------------------------+----------------------------------------------------+------+-----+---------+-------+
| notification_id         | int(11)                                            | NO   | PRI | NULL    |       |
| event_id                | int(11)                                            | NO   | MUL | NULL    |       |
| event_notification_type | enum('added','kicked','new-message','info-edited') | NO   |     | NULL    |       |
+-------------------------+----------------------------------------------------+------+-----+---------+-------+

また、通知の種類ごとkickedにさらに 4 つのテーブルがあります。それぞれに異なる種類のプロパティが必要なためです (たとえば、理由が必要です)。addednew-messageinfo-editedkicked

ここで、条件付き SQL クエリを作成して、それ以外の場合はifを結合notificationするようにしたいと考えています。event_notificationnotification_typeevent

SELECT * FROM notification_table t WHERE t.seen = FALSE AND t.user_id = ? INNER JOIN event_notification en ON(t.notification_type='event' AND en.notification_id = t.notification_id) INNER JOIN .....

非常に多くの内部結合が発生するので、それを行うより良い方法はありますか? 私のクエリもあまり最適化されていないと思います。何か助けがあれば幸いです。

4

1 に答える 1