当我们在数据库中存储一对多关联时,这是一种更好的方法。表中的一对多映射或将多部分存储为数组。我是特定于postgres数据库(约束)
例如:如果我们将关系定义如下
a b
1 - 2
1 - 3
1 - 6
2 - 3
2 - 4
3 - 5
3 - 6
这里,一键是a,多键是b(主键是a, b)
同样的东西可以存储为数组(类似于邻接表)。
1 - {2,3,6}
2 - {3,4}
3 - {5,6}
哪个更有效。我可能需要在这上面做一些操作,比如传递闭包等,而且图可能真的很大。
上面的一个实际例子可能是像特定配置文件的连接(LinkedIn连接),或任何社交图场景
在您的示例中,关系是多对多,而不是一对多。多条a
记录可以与一条b
相关联,多条b
记录可以与一条a
相关联。因此,正确的规范化形式是连接表。
假设,假设这个数据库关系代表一个个人资料在社交媒体上下文中"喜欢"另一个个人资料。在这种情况下,您可能需要存储额外的信息;"点赞"开始的时间戳,该资料耸耸肩/点赞/喜欢其他资料的程度,等等。很明显,在数组实现中没有地方存储这些额外的数据。您需要一个连接表,以便每个"喜欢"都可以拥有自己的元数据。
下面是我推荐的结构: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
上的惟一索引提供了未来的证明,这是我偶尔不得不处理的一个令人头痛的问题。