当我们将一对多关联存储在数据库中时,这是一种更好的方法。一 - 表中的多个映射或将多个部分存储为数组。我特定于postgres数据库(约束)
例如:如果我们定义关系如下
a b
1 - 2
1 - 3
1 - 6
2 - 3
2 - 4
3 - 5
3 - 6
这里,一个部分是a,许多部分是b(主键是a,b)
同样的东西可以存储为数组as(类似于邻接表)。
1 - {2,3,6}
2 - {3,4}
3 - {5,6}
哪个更有效率。我可能必须对此进行一些操作,例如传递闭包等,而且该图可能非常庞大。
上述的实际示例可能是特定个人资料的连接(LinkedIn 连接)或任何社交图场景
最佳答案
在您的示例中,关系是多对多,而不是一对多。多个 a
记录可以与一个 b
相关联和多个 b
记录可以与一个 a
相关联.因此,正确的规范化形式是 join table .
假设地,假设这种数据库关系代表一个个人资料在社交媒体环境中“喜欢”另一个个人资料。在这种情况下,您可能想要存储额外的信息;启动“喜欢”的时间戳,配置文件耸耸肩/喜欢/喜欢其他配置文件的程度等。然后很明显,在数组实现中没有地方可以存储这些额外数据。您需要一个连接表,以便每个“喜欢”都可以有自己的元数据。
这是我推荐的结构:
PK A B
100 1 - 2
200 1 - 3
300 1 - 6
400 2 - 3
500 2 - 4
600 3 - 5
700 3 - 6
其中 PK 是自动生成的 PK,希望来自序列,并且 A, B
受唯一索引约束。这种结构是最终在 A, B
上删除唯一索引的 future 证明。 ,我偶尔不得不处理的头痛问题。
关于sql - 在数据库中存储一对多关系 - 数组或一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24451406/