在数据库中存储一对多关系-数组或一对多关系



当我们在数据库中存储一对多关联时,这是一种更好的方法。表中的一对多映射或将多部分存储为数组。我是特定于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上的惟一索引提供了未来的证明,这是我偶尔不得不处理的一个令人头痛的问题。

最新更新