Railsで対称関係(ユーザー間の友情など)をモデル化するエレガントな方法を探しています(ただし、これは一般的なデータベースの問題かもしれません)。私はいくつかのアプローチを知っていますが、どれもエレガントに見えません:
ユーザーの外部キーを持つ user_user 関係テーブルを作成します。それは本質的に非対称なソリューションであるため、私はそれが好きではありません。より低いIDを持つユーザーを最初の列に、もう一方のユーザーを2番目の列に強制し、ユニオンを使用して両端から関係を照会するアプローチを見ました。これはハックのように感じます。
各行が関係を表すフレンドシップ テーブルを作成します。
- 1 対 1 の場合:ユーザー テーブルに列を追加して、関係を参照します。
- 多対多の場合: users テーブルと friends テーブルへの外部キーを保持する user_friendship テーブルを追加します。
このアプローチの問題点は、扱いにくいように見えることと、友情が 2 人のユーザーによって正確に共有されることを強制するものがないことです。
これらよりもエレガントなソリューションがあることを願っています。何か案は?