---
# System prepended metadata

title: 2021-03-25 メンターセッション
tags: [Team-2]

---

# 2021-03-25 メンターセッション

## 質問

### テーブルにおいて一意になるIDはどのように設定すればよいのか
- アプリ側でUUID割り振る
- DDDでエンティティ作っているから
- オートインクリメントでは、DBに永続化されるまでIDが確定しない
    - エンティティに対してIDを外から設定可能なSetterを作る必要がある

### ER図を作成するおすすめツール

- PlantUML … たくさんいるチームで共有したい
- miro … ざっくり書くとき
  - 概念だけ書く → ドメインモデルに落とす、みたいなプロセスで作りやすい
[Miro: the collaborative whiteboard platform for distributed teams](https://miro.com/signup/)

### ER図の記法について

- リクルート時代はIE記法で書いていた
- 覚える量が少ない方を選びたいという理由

### 楽観ロックについて

- `AND Version = ...`の書き忘れ → 防げないかも
- いつ使うのか？
    - コンフリクトが発生する頻度が高ければ悲観ロック、低ければ楽観ロックで良い
    - 悲観ロックはオーバーヘッドでかい
- 楽観ロックを自分で実装したことはない
    - ORマッパーが解決してくれるなら…と検討したことはある
    - prisma
- ロックキーはDBで用意したい
    - RDBじゃなくてファイルに保存しようみたいな話になったら…
    - アプリケーション側で用意するとなったら、責務の範囲がおかしくなってないか？

**楽観ロックは実装コストが高いので、可能なら避けたい**

### ロック解除漏れについて

- ロックには行レベルとテーブルレベルの2種類がある
- InnoDBは自動でデットロックを解除する仕組みが用意されている
    - デフォルトで50秒経過してロックを取得できなければ諦める（InnoDBの仕組み、行レベル）
- テーブルレベルのロックだと、デフォルトでは１年間頑張るらしい

### データベース関連のドキュメントについて

- PrAhaはドキュメントを作らない会社なので、特に伝えられることがない
- 集約とか、雑な線とかだけの関係図
    - 多対多とかそういう関係とかは書いてない
    - PKとかFKとかも
- ドキュメントなくても、ドメイン層とデータベースのスキーマ見てもらったらわかってもらえるかな、でやっている
  - ドキュメントは陳腐化するので、ソースコード見てもらったほうがいいと思っている
  - prismaなどのORMを使えば、マイグレーションの履歴と最新のスキーマ情報を確認できるので、そこからDBの定義は確認できる
  - rails → ridgepole

###### Tags: `Team-2`