はじめに
こんにちは、会員システムグループの渡邊です。
社内にNotionが導入されて2年以上立ちました。
最近は何でもNotionで管理すればいいじゃんという気持ちになってきていて、試しにDB設計をNotionで行ってみたのでその感想を書いていきます。
範囲
今回はDB設計におけるエンティティ抽出とデータモデリング、ER図作成までをNotionだけで行います。
エンティティ抽出とモデリング
NotionはMermaid記法が使えるため、こちらを使ってエンティティ抽出を行うことが可能です。
しかし、いきなりコードベースで図を作成するのは難易度が高いため、今回はdraw.ioを使ってエンティティ抽出とデータモデリングを行っていきます。
draw.io for Notionという拡張機能を使うことで、SVGファイルをNotionに貼り付けるだけで直接draw.ioの操作を行うことができます。
エンティティ抽出
今回はユーザーが記事投稿をし、そこにコメントを投稿できるサービスを実装することを想定して設計していきます。
データモデリング
次に各テーブルの関係性を紐づけていきます。
これもNotion上で操作できるので楽ですね。
ER図作成
ER図を作る前にテーブル定義をしていきます。
各テーブルの属性情報をNotionのデータベースで管理していきます。
実際に作ったものが以下になります。テーブルでグループ化するとかなり見やすくなりますね。
続いてこちらをMermaid記法を使ってER図化していきます。
ここで一工夫してMermaid記法に合う形に整えていきます。
Mermaidコピー用のビューを作成し、型と論理名をMermaid記法に合わせるための関数を作成します。
今回は桁数を制限しているのでこちらを型と合わせて表示できるようにするため、新規に型(Mermaid用)というプロパティを作成し、以下の関数を設定します。
1 |
if(!empty(prop("桁数")), ((prop("型") + "(") + format(prop("桁数"))) + ")", prop("型")) |
続いて論理名をダブルクォーテーションで囲ってエラーが出ないようにするため、新規に論理名(Mermaid用)というプロパティを作成し、以下の関数を設定します。
1 |
("\"" + prop("論理名")) + "\"" |
完成したものが以下になります。
最後に先ほど作成したテーブルの内容をコードブロックに貼り付けていきます。
貼り付けはUSER,POST,COMMENTの中にコピペするだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
erDiagram USER { INT comment_id PK "コメントID" INT post_id FK "PostID" TEXT(10) user_id FK "ユーザーID" TIMESTAMP comment_at "コメント日時" TEXT content "内容" } POST { INT post_id PK "PostID" TEXT(10) user_id FK "ユーザーID" TIMESTAMP post_at "投稿日時" TEXT content "内容" TEXT title "タイトル" } COMMENT { TEXT(10) user_id PK "ユーザーID" TIMESTAMP last_login_at "最終ログイン日時" TIMESTAMP created_at "作成日時" TEXT(256) email_address "メールアドレス" TEXT password "パスワード" } USER ||--o{ POST : "Creates" POST ||--o{ COMMENT : "Has" USER ||--o{ COMMENT : "Writes" |
これで完成です。
テーブル構成が変わる場合は、Notionのデータベースを修正してコードブロックにコピペし直すだけでER図の更新ができるようになるので非常に便利です!
終わりに
今回はNotionでDB設計を行ってみました。
DB設計の肝であるテーブル定義とER図がNotionで作成、管理できるのは非常に便利だなと思いました。
しかし、一つ問題点がありましてmermaidの仕様上、エンティティの位置調整が自動で行われるため、エンティティが多くなれば多くなるほど複雑なER図になってしまいます。そのため、複雑なシステムの場合は図を分けるなどの工夫が必要になってきます。