多对多数据映射的最佳实践

时间:2011-12-26 17:03:32

标签: sql database

我希望找到数据库中多对多映射的最佳实践。

例如,我有两个要映射的表。我创建第三个表来存储这个映射。

Database Diagram

在UI上我有几个A与B映射(或不是)多个。我现在看到两个解决方案:

1 - 在A的每个记录的每次更新中,我将删除它的所有映射数据并插入新的数据映射。

  • 优点:我只存储映射数据。
  • 缺点:我每次都需要使用delete和insert语句。

2 - 我需要在名为isMapped的AB表中添加新的位列。并且我将存储从A到B的每条记录的所有映射的所有映射。在保存映射操作时,我将仅使用更新语句。

  • 优势:无需每次都删除和插入。
  • 缺点:需要存储不必要的记录。

你能为我提供最好的解决方案吗?

由于

2 个答案:

答案 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

如果这些是很多地图,我会删除并从新映射中插入,否则我会删除所有插入,就像你建议的那样。