SQL "Delete all records, then add them again"立即成为不良做法吗?



我有一个 mvvm WPF 应用程序。在我看来,我显示了基本上 3 个表的再现。表 A 是主要对象。表 B 和 A 具有 n-n 关系。我有一个连接表来连接两者

因此,在实际应用程序中,您可以选择/取消选择B对象,我设法对模型中选择/选择的内容进行了正确的重新选择。

我的问题出现了,当对象 B 最初被选中,然后被取消选择,然后再次被选中时。我的模型 A 中有一个"新"B 对象,不再有"ID"来检查它是否是新创建的,或者数据库中的条目是否已存在。

基本上,我必须在实现某种机制之间做出决定,该机制可以跟踪要创建/更新/删除的所有可能性的选择。或者只是删除所有记录 ->根据我的模型添加记录。

选项 #2 对我来说似乎简单得多,但也不是很干净。

我想知道它到底有多糟糕?这是少量数据,可能不会经常更新。

编辑说明:它不是代码,但这是我能想到的解释它的最好方法。

所以我开始加载我的客户对象,它有一个客户组列表。在底层数据库中,我有一个表客户、一个表组和一个表Customer_Groups来连接它们。

最初我的客户/屏幕看起来像这样

[ ] 1
[x] 2   (ID: 67, Group: 2, Customer: 5)
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)

然后,用户取消选择组 2。

[ ] 1
[ ] 2   
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)

然后他再次添加组 2,但由于上次未选择它,我的内存对象会得到一个新生成的关联组对象。

[ ] 1
[x] 2   (ID: NULL, Group: 2, Customer: 5)
[ ] 3
[ ] 4
[x] 5   (ID: 30, Group: 5, Customer: 5)

只是把这个写出来,我想到了一个办法。我编写了一个更智能的查询,检查组 X 客户 Y的条目是否已存在,然后更新是否存在,否则创建它......我太专注于身份证了。

如果不经常更新,重新创建这些关联应该不是问题。

现在,如果它是一个不断删除/重新关联记录的查询/进程,那么是的,您可能希望避免这种情况。

避免意外删除/重新添加关联的问题的最佳方法是使用保存按钮更新 View/ViewModel 代码,该按钮将在用户完成时提交更改,而不是在每次用户交互后直接执行 SQL 更新。

我不会尝试恢复已删除的关联记录。尽管如果您愿意,可以使用已删除的标志列。但是,这将导致一堆不必要的行,以防您想通过清除标志来重新添加链接。

由于您已经在数据库中为链接创建了项目,因此我只会创建一个继承该 DBO 并在其上具有 IsSelected 属性的新对象,我们可以将其绑定到复选框。当用户保存时,您可以遍历对象列表,并查看是否选择了某个项目但没有 ID,然后将其添加到数据库中。如果某个项目未被选中,但具有 ID,则可以将其从数据库中删除。 您还可以查看check_changed事件,并在用户未单击保存按钮时仅更新该特定项目。

最新更新