ent.について​_データモデル定義編

131 Views

January 18, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

1/11 ent.について データモデル定義編

2.

2/11 ent.とは? グラフ構造に特化したGolangのORMライブラリ ・データベーススキーマをグラフ構造で簡単にモデル化可能 ・gqlgenと組み合わせることで、自動的にGraphQLリゾルバを構築できる ・データ間の関係性を定めてしまえば、極めて簡単なコードでDB操作ができる ・作成元はFacebookなので、GraphQL​のベストプラクティスに則りやすい

3.

3/11 GraphQLとは? 柔軟かつ効率的なデータ通信を行うための、比較的新しいAPI向けクエリ言語 リクエスト クライアント バックエンド レスポンス クライアント側のクエリ言語から リクエストを作成して送信する 受け取ったリクエストとスキーマ言語より レスポンスを作成して送信する 欲しいデータのみが JSON型で返される

4.

4/11 ent.のデータモデリングについて RDBのデータをグラフ構造として扱うにあたり、ent.で次のように定義する ・テーブルのフィールド:ノードのプロパティ ・テーブル名:ノードのラベル ・データ間の関係:エッジとそのプロパティ ラベル Pet Name: Tilly Age: 2 Species: Cat ノード Pet Owner エッジ User Name: John Age: 18 Club: Soccer Friend Friend User Name: Mike Age: 17 Club: Soccer

5.

5/11 今回用意したテーブル構造 ・汎用なSNSを想定 ・アカウントはポストを投稿できる ・ポストには位置情報を追加できる ・ポストには「いいね」とコメントができる ・アカウント同士でフレンド関係を作れる ・特定のアカウントをミュートにできる

6.

データテーブル設定ファイルの作成 go run -mod=mod entgo.io/ent/cmd/ent init テーブル名 を実行してテーブルごとの設定ファイルを作成する Annotations()でテーブルの基本設定を行う 6/11

7.

テーブルのフィールド設定 データテーブルごとの設定ファイル内でフィールドを定義する ・テーブル名.goのFields()でテーブルのフィールド定義を行う ・RDBのフィールド設定と同じように値に制限を付けることができる ・Mixin()を用意すると、複数のテーブルで同じフィールド定義を追加できる 7/11

8.

8/11 エッジの設定① データテーブルごとの設定ファイル内でエッジを定義する ・テーブル名.goのEdges()でエッジ定義を行う posts Account Post edge.Toでエッジの向きとプロパティなどを設定する

9.

9/11 エッジの設定② もう片方の設定ファイルで逆向きのエッジを定義する posts Account Post account edge.Fromで逆向きのエッジやプロパティなどを設定する

10.

定義したデータモデルの確認 プロジェクトルートで go run -mod=mod entgo.io/ent/cmd/ent describe ./ent/schema を入力すると、設定したモデル定義を確認できる 10/11

11.

11/11 ここまでのまとめ ・グラフ構造でデータモデリングを行うことで、GraphQLでDB操作をしやすくできる ・RDBのテーブル定義をグラフ構造で直感的に定義できる ・現時点で設定しているデータモデル定義をいつでも確認できる