从Postgresql表中绘制表格和关系

时间:2013-10-18 09:40:27

标签: sql database r plot schema

是否可以在postgresql数据库中绘制表格,并使用R表示它们之间的关系如下所示?

enter image description here

1 个答案:

答案 0 :(得分:7)

是的,这是可能的。

至于如何实现,请参阅以下步骤

<强>步骤

  1. 连接到PostgreSQL数据库
  2. 获取数据库的架构信息
  3. 将架构信息存储在数据结构中/将数据帧中的数据重新排列为数据结构。
  4. 从数据结构生成图表
  5. 第1步

    为了从R连接到PostgreSQL数据库,有各种机制,包括

    1. RPostgreSQL(R to PostgreSQL,持久连接)
    2. sqldf(R到PostgreSQL,临时连接自动执行第3步的一部分),它有RPostgreSQL作为依赖。
    3. PL/R(PostgreSQL to R)
    4. db.r(R to PostgreSQL,内置基本数据库可视化,例如部分步骤2,3,4,)
    5. RPostgreSQL中的第1步示例如下:

      library(RPostgreSQL)
      
      ## loads the PostgreSQL driver
      drv <- dbDriver("PostgreSQL")
      
      ## Open a connection
      con <- dbConnect(drv, dbname="databasename")
      

      第2步

      这可以通过多种方式完成。它可以直接在SQL中完成,也可以使用

      完成

      RPostgreSQL的dbListTables和dbListFields或两者的组合。

      例如,用于查询数据库中的所有表,或查询表中的所有字段/列或表中的所有约束的SQL,请参阅以下StackOverflow答案

      总之,您只需查询information_schema.tables,information_schema.columns和information_schema.table_constraints即可获得所需信息。如果速度是一个问题(在上面的链接答案中提到它们),您可以使用PostgreSQL特定的表而不是ANSI SQL标准表,但它们可能会随着时间而改变。

      这里的步骤是

      1. 获取表格列表
      2. 遍历表列表并获取每个表的列(或者只是查询包含结果集中表名和列名的查询的所有列)
      3. 遍历表列表并交替获取每个表的约束,只查询包含结果集中表名和约束名称的查询的所有列)
      4. RPostgreSQL中的第2步示例如下:

        调整您的SQL以适应。

        <强>第1部分

        获取表格列表

        使用内置功能

        tables1 <- dbListTables(con)
        

        使用SQL

        tables2 <- dbGetQuery(con, "select table_name from information_schema.tables")
        

        第2部分

        使用内置功能

        您将使用dbListFields(con,“TableName”),并应用于表的先前数据框。请参阅how to apply a function to every row of a matrix (or a data frame) in RApply a function to each row in a data frame in R并将结果保存到变量。

        使用SQL

        columns2 <- dbGetQuery(con, "select table_name,column_name from information_schema.columns")
        

        第3部分

        使用SQL

        constraints <- dbGetQuery(con, "select table_name,constraint_name, constraint_type from information_schema.table_constraints")
        

        第3步

        从第2步开始,您应该有表格列表,表格列表及其相关字段/列,表格列表及其相关约束。

        您需要输出要使用的CityPlot的csv文件,或GraphViz的点文件,或者igraph的图形格式或数据框或hash,以便使用绘制表格和连接的函数进行处理他们使用网格或图表。

        如果要将它们组合成单个数据帧,则子集和合并将非常有用。

        第4步

        此步骤也可以通过多种不同方式完成。这些包括但不限于

        1. grid-package(请参阅参考文献中的pdf以查找与您请求的用例匹配的文章),低级图形原语
        2. diagram packageshape package(参见参考资料中的pdf用法示例)略高级别的图形基元
        3. Rgraphviz package(Graphviz,基本上要么生成点文件步骤3,要么参阅参考文献中的pdf以获取更多信息)
        4. igraph package(只会为每个列和表格组合生成扁平的圆圈)
        5. CityPlot package(生成实体关系图而不是数据库表图,但可能满足您的需求,需要步骤3从数据框生成csv文件)
        6. 如果使用图表,形状或网格包,您将遍历表列表或散列或其他数据结构,并在每个表上应用绘图函数,然后为每个表应用一个单独的函数绘制线条的约束。

          <强>参考