Sql 在数据库数组中存储一对多关系还是一对多关系?

Sql 在数据库数组中存储一对多关系还是一对多关系?,sql,arrays,postgresql,graph,Sql,Arrays,Postgresql,Graph,当我们在数据库中存储一对多关联时,这是一种更好的方法。表中的一对多映射或将多个部分存储为数组。我特定于postgres数据库(约束) 例如:如果我们定义关系如下 a b 1 - 2 1 - 3 1 - 6 2 - 3 2 - 4 3 - 5 3 - 6 这里,一部分是a,多部分是b(主键是a,b) 同样的东西可以作为数组存储(类似于邻接列表) 以下哪一项更有效。我可能需要做一些操作,比如传递闭包等等,图可能非常大 上面的一个实际例子可能类似于特定配置文件的连接(LinkedIn连接),或

当我们在数据库中存储一对多关联时,这是一种更好的方法。表中的一对多映射或将多个部分存储为数组。我特定于postgres数据库(约束)

例如:如果我们定义关系如下

a   b
1 - 2
1 - 3
1 - 6
2 - 3 
2 - 4
3 - 5
3 - 6
这里,一部分是a,多部分是b(主键是a,b)

同样的东西可以作为数组存储(类似于邻接列表)

以下哪一项更有效。我可能需要做一些操作,比如传递闭包等等,图可能非常大


上面的一个实际例子可能类似于特定配置文件的连接(LinkedIn连接),或者任何社交图场景

在您的示例中,关系是多对多,而不是一对多。多条
a
记录可以与一条
b
相关联,多条
b
记录可以与一条
a
相关联。因此,正确的规范化形式是

假设,假设这个DB关系代表一个个人资料在社交媒体环境中“喜欢”另一个个人资料。在这种情况下,您可能需要存储其他信息;启动“like”的时间戳、已分析的配置文件对另一个配置文件的耸耸肩/喜欢/喜爱程度等。很明显,在阵列实现中,没有地方存储这些附加数据。您需要一个联接表,以便每个“like”都有自己的元数据

以下是我建议的结构:

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
上删除唯一索引的未来证明,这是我偶尔不得不处理的一个头痛问题。

这其中哪一个更有效
是错误的问题。数据库建模主要与正确性有关。效率来得晚(但往往是正确性的副作用)
PK   A   B
100  1 - 2
200  1 - 3
300  1 - 6
400  2 - 3 
500  2 - 4
600  3 - 5
700  3 - 6