我希望找到数据库中多对多映射的最佳实践。
例如,我有两个要映射的表。我创建第三个表来存储这个映射。
在UI上我有几个A与B映射(或不是)多个。我现在看到两个解决方案:
1 - 在A的每个记录的每次更新中,我将删除它的所有映射数据并插入新的数据映射。
2 - 我需要在名为isMapped的AB表中添加新的位列。并且我将存储从A到B的每条记录的所有映射的所有映射。在保存映射操作时,我将仅使用更新语句。
你能为我提供最好的解决方案吗?
由于
答案 0 :(得分:3)
我会说,只要你看到#2场景中的第二个要点
“需要存储不必要的记录”
这是你的红旗,不要使用那种情况。
您的数据在方案1中正确建模,即当A和B中的记录之间存在映射时映射表中存在映射,并且当A和A中的记录之间没有映射时,映射表中不存在映射B.
此外,更新语句的基础机制是删除,然后是插入,因此您实际上并不是通过发布数据库来保存数据库。
最后,谈到保存数据库工作,请不要在此阶段尝试执行此操作。这就是他们的设计目标。 :)
在场景1中正确实施数据模型是您可以进行的最佳优化。
一旦你有了基本的规范化结构并拥有一些测试数据,那么你可以开始测试性能并在必要时进行重构。添加索引,更改数据结构等。
答案 1 :(得分:3)
你列出的2个选项之间我会选择no 1,isMapped没有意义,如果它们没有映射,那么记录首先不应该存在。
你还有一个选择:
DELETE FROM AB where Not in the new map
INSERT INTO AB FROM (New map) where NOT in AB
如果这些是很多地图,我会删除并从新映射中插入,否则我会删除所有插入,就像你建议的那样。