2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Webでテーブル定義からDDL出力するサービス「TableArtisan」を実装

Last updated at Posted at 2022-03-12

初投稿です。

早くも30代半ばになり、開発以外の業務も多々あり、開発に関する知識の記憶容量が減ってきたのが実感してきました。
自分への備忘録として、また未来のプログラマの役に立ってくれればと思います。

記念すべき1回目はWebでテーブル定義からDDL出力するサービス「TableArtisan」を実装したので、紹介させていただきます。

Webでテーブル定義からDDL出力するサービス「TableArtisan」を実装

背景として、データベースのテーブルを設計をする際、基本的にExcel等の表計算ソフトを用いて設計する場面が多いと思います。
出来上がったドキュメントをファイルサーバや、バージョン管理にUPする運用がスタンダードですが、あるあるな難点を解消したく、Webでテーブル定義からDDL出力するサービスを実装しました。

テーブル設計時のストレスポイント

  • 作業者間のコンフリクト解消時の修正作業
  • コミット履歴から何が修正されたのかがわからない
  • 開発中にドキュメント類のファイルを開きまくってマシンが重くなる
  • Macでの開発も増えてきて、そもそもExcel非対応
  • DDL作成マクロがこの時代でも毎回作るか、手作業でSQLをかく。

出来る事

  • 簡易的なテーブル設計(カラム、INDEXの定義)
  • 作業状態をJSONで保存(ダウンロード)
  • 作業状態をJSONから復帰(アップロード)
  • DDLの出力

出来ない事

  • サーバ上へ作業状態の保存
  • カラム、INDEXのオプション等の詳細な定義
  • ER図の作成
  • 外部キーの定義
  • 作者があまり使わないカラムは省いてます

対象のRDBMS

今後需要がありそうであれば、対象のDBMSも追加していこうと思います。

使い方

基本的に、自由度を高くしているので、入力項目に対するエラーチェック等は制限つけてません。

1.データベース名の入力

お好みでDataBaseを入力します。
DDL発行時に、CREATE文が出来るだけなので、そこまで重要ではないです。
スクリーンショット 2022-03-13 2.51.31.png

2.テーブル定義

2-1.テーブルを追加

[add Table]を押すと、テーブルが追加されます。
スクリーンショット 2022-03-13 2.27.18.png

スクリーンショット 2022-03-13 2.28.02.png

2-2.テーブルの修正

[edit]を押すと、設定用のmodalが開きます。
スクリーンショット 2022-03-13 2.30.29.png

任意に以下を設定していきます。

  • テーブル名
  • カラム
  • INDEX
    (employeeで作成例)
    スクリーンショット 2022-03-13 2.36.00.png

捕捉

  • カラムの[Defalut]は、文字列の場合は「'(シングルクォーテーション)」で囲む
  • カラムの[Comment]は、捕捉の意味で、「COMMENT ON」ではありません。
  • 複合INDEXを付けたい場合は、カラム名を「,(カンマ)」区切りで記述可能

[Save]を押して反映させます。

スクリーンショット 2022-03-13 2.37.13.png

同様の要領でテーブルを定義していきます。

3.データを保存

画面footerの「export」を押して、作成データをJsonで保存します。
スクリーンショット 2022-03-13 2.42.23.png

上記で設定したsampleの結果(MySQL)

json export.json
{
  "databaseName": "",
  "tables": [
    {
      "name": "employee",
      "columns": [
        {
          "name": "id",
          "type": "serial",
          "length": null,
          "notNull": true,
          "default": "",
          "comment": "主キー"
        },
        {
          "name": "no",
          "type": "varchar",
          "length": 10,
          "notNull": true,
          "default": "",
          "comment": ""
        },
        {
          "name": "name",
          "type": "varchar",
          "length": 40,
          "notNull": true,
          "default": "",
          "comment": ""
        },
        {
          "name": "birthday",
          "type": "date",
          "length": null,
          "notNull": true,
          "default": "",
          "comment": ""
        }
      ],
      "indexes": [
        {
          "name": null,
          "type": "PRIMARY",
          "column": "id"
        },
        {
          "name": null,
          "type": "UNIQUE",
          "column": "no"
        }
      ]
    }
  ]
}

保存したJSONファイルを[import]させて復帰が可能なので、バージョン管理で保管したり、作業者間で共有することが可能です。

4.DDLの作成

画面footerの「Generate DDL」を押して、DDLをダウンロードします。
スクリーンショット 2022-03-13 2.42.23.png

上記で設定したsampleの結果(MySQL)

sql exportDDl.sql
CREATE DATABASE IF NOT EXISTS samle;

DROP TABLE IF EXISTS `employee`;


CREATE TABLE `employee` (
    `id` serial NOT NULL,
    `no` varchar(10) NOT NULL,
    `name` varchar(40) NOT NULL,
    `birthday` date NOT NULL
);

ALTER TABLE `employee` ADD PRIMARY KEY (id);
ALTER TABLE `employee` ADD UNIQUE (no);

最後に

都度バージョンアップを検討していますが、是非活用していただければと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?