言う、User
たくさん持っていDevices
ます。つまり、Device.user_id references User.id
.
ユーザーとデバイスの関係に「アクティブ」ステータスを追加する必要があります。これは、 aUser
が 'active' を 1 つしか持てないことを意味しDevice
ます。
-- 補遺
私は物事を明確にする必要があるようです。
- A
User
は実際には を持たないこともDevice
、 を 1 つDevice
、または複数持つこともできDevice
ます。 Device
owning を持つことができますが、所有してUser
はなりません。- その「所有権」はその参照
Device.user_id references User.id
です。 User.id
およびDevice.id
は唯一の PK であり、変更してはなりません (したがって、複合 PK はありません) 。- Aは'active'を 1 つ以上
User
持つことはできませんが、 にすることもできますが、そうでない場合は、これが所有する の1 つを参照する必要があります。Device
NULL
NULL
Device
User
-- 補遺を終了
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
ます。
両方のアプローチの他の欠点は何ですか?
...そして、何を選択する必要があり、その理由は? :)