---
# System prepended metadata

title: 2021-03-17 Pair-A v2 定例
tags: [Pair-A v2]

---

# 2021-03-17 Pair-A v2 定例

## 疑問
### 粟田
#### ビューから実データを更新する
これをやりたいケースが思い浮かばない。実例があれば聞いてみたい。

- 更新するクエリが短く書けそうなので使えそう
- セキュリティ的に実際のテーブルへのアクセスが許可されていない場合

#### 楽観ロックのやり方

- UPDATE 文の WHERE 句に PK とロックキーを指定することで実現する？
  - このケースだと、WHERE句に必ずロックキーを入れる必要がある。忘れたら楽観ロックの意味がなくなるのでやや危険な気がする。
- ロックキーはデータベース側で更新されるたびにインクリメントするような形にしておく？それともアプリケーションで指定する？
- 具体的な実装方法

#### 楽観ロック、悲観ロックの採用基準

- 「楽観ロックで十分」という意見も見かけるが、どういうケースにおいてどちらを採用するのか実例を合わせてきいてみたい

#### ロック解除漏れ

- 実際にどの程度までロックが解除されないことを想定して作っているか
  - 時間でロックが自動的に解除される仕組みや管理者によるロック解除など、具体的な実例があればきいてみたい
#### ロストアップデートの発生有無
- 楽観ロックだとロストアップデートは起き得ると考えているが、間違いないか？
    - 対象行がロックされているわけではないため、同じタイミングで同じ行に対して更新が行われる可能性はある
- 悲観ロックだとロストアップデートは起きないと考えているが、間違いないか？
    - トランザクションの開始から終了まで確実に対象行はロックされているので、起きない

#### InnoDB なら、REPEATABLE READ でも Phantom Read が発生しない理由

トランザクションが続いている間に、他にユーザーから読み取りアクセスがあった場合は、その直前のスナップショットを返すため、他ユーザーは追加や削除を検知しないため、Phantom Read が防げる？
https://ja.wikipedia.org/wiki/MultiVersion_Concurrency_Control
- 聞いてみる

#### Non-Repeatable Read と Phantom Read の違い

なんかわざわざ分ける必要あったのか気になる
他トランザクションでコミットされた更新データが読み取れてしまうという動き自体は同じなので、どういうふうに扱いを分けるのかよくわからない
- 複数回検索して起きるか、いきなり起きるか

#### ER 図に型情報とかを書く必要があるか

あくまでER図はテーブル間の関係性を示すものなので、PK,FK,型くらいまでは書いても良いのかなと思っている派
- チームで聞いてみる

#### ER 図と定義書以外にデータベース関連の資料で必要と思うものはあるか

- 自分のイメージとしてはこの2つがあれば特に他はいらないかなという認識
- ER図や定義書はデータベースのツールによる自動生成で作ることが多い？
    - それともテキストベースで作ることが多い？（差分が見やすい）
- どういうふうにドキュメントを作って管理していくのか
- 資料といった資料はなかった（手書きのポンチ絵はあった）

### 玄徳

#### 中間テーブルの命名について

https://qiita.com/tkawa/items/dc3e313021f32fd91ca6

テーブル名A_テーブル名Bみたいにするのは、安直？明らかに中間テーブルであることがわかりやすくてむしろよい？
中間テーブルが生まれる理由はそもそもデータベース都合であることが多い
DDD的には「それが何なのか？」名前付けたほうがよいかも？
テーブルの名前ソート機能とかも考えてあげると良いかも

- フレームワーク側に認識させるための決まった命名がある
  - ルールに乗っかった命名をするとフレームワークが自動で拾ってくれたりする
    - アンダーバーしばりはデフォルトというだけで、設定で返れたりもする
  - rails, laravel
  - ORマッパーを使うと中間テーブルを意識しなくてもとれてこれたりする

#### idが必要なテーブルとそうでないテーブル

サロゲートキー？とは → ユニークになるキー！
なんでもかんでもサロゲートキー持たせるのはアンチパターン、とも言われている
例えば中間テーブルは組み合わせでユニークになる
サロゲートキーのせいでバグるということは少なく、たいてい設計のせい
サロゲートキーがあれば取得のクエリ書きやすかったりする

- どのようなアンチパターンなのか？次第

### 永井

#### mysqlのREPEATABLE READでファントムリードが発生しないならSERIALIZABLEと同等ってこと？
  - ファントムリードに焦点を合わせれば同等と思われる。
#### 交差テーブル名の命名はどうすべきか？
#### 一意になるIDは連番とかでいいの？
- アプリでUUIDをランダム生成して割り振る
- オートインクリメント
  - 完全にランダム性を求めるなら良くない
  - PKがソートされてるっていう属性を持たせたくないならやめといたほうがいい
- 顧客番号とかをオートインクリメントにしてあげると、登録順とかをそこからとれるかも
#### ER図を作成するツールでおすすめは?
- plantUML
- cacoo
- draw.io
- デザインツール(figma,scratch)
- excel

#### DDL -> plantumlのer図、plantumlのer図 -> DDL したいけど、どうすればいい？
- DDL -> ER図ぐらいしか使わない。

#### ER図にもいろいろな規格があるがどれを使うべきか？
　　最もポピュラーなのは
　　　IE記法
　　　IDEF1X記法
　　[若手プログラマー必読！５分で理解できるER図の書き方５ステップ](https://it-koala.com/entity-relationship-diagram-1897#ER-2)


###### Tags: `Pair-A v2`