はじめに
SchemaSpyでDocker上のデータベースに接続して設計書を生成する。
すでに色々なところに記事はあるが、情報が多すぎて混乱したのでシンプルに自分用にまとめる。
環境
- Windows10
- mysql-connector-java-8.0.28
- schemaspy-6.1.0
設計書生成
フォルダ構成
.
┣ initdb.d
┗ table.sql
┣ docker-compose.yml
┣ mysql-connector-java-8.0.28.jar
┣ schemaspy.properties
┗ schemaspy-6.1.0.jar
SQL
SQLのファイル名は何でも良い。
内容も作成さえできれば何でも良いが、今回は主キー、外部キー、インデックス、ビューについて見れるようなサンプルにした。
table.sql
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE IF NOT EXISTS mydb;
USE mydb;
CREATE TABLE `teams` (
`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);
CREATE INDEX `idx` ON `teams`(`id`);
CREATE TABLE `users` (
`id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` VARCHAR(50),
`age` INT,
`team_id` INT,
CONSTRAINT `fk_team_id` FOREIGN KEY(`team_id`) REFERENCES `teams`(`id`)
);
CREATE INDEX `idx1` ON `users`(`id`);
CREATE INDEX `idx2` ON `users`(`team_id`);
CREATE VIEW `my_view`(
`user_id`,
`user_name`,
`user_age`,
`team_name`
) AS
SELECT
u.id,
u.name,
u.age,
t.name
FROM
`users` u
INNER JOIN
`teams` t
ON u.team_id = t.id
;
docker-compose
docker-compose.yml
version: "3"
services:
db:
image: mysql:latest
ports:
- "3306:3306"
volumes:
- "./initdb.d:/docker-entrypoint-initdb.d"
environment:
MYSQL_ROOT_PASSWORD: root
プロパティファイル
schemaspy.properties
# DB種類
schemaspy.t=mysql
# JDBCドライバ場所
schemaspy.dp=mysql-connector-java-8.0.28.jar
# DBホスト
schemaspy.host=127.0.0.1
# DBポート番号
schemaspy.port=3306
# データベース名
schemaspy.db=mydb
# DBスキーマ名
schemaspy.s=mydb
# ユーザ名
schemaspy.u=root
# ユーザパスワード
schemaspy.p=root
# 出力先
schemaspy.o=output
コマンド
MySQL立ち上げ
$ docker-compose up
SchemaSpy起動
$ java -jar schemaspy-6.1.0.jar -vizjs