我有3张表来维护我们的简报订阅。
- 第一列存储用户数据,每个用户数据都有不同的ID。
- 2nd colum store newsletter list(即用户可以订阅" Core
更新"和/或"提示和技巧"):
id |名字|描述
id | userId | listId |活性
假设有5个可用列表,用户订阅了列表编号1,3和5.
当他将自己的简报偏好更新为1,2和4时(仅限)。我收到userId请求和新的列表ID [1,2,4]。使用" active"专栏,我可以分2步执行操作:
- 禁用所有coleration(设置active = 0,其中userId = $ id)
- 仅激活新的(设置为active = 0,其中userId =%id和listId IN(2,4)
醇>
我有以下问题:
- 有没有比使用活动旗帜更好的方式?我假设没有它我将不得不获取旧配置,与新的比较和更新记录1 1,效率较低。
- 如何处理更新时的新列表。在我们的例子中,已经有5个相关性,如果同时有人添加了第6个列表,并且用户想要订阅新列表,我的更新查询将不会影响第6个记录,因此他将不会被订阅。我想我可以UPSERT,但这在MySQL中是不可用的......
- 如果取消订阅,最好删除旧记录(1,3,5)并每次添加新记录(2,4)或将其保留在数据库中并更改状态(从长期性能数据库角度考虑进入磁盘碎片)
醇>