我对如何最好地更新连接表有点困惑。
Presentaion
id PK
Asset
id PK
PresentationAsset
presentationid
assetid
因此,当更新 PresentationAsset 中的 Presentation 及其关联资产时,我是否首先搜索所有关系,删除这些关系然后创建新关系?
处理这种情况的最佳方法是什么?
我对如何最好地更新连接表有点困惑。
Presentaion
id PK
Asset
id PK
PresentationAsset
presentationid
assetid
因此,当更新 PresentationAsset 中的 Presentation 及其关联资产时,我是否首先搜索所有关系,删除这些关系然后创建新关系?
处理这种情况的最佳方法是什么?
至少,将它们全部删除并创建新的肯定是最简单的。毕竟,这只是两个查询。
DELETE FROM PresentationAsset WHERE presentationid = 1
INSERT INTO PresentationAsset VALUES (1, 1), (1, 2), (1, 3)
假设这些确实是该表中仅有的两列(例如,没有时间戳或其他任何内容),我无法想象您需要将其复杂化的任何原因。
毕竟,擦除现有行并插入所有新行的替代方法是保留已经存在的行,但删除不再存在的行,然后插入新行。本质上,您仍然至少会得到 oneDELETE
和 one INSERT
,因此在大多数现实世界的应用程序中应该不会有太大的性能差异。第一种方法的性能甚至可能更好,因为它需要较少的值检查每个操作。
当然,如果您正在处理一个足够大的场景,其中如此微小的性能差异很重要,您可能希望对所有选项进行真正的测试并自己测量性能。
当然,如果这些不是表中仅有的两列,则需要正确保留要更新的行的其他列的值,因此删除所有列并插入新列将不是一个选项反正。
您有 2 个选项:
1)删除所有资产并按照您所说的创建新资产(def更易于编码且更易于调试。如果您在 PresentationAsset 中没有 PK,您可能遇到的唯一问题是多次删除可能会留下大量数据在 PresentationAsset PK 上。)
2)这样做(在伪代码中)
希望它足够清楚,并希望我正确理解了您的问题;)我认为我可以接受 1),但 2)可能更好。您更新需要更新的值并删除那些已删除的值。