DBML - データベースのスキーマ設計用言語
データベースのスキーマ設計を行うソフトウェアは幾つもありますが、固有のデータベースに依存していたり、専用のソフトウェアを使わないといけません。案件によってデータベースを変える際に、その知見が活かせないのは面倒です。 そこで使ってみたいのがDBMLです。データベースのスキーマ設計用言語です。
DBMLの使い方
DBMLの例です。波括弧、カギ括弧を使って構造を表現しています。Refはテーブル同士の結合を表現します。
Table users {
id integer
username varchar
role varchar
created_at timestamp
}
Table posts {
id integer [primary key]
title varchar
body text [note: 'Content of the post']
user_id integer
status post_status
created_at timestamp
}
Enum post_status {
draft
published
private [note: 'visible via URL only']
}
Ref: posts.user_id > users.id // many-to-one
そしてdbml2sqlのようなコマンドアプリケーション(npmでインストールできます)を使ってSQLに変換できます。
$ npx dbml2sql db.dbml
CREATE TYPE "post_status" AS ENUM (
'draft',
'published',
'private'
);
CREATE TABLE "users" (
"id" integer,
"username" varchar,
"role" varchar,
"created_at" timestamp
);
CREATE TABLE "posts" (
"id" integer PRIMARY KEY,
"title" varchar,
"body" text,
"user_id" integer,
"status" post_status,
"created_at" timestamp
);
ALTER TABLE "posts" ADD FOREIGN KEY ("user_id") REFERENCES "users" ("id");
COMMENT ON COLUMN "posts"."body" IS 'Content of the post';
他にもdbdiagram.ioではDBMLを読み込んでビジュアル的にデータベース設計が可能です。マークアップ言語かといわれると違う気がしますが、DSLのようなものだと思うと便利そうです。
DBMLはApache License 2.0で公開されているオープンソース・プロジェクトです。
DBML - Database Markup Language | DBML holistics/dbml: Database Markup Language (DBML), designed to define and document database structures