Open2

データベーステーブルの可視化とSQL生成の効率化

mskz-3110mskz-3110
  • 目的
    • 複数テーブルの関連性を可視化することで理解を深めたい
    • GUIからSQL文を生成することで手間を省きたい
mskz-3110mskz-3110
  • データベーステーブルの可視化手順
    • CREATE TABLE文を解析して以下の情報を取得
      • テーブル名
      • カラム名とデータ型
    • テーブル名の単数形始まりのカラム名が他のテーブルに存在するなら結合対象と判別
    • GraphvizでPDF生成
digraph {
  node [
    shape = none
  ]
  edge [
    dir = none
    color = gray
  ]

  subgraph cluster_Database0 {
    label = Database0
    labeljust = l

    Table0 [label = <<table border="1" cellspacing="0" cellpadding="0" color="gray" bgcolor="gray">
      <tr><td colspan="2"><b>Table0</b></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="id">id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="table1_id">table1_id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="table2_id">table2_id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="table3_id">table3_id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
    </table>>]
  }

  subgraph cluster_Database1 {
    label = Database1
    labeljust = l

    Table1 [label = <<table border="1" cellspacing="0" cellpadding="0" color="gray" bgcolor="gray">
      <tr><td colspan="2"><b>Table1</b></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="id">id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="name">name</td><td bgcolor="white" cellpadding="2" align="left"><i>VARCHAR</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="table2_id">table2_id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="table3_id">table3_id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
    </table>>]

    Table2 [label = <<table border="1" cellspacing="0" cellpadding="0" color="gray" bgcolor="gray">
      <tr><td colspan="2"><b>Table2</b></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="id">id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="name">name</td><td bgcolor="white" cellpadding="2" align="left"><i>VARCHAR</i></td></tr>
    </table>>]

    Table3 [label = <<table border="1" cellspacing="0" cellpadding="0" color="gray" bgcolor="gray">
      <tr><td colspan="2"><b>Table3</b></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="id">id</td><td bgcolor="white" cellpadding="2" align="left"><i>INT</i></td></tr>
      <tr><td bgcolor="white" cellpadding="2" port="name">name</td><td bgcolor="white" cellpadding="2" align="left"><i>VARCHAR</i></td></tr>
    </table>>]
  }

  Table0:table1_id -> Table1:id
  Table0:table2_id -> Table2:id
  Table0:table3_id -> Table3:id

  Table1:table2_id -> Table2:id
  Table1:table3_id -> Table3:id
}