Open2
データベーステーブルの可視化とSQL生成の効率化
- 目的
- 複数テーブルの関連性を可視化することで理解を深めたい
- GUIからSQL文を生成することで手間を省きたい
- データベーステーブルの可視化手順
- CREATE TABLE文を解析して以下の情報を取得
- テーブル名
- カラム名とデータ型
- テーブル名の単数形始まりのカラム名が他のテーブルに存在するなら結合対象と判別
- GraphvizでPDF生成
- CREATE TABLE文を解析して以下の情報を取得
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
}