← All Articles

MySQLのテーブルから、一部のカラムだけPlantUMLにするSQLを作成してみた。

Posted on

20210907-1

はじめに

MySQLのテーブル構成を把握のため、PlantUMLを使って ER図 を作成する作業をしたのですが

カラムが多すぎるため、可読性がわるく一部のカラムは省略する形で対応しました。

再度の作業に備えて、今回は一部のカラム(インデックス関連のカラム)に絞ってPlantUMLのフォーマットで出力してくれるSQLを作成しました。

作成したSQL

こちらが作成したSQLです。

SET @SCHEMA_NAME = 'world'; # スキーマ world を指定する。

SELECT
  ## 各要素をconcatしてつなげる
  concat(ifnull(c1,''),ifnull(c2,''),ifnull(c3,''),ifnull(c4,''),ifnull(c5,''),ifnull(c6,''))
FROM (
  ## 各要素をplantumlの項目に整形
  SELECT
    CONCAT('entity ',a.TABLE_NAME,'{')  c1
    ,CONCAT('\r\t* ',REPLACE(a.PRI,',','\r\t* ')) c2
    ,'\r\t---' c3
    ,CONCAT('\r\t# ',REPLACE(a.UNI,',','\r\t# ')) c4
    ,CONCAT('\r\t# ',REPLACE(a.MUL,',','\r\t# ')) c5
    ,'\r}' c6
  FROM
  (
    ## インデックスに紐づく絡むのみ抽出する。
    ## PRI: プライマリーキーに紐づくカラム
    ## UNI: UNIQUE インデックスの最初のカラム
    ## MUL: 一意でないインデックスの最初のカラム
    ## https://dev.mysql.com/doc/refman/8.0/ja/information-schema-columns-table.html
    SELECT
      TABLE_NAME
      ,(SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = IC.TABLE_NAME AND COLUMN_KEY = 'PRI') AS PRI
      ,(SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = IC.TABLE_NAME AND COLUMN_KEY = 'UNI') AS UNI
      ,(SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = IC.TABLE_NAME AND COLUMN_KEY = 'MUL') AS MUL
    FROM  INFORMATION_SCHEMA.COLUMNS IC
    WHERE TABLE_SCHEMA = @SCHEMA_NAME
    GROUP BY  TABLE_NAME
  ) a
)b;

SQLを試してみる

このページで使用するMySQLのデータは MySQLの公式サンプルデータベース world を使用しています。

worldのSQLは こちら からダウンロードしてください。

1).worldに対してSQLの実行する。

MySQL Workbench で SQLを実行すると以下のような結果になります。

worldはテーブルが3個存在しますので、3行結果として帰ってきます。

20210907-2

2).PlantUMLを図に変換する。

SQLの結果のPlantUMLをPlantUML Web Serverを図にしました。

結果は下記のように、3つのEntityが生成されます。

20210907-3

まとめ

今回はテーブルと一部のカラムをPlantUMLのEntityとして出力できるSQLを作成しました。

このSQLは、外部キーによる関係性は抜き出せませんが、とりあえずどんなテーブルがあってキーはなにについているのは サクッと確認できるので個人的には満足しています。

もし関係性を抜き出したい場合はいろいろとツールがありますのでしらべてみてください。 (一例として くりにっきさまのブログ をリンクしておきます。)

参考サイト

plantuml

PlantUML Web Server

ERDをPlantUML形式で自動生成するツールを作った

技術PlantUMLMySQL