気まぐれな備忘録(仮)

いちようSEしてるので、プログラミングの備忘録的なものを書いてます

ERD Designer にカラムグループ機能とカラム名個別定義を追加

前回、ブラウザだけで利用できる ERMaster 代替を目指したツールを作っていることを投稿した (背景等は前回のエントリ参照)。

kajitiluna.hatenablog.com

その後も軽微な改善を行っており、今回、下記機能を追加したので紹介したい。

  • カラムのグループ管理
  • カラムごとの物理名 / 論理名の定義

なお、GitHub のリポジトリ、Google Workspace で公開しているアプリのリンクはこちら

github.com

workspace.google.com

カラムのグループ管理

カラムグループとは、いくつかのカラム定義をまとめて、複数のテーブルで共有して利用できるもの。例えば、全てのテーブル定義に作成日時と更新日時を定義する場合、カラムグループ定義にて、作成日時と更新日時を定義したカラムグループを用意することで、各テーブルに個別に定義することなく、該当のカラムグループを利用できる。

もし、(こんなケースはほぼないと思うが) 後で全てのテーブルに作成日時と更新日時と合わせて削除日時を追加することになった場合、このカラムグループに削除日時のカラムを追加すれば、該当カラムグループを利用しているテーブルに削除日時が自動的に追加されることになる。

常にセットで利用するカラムがあるのであれば、カラムグループを利用することで、設計作業は効率的になると考えている。

カラムグループの利用方法

カラムグループの利用するには、下記2ステップの手順をとる。

  1. カラムグループの定義追加
  2. 各テーブル定義でカラムグループの利用

カラムグループの定義追加

カラムグループの定義は左上のタイトル横に配置している設定アイコンより行う。

上記メニューより、Column Groups ダイアログが表示されるので、ここでカラムグループの追加や更新を行う。

上記画像は、作成日時と更新日時のカラムを定義したものである。カラム追加はテーブル定義と同じ要領でできる。

ここのダイアログでカラムグループを設定すれば、各テーブル定義で利用する準備はできた。

各テーブル定義でカラムグループの利用

カラムグループの利用はシンプルで、テーブル定義にて「Add column group」を選択すればよい。カラムグループの選択画面が表示されるので、追加したいグループを指定する。カラムグループは編集画面上は1行で表示されるが、ER図上ではグループが展開され定義したカラムが表示されるようになっている。

カラムごとの物理名 / 論理名の定義

カラム定義は共有して利用するようになっている。これは、複数テーブルにて共通のカラムの定義がある場合、都度カラム定義を作成する必要はなく、一度作成したカラム定義を他テーブルで共通して利用することができる。これにより、例えばユーザIDの型や物理名などの変更が必要な場合、カラム定義を一つ修正するだけで、それを利用している他のテーブルにも自動的に反映されるメリットがある。

一方で、カラム名を共有しているために、別のカラム名を付けたい場合は別のカラム定義を行う必要があった。 例えば、 TODO タスクを扱うテーブル定義にて、作成者と担当者を管理する場合、作成者のユーザIDと担当者のユーザIDのカラムを定義する必要がある。ユーザIDの型は同一ではあるが、カラム名を別に定義するために、個別のカラム定義を行うことになる。もし、ユーザIDの型を変更する場合、この作成者や担当者のユーザIDは、ユーザIDのカラム定義とは別定義のため、個別に変更が必要になる。

これでは手間がかかるので、カラム定義は共通のものを利用しつつ、必要に応じてカラム名をテーブルごとに個別に定義できる機能を追加した。

カラム名を個別に定義するには、上記画像のように Override Names に物理名もしくは論理名を設定することで、カラム定義の物理名 / 論理名ではなく、こちらの個別の設定が利用されるようになる。物理名 / 論理名以外はカラム定義を利用することになるので、この図の場合、ユーザIDの型を変更すると、こちらにも自動的に反映されることになる。

その他

なお、今回の更新に合わせて、リレーション周りの操作に不具合がありリレーションを定義できない状態になっていたので、合わせて修正した。リレーション周りは親テーブルのPK更新にて子テーブルの更新を行っているため、このあたりの処理は複雑になっている。。

また、現状デフォルト値の定義ができないので、こちらも早期に対応したい。

もしよければ、試しに使ってみてフィードバックいただけると非常にありがたいです。不具合が見つかったり改善要望などありましたら GitHub Issue に起票いただけると助かります。