说,User
有很多Devices
。即,Device.user_id references User.id
。
我们需要将“活动”状态添加到用户设备关系。这意味着 aUser
只能有一个 'active' Device
。
-- 附录
看来我必须澄清一些事情。
- A
User
实际上可以没有Device
s、一个Device
或几个Device
s; Device
可以拥有User
,但不能;- 那个“所有权”就是那个参考
Device.user_id references User.id
; User.id
并且Device.id
是唯一的 PK 并且不得更改(因此,没有复合 PK);- A
User
只能有一个'active'Device
,但它可以是NULL
,但如果不是NULL
,它必须引用Device
thisUser
拥有的 s 之一。
--结束附录
我可以想象两种方法,都非常简单:
- 向 中添加一个
active_device_id
字段User
,即User.active_device_id references Device.id
; - 向实体添加
Boolean
-type 标志。Device
最常见的查询是:
Device
为给定选择一个活动User
;- 检查当前
Device
是否对拥有者有效User
;
很少使用,但非常重要的是:
- 使给定的设备
Device
激活User
(并使其他User
设备处于非活动状态); - 更改给定的所有权
Device
。
第一种方法有两个警告:
user1
将活动设备设置为device1
,但device1
归user2
;- 两者都
user1
具有user2
相同的活动device
(尽管可以通过对 field 的唯一约束轻松修复它User.active_device_id
。
2d 方法可能会导致几个 active Device
s for one User
。
这两种方法的其他缺点是什么?
...我应该选择什么,为什么?:)