アプリケーションの 2 人のユーザー間の関係を作成するために、MySQL 用のデータベースを設計しています。この関係の詳細を格納する最善の方法がわかりませんが、現在、RELATIONS というリンク テーブルで関係ごとに 1 つのレコードを使用するつもりです。各ユーザーには、名前や職業などの基本的なデータが USERS テーブルに格納されており、FK によってリンクされたより具体的な個人データが他のテーブルに格納されています。これらは OTHER1、OTHER2、および OTHER3 と呼ばれ、すべて他のデータが含まれます。共有するには、[データ] というフィールドにそれぞれ入力し、ID と USER_ID で識別します。
難点は、このアプリケーションでは、ユーザーが各ユーザーに表示する基本データと詳細データを指定できることです。また、その逆も可能です。RELATIONS リンク テーブルには、2 人のユーザーが関係を設定するための USERS への FK が必要ですが、各ユーザーが共有できるデータを指定する最善の方法がわかりません。オプションで保存されますが、表示する権限を持たないユーザーからすべてを非表示にする必要がある可能性があります。ただし、2 番目のユーザーはそこにデータがあるかどうかを確認できる必要があるため、データを表示する許可を要求できます。
この時点での RELATIONS のモデルは次のようになります。
関係
ID
USER_ID1
USER_ID2
USER1OTHER1_ID [(Value), Unshared, Null]
...
USER1OTHER100_ID [(Value), Unshared, Null]
USER2OTHER1_ID [(Value), Unshared, Null]
...
USER2OTHER100_ID [(Value), Unshared, Null]
したがって、USER1OTHER1_ID には、User1 が User2 と共有している場合は OTHER1 への FK が含まれ、存在するが共有されていない場合は "Unshared" になり、User1 が OTHER1 にデータを持っていない場合は Null になります。User1 と共有するための USER2OTHER1 についても同じです。しかし、巨大なフィールド配列を持つのは好きではありません。また、User1 が後で OTHER1 にデータを追加することを決定した場合に、すべての関係を更新しなければならない方法も好きではありません。これを表現するためのより単純で正規化された方法はありますか?