在多对多表中,最好使用为每列创建索引的FK,复合索引,因为无论如何都要对两个键进行查询(假设有2列),或者两者都是FK和复合同时?
答案 0 :(得分:0)
我会同时使用两者。它们用于不同的目的。如果通过复合索引表示列的组合是唯一的,那么您需要它用于参照完整性。您还需要两列上的外键以保持完整性,以便多对多表中存在的每个值也存在于它映射的表中。这同时会创建用于连接的索引,您肯定会这样做。
答案 1 :(得分:0)
如果想提高速度,可以使用NoSQL而不是RDBMS。
但是,让我们考虑A和B是两个表,AID是A的关键,BID是B的关键.A和B之间有多对多的关系,所以你创建了AB表,有一个AID列和另一个BID列。如果您没有创建主键,那么您可能会有重复项,应该防止这些重复项。所以你需要AB的主键。如果主键是AID,则您无法插入相同AID的两个不同配对。如果AID = 1有两对,BID = 1且BID = 2,那么您将成功插入AID = 1,BID = 1,但是当您尝试插入AID = 1,BID = 2时,系统将抛出错误,因为AID = 1已经存在并且是主键。总之,您绝对需要AB表的(AID,BID)二维密钥。
现在让我们转向外键。如果您没有为引用A.AID的AB.AID创建外键,则可以从A表中删除记录,并且AB中仍然存在不存在的ID。因此,您需要为AID和BID创建外键。这比速度更高,这是一个数据完整性保护问题。