DBeaverのER図関連機能を触ってみた

## 概要
プロジェクトでとあるDBのER図が欲しいという話になり、DBeaverにもER図表示機能があると知って使ってみました。
今回利用したのはER図の表示と出力だけでしたが、他にも利用できそうな関連機能があったので調べた内容を記事にしました。

## 動作環境
MacBook上でDBのDockerコンテナを起動し、DBeaverから接続して利用しました。

- MacBook Pro: macOS 13.6.3（22G436）
- DBeaver: バージョン22.3.0.202212070729
- DBコンテナのImage: library/postgres:13.5


サンプルDB上のDDL
```sql

CREATE TABLE public.groups (
    id serial4 NOT NULL,
    "name" varchar(20) NOT NULL,
    CONSTRAINT groups_pkey PRIMARY KEY (id)
);

CREATE TABLE public.users (
	id serial4 NOT NULL,
	"name" varchar(20) NOT NULL,
	CONSTRAINT users_pkey PRIMARY KEY (id)
);

CREATE TABLE public.relations (
	group_id int4 NOT NULL,
	user_id int4 NOT NULL,
	CONSTRAINT relations_pkey PRIMARY KEY (group_id, user_id)
);

ALTER TABLE public.relations ADD CONSTRAINT relations_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.groups(id) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE public.relations ADD CONSTRAINT relations_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE RESTRICT ON UPDATE CASCADE;
```

## 利用できるER図の種類
DBeaverでは、大きく以下の2種類のER図が存在します。
以下ではサンプルDBを利用して、それぞれのER図について説明します。

### 既存テーブルのER図

1つ目は既存テーブルのER図です。

これは既存のDBについてER図を確認したい際に利用する機能で、データベースナビゲータ等からDBのスキーマ、もしくはテーブルを選択→`ER図`のタブを選択とすることで、ER図が表示されます。

この時、スキーマを選択した場合はスキーマ内の全テーブル、テーブルを選択した場合は各テーブルと外部キーの参照先テーブルのER図が表示されます。


スキーマを選択した場合
![スクリーンショット 2024-04-09 15.25.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/ecce6cf4-d13d-e036-4527-e90599b7a8cd.png)

`groups`テーブルを選択した場合
![スクリーンショット 2024-04-09 15.35.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/e0db7cce-6fcb-c4e9-84d9-9d60511e4ad1.png)

表示したER図は、画面右下の出力ボタンを押下することで指定の形式で出力できます。
指定できるフォーマットは以下の通りです。
- PNG
- GIF
- BMP
- ERD
- GraphML

表示に加えて既存テーブルのER図では、画面右に表示されるメニュー等を利用してテーブルエンティティとリレーションシップの編集(移動・削除・リレーションシップの付け替えなど)ができます。
ただし、リレーションシップの新規作成はできません。この点は、次に説明するカスタムER図と異なる点です。

![スクリーンショット 2024-04-10 14.49.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/d14d0869-bb55-4258-2e8e-0e32c1ba221a.png)


### カスタムER図

DBeaverで利用できるもう一つのER図が、カスタムER図です。

カスタムER図は既存テーブルのER図とは異なり、DBeaver上に登録しているDBから必要なテーブルを選択してER図を作成できます。今回は1つのDBのテーブルのみを利用しますが、複数DBのテーブルを集めたER図の作成も可能です。

:::note warn
DBeaverのER図は、あくまでの既存のテーブルのみを利用して作成します。
DBの設計など、存在しないテーブルについてER図を作成する場合は他のツールを利用しましょう。
:::

では、カスタムER図の作り方を見ていきましょう。
カスタムER図は、以下2通りのどちらかの方法で作成できます。ER図を開く際にプロジェクトエクスプローラを利用するので、`プロジェクトエクスプローラから作成`の手順の方がおすすめです。

#### プロジェクトエクスプローラから作成
1.プロジェクトエクスプローラの`Diagrams`を右クリックして、`新しいER図の作成`を押下します
    - プロジェクトエクスプローラを開いていない場合は、メニューバーの`ウィンドウ`→`プロジェクトエクスプローラ`を選択することでウィンドウが開きます

![スクリーンショット 2024-04-10 16.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/d228de53-5aad-a65c-e69a-88eb19280dc2.png)


2.ER図の名前を入力し、利用するテーブルを選択して`終了`を押下します

![スクリーンショット 2024-04-10 16.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/5670047e-6300-289b-ca70-b6a180d6cd48.png)


上記の手順でER図を作成したら、プロジェクトエクスプローラに作成したER図が表示されるので開きましょう。
カスタムER図では、既存テーブルのER図から操作メニューが増えています。

![スクリーンショット 2024-04-10 14.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/4d6b492b-9cb2-5bdd-bae5-648e16fd0706.png)

以下、カスタムER図で利用できる機能について、簡単に説明します。

#### リレーションシップの新規作成
この機能では、テーブルエンティティ間のリレーションシップを新規作成できます。
ただし、好き放題に作成できるかと言われるとそうではなく、外部キーなどの関係性を定義しないとリレーションシップを作成できないようなので、その点には注意しましょう。

[^KEY]: 
:::note warn
カスタムER図で作成した仮想のリレーションシップは、既存テーブルのER図にも反映されるようです。
該当バージョンのドキュメント[^1]にも以下の記載があるため、ER図上の表記のみで実際のテーブルには影響がないと思われます。
>NOTE: All changes to existing database schemas cannot be saved and are intended for exploration purposes only.

:::

`users`から`groups`の`id`を参照するリレーションシップを追加
![スクリーンショット 2024-04-10 13.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/d33bf229-a727-804d-7a11-eef7a6055615.png)

#### ノートの追加
この機能では、テキストが入力できるノートをER図内に追加できます。
背景色も変えられるので、テーブルについてのメモやER図上の区分を表す用途等で利用可能です。

ノートを利用したテーブル区分を作成
![スクリーンショット 2024-04-10 13.32.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2427362/51406d91-e3b7-93fe-03fb-5f14ae85546b.png)

以上のように、カスタムER図機能ではDBeaver上で利用できるDBのテーブルを利用したER図を作成できます。
既存テーブルのER図とは異なりリレーションシップやノートが追加できるので、リレーションシップの修正案を提示する機会などがあれば活用できそうです。

## まとめ
本記事では、DBeaverのER図関連機能の中から、既存テーブルのER図とカスタムER図についてそれぞれができることを簡単に紹介しました。
ER図の情報が更新されていないけど現状のDBのER図が欲しいと言った場面では、普段使っているツールを利用してER図が簡単に確認できるのは便利でした。機会があれば、ぜひ利用してみてください。


## 参考資料
- https://dbeaver.com/docs/dbeaver/ER-Diagrams/22.3/
- https://dbeaver.com/docs/dbeaver/Custom-Diagrams/22.3/

[^1]:https://dbeaver.com/docs/dbeaver/ER-Diagrams/22.3/