【发布时间】:2016-08-19 08:55:57
【问题描述】:
我有 3 个表格来维护我们的时事通讯订阅。
- 第一列存储用户数据,每个数据都有唯一的 ID。
- 第二列存储时事通讯列表(即用户可以订阅“核心 更新”和/或“提示和技巧”):
标识 |姓名 |说明
- 用户和列表之间的第三个表存储着色
标识 |用户名 |列表 ID |活跃
假设有 5 个可用列表,用户订阅了 1,3 和 5 号列表。
当他将时事通讯偏好更新为 1,2 和 4(仅限)时。我收到带有 userId 和一组新列表 ID [1,2,4] 的请求。使用“活动”列,我可以分两步执行操作:
- 禁用所有排序(设置 active = 0 where userId = $id)
- 仅激活新的(设置 active = 0 where userId = %id and listId IN (2,4)
我有以下问题:
- 有没有比使用活动标志更好的方法?我假设如果没有它,我将不得不获取旧配置,与新配置进行比较,并逐个更新记录,这会降低效率。
- 如何处理更新时的新列表。在我们的例子中,已经有 5 个相关性,如果同时添加了第 6 个列表并且用户想要订阅新列表,我的更新查询将不会影响第 6 条记录,因此他不会被订阅。我想我可以 UPSERT 但这在 MySQL 中不可用...
- 在取消订阅的情况下,最好是删除旧记录 (1,3,5) 并每次添加新记录 (2,4) 还是将其保留在数据库中并更改状态(从长期性能数据库的角度来看)进入磁盘碎片)
【问题讨论】: