2 人のユーザー間の会話を保存するデータベースがあります。メッセージ テーブルと一緒に会話テーブルを保持します。会話テーブルには 2 人のユーザー間の会話が格納され、メッセージ テーブルには特定の会話のメッセージが格納されます。MSN メッセンジャーや Facebook メッセージなど、2 人のユーザー間の会話は 1 つだけで、新しいメッセージはこの会話に追加されます。これを行うには2つのアイデアがあります。
最初のアプローチ:
conversations(c_id, user1, user2)
c_id は主キーです auto_incremented
messages(m_id, c_id, user_from, user_to, content)
m_id は主キー auto_incremented、c_id は外部キー参照の会話 (c_id) です。
2番目のアプローチでは、
conversations(user1, user2)
(user1, user2) は複合主キー
messages(m_id, user_from, user_to, content)
m_id は主キー、(user_from, user_to) は外部キー参照の会話 (user1, user2) です。
私の質問は、これらのどれがより良いですか? 1番目、2番目、またはなし?私は自分の設計で複合外部キーをまだ使用したことがなく、正直なところ、結果がどうなるかわかりません。
これらすべてのフィールドとは別に、読み取り日、入力日などのフィールドがあります。簡潔にするために、私はそれらをスキップしています。