1人のユーザーが多くの「グループ」に所属できる「ユーザー」の表を保管しておく必要があります。各グループ内には、グループ固有の設定が多数あります。リレーショナルデータベースで「アクティブグループ」の関係を表現する方法は?
これは、Groupテーブル、Userテーブル、UserGroupSettings相互参照[1]テーブルを使用して達成するのが非常に簡単です。ここに問題はありません。
私は、ユーザーと彼らが現在 "アクティブ"であるグループとの間に "アクティブグループ"の関係を表現する方法を取り組んでいます。ユーザーは、一度に1つのグループ内で非アクティブまたはアクティブにすることができます。それらが非アクティブであるとき、それらのUserGroupSettingsは維持されます。
Userテーブル内のnull可能な「active_group」列を持つという明白なアプローチは、データベース・スキーマが特定のGroupおよびUserに対してUserGroupSettings表内に行が存在する必要があるという事実を強制しないため、 ID。同様に、Userテーブルに "settings_id"外部キー列を設定しても、それが指し示す設定行が実際に同じユーザーを参照することは強制されません。
最適なソリューションはありますか?
問題は発生しません。 'UserGroupSettings'に行がある場合、ユーザーはグループ内で非アクティブになります。また、 'UserGroupSettings'から' User.ActiveGroup'への外部キー参照を持つこともできます。 –
UserGroupSettingsのユーザー設定は、User.ActiveGroupに設定されているものに関係なく存在します。たとえば、2つのクラブのメンバーになることはできますが、1度に1つしかできません。 問題は、User1.ActiveGroupがGroup1に設定されているときにUserGroupSettingsテーブルの(User1、Group1)に対応するエントリが常に存在するという前提条件を手動で維持するコードを記述したくないということです。 – nly
。 。これは、外部キー参照を使用して簡単に処理されます。 –