说,User有很多Devices。即,Device.user_id references User.id。
我们需要将“活动”状态添加到用户设备关系。这意味着 aUser只能有一个 'active' Device。
-- 附录
看来我必须澄清一些事情。
- A
User实际上可以没有Devices、一个Device或几个Devices; Device可以拥有User,但不能;- 那个“所有权”就是那个参考
Device.user_id references User.id; User.id并且Device.id是唯一的 PK 并且不得更改(因此,没有复合 PK);- A
User只能有一个'active'Device,但它可以是NULL,但如果不是NULL,它必须引用DevicethisUser拥有的 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 Devices for one User。
这两种方法的其他缺点是什么?
...我应该选择什么,为什么?:)
