言う、Userたくさん持っていDevicesます。つまり、Device.user_id references User.id.
ユーザーとデバイスの関係に「アクティブ」ステータスを追加する必要があります。これは、 aUserが 'active' を 1 つしか持てないことを意味しDeviceます。
-- 補遺
私は物事を明確にする必要があるようです。
- A
Userは実際には を持たないこともDevice、 を 1 つDevice、または複数持つこともできDeviceます。 Deviceowning を持つことができますが、所有してUserはなりません。- その「所有権」はその参照
Device.user_id references User.idです。 User.idおよびDevice.idは唯一の PK であり、変更してはなりません (したがって、複合 PK はありません) 。- Aは'active'を 1 つ以上
User持つことはできませんが、 にすることもできますが、そうでない場合は、これが所有する の1 つを参照する必要があります。DeviceNULLNULLDeviceUser
-- 補遺を終了
2 つのアプローチを想像できますが、どちらも非常に簡単です。
active_device_idにフィールドを追加しUserますUser.active_device_id references Device.id。- エンティティに
Boolean-type フラグを追加します。Device
最も一般的なクエリは次のとおりです。
- 指定された のアクティブ
Deviceを選択しますUser。 - 所有者に対してcurrent
Deviceがアクティブかどうかを確認しUserます。
めったに使用されませんが、非常に重要なのは次のとおりです。
Device所有者に対して特定の をアクティブにしますUser(そして、他Userの のデバイスを非アクティブにします)。- 特定の の所有権を変更し
Deviceます。
最初のアプローチには 2 つの注意事項があります。
user1アクティブ デバイスが に設定されてdevice1いますdevice1が、所有者はuser2です。user1との両方user2が同じアクティブdeviceになっています (ただし、フィールドの一意の制約によって簡単に修正できますUser.active_device_id。
2 次元のアプローチDeviceでは、1 つの に対して複数のアクティブな が発生する可能性がありUserます。
両方のアプローチの他の欠点は何ですか?
...そして、何を選択する必要があり、その理由は? :)