【问题标题】:Best practice for creating two tables with references使用引用创建两个表的最佳实践
【发布时间】:2020-03-21 02:34:35
【问题描述】:

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

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

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

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

    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 ;
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多