创建带有引用的两个表的最佳实践

时间:2019-11-25 18:24:12

标签: sql postgresql

我正在计算具有节点n1, n2, ...和边沿(n_i, n_j)的图形。我想将其存储在两个postgresql表中。第一个称为nodes,并具有由node_id SERIAL列定义的节点ID列。秒称为edges,并具有列start_node_idend_node_id,它们是节点表和节点ID列的引用。

当我插入节点时,我不知道它们的节点ID。因此,要插入相应的边,我需要查询在插入节点时创建的节点ID。是否有“更巧妙的方式”实现这一目标?在这种情况下,您的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

如果要按名称引用节点,可以通过查找edges来插入id

insert into edges (start_node_id, end_node_id)
    select ns.node_id, ne.node_id
    from (values ('n1', 'n2')) e(start_node_name, end_node_name) join
         nodes ns
         on ns.node_name = e.start_node_name join
         nodes ne
         on ne.node_name = e.end_node_name ;

答案 1 :(得分:1)

您可以使用RETURNING来访问刚刚插入的数据。

在另一个问题中,您报告您正在使用Python; this question显示了如何访问RETURNING值。