一部のユーザーとエージェントを含むデータベースがあり、単純なメッセージ システムを追加したいと考えています。
したがって、次の単純なテーブルセットがあります。
[users]
- user_id (PK)
[agents]
- agent_id (PK)
[message_threads]
- message_thread_id (PK)
[message]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
私が持っていないのは、メッセージとメッセージを投稿した個人からの関係です。
ユーザーまたはエージェントである可能性があるため、少し行き詰まっているところがあります。これは、解決すべき受け入れられたパターンの一般的な問題であるに違いないと思いますが、そのような議論は見つかりませんでした。
いくつかのオプションがあることはわかっていますが、それらにはすべて短所があります。
オプション 1: メッセージが 2 つの異なるアカウントにリンクされる可能性があるのは好きではありません。
[message]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- user_id (FK users.user_id, ALLOW NULL)
- agent_id (FK agents.agent_id, ALLOW NULL)
オプション 2: これにより、SELECT の 1 つの列ですべてのメッセージを取得することが難しくなります。
[message_by_user]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- user_id (FK users.user_id)
[message_by_agent]
- message_id (PK)
- message_thread_id (FK messages_threads.message_thread_id)
- agent_id (FK agents.agent_id)
ユーザーとエージェントを 1 つのテーブルにまとめることができないことの 1 つです。それは石に設定されています。