我正在寻找将更改保存到数据库的复选框列表的最佳方法。这是我的设置:
根据一些数据库条目,我有一个选中或未选中的复选框列表,例如:
Animals I like:
0 Cats
X Dogs
0 Birds
X Elefants
现在用户可以完全改变他/她的想法并选择Birds
和取消选择Dogs
,我想尽可能有效地将此更改保存在数据库中。
数据库的结构方式是,我有一个用户表(带有 user_id)和一个动物表(带有 animal_id)。“喜欢”在数据透视表中进行跟踪(因为它是多对多关系)。
以下是我考虑过的一些方法,但我对任何其他/更好/更有效的方法感兴趣:
1) 保存时,删除该用户数据透视表中的所有条目,并仅输入选中的条目。
这样做的好处是我不需要比较很多之前/之后的选择。缺点是我删除了一个没有改变的条目(即上面例子中的elefants)。例如,如果我将创建时间戳附加到 elefant 之类的东西上,它每次都会更改,即使我没有更改该选择
2)保存时,我查询数据库以获取所有原始喜欢的列表。我将此列表与新的新喜欢进行比较。每次我遇到一个不在新列表中的原始喜欢时,我都会将其删除。如果我遇到一个不在原始列表中的新的,我会添加它。
这具有仅更改对数据库的更改的优点,但它看起来像一个非常多的查询。如果动物列表很长并且进行了许多更改,则循环可能会导致大量数据库事务。
那么,解决这个问题的最佳实践是什么。我的意思是,这一定是一个普遍的问题,我不想在这里重新发明轮子。