中国DB勉強会第16回に長駆参加した

2016-07-30 05:30起床して、終電新幹線で帰ってくる強行遠征で岡山の丸一日「SQLアンチパターン」漬けの勉強会に参加してきました。

[@razon さんの　togetter](http://togetter.com/li/1005953) から自分用にさらに抜粋しておきます。

データベース大臣だけど、これは出張扱いにならず、プライベート参加。登壇するにしても首都圏限定とか縛られてるのよね。
プライベートのほうが発表内容の事前査定とか、事後のレポート義務とか面倒事が発生しないから、お気楽なもんだ。

新幹線のIC早割21の使えるタイミングで、@mako_wis さんが増席してくれて、キャンセル待ちから繰り上がったのもありがたかったなあ。

# SQL Server のプロジェクト指向オフライン データベース開発を採用してみた話・実践編

 @kiyokura さんによる、ディプロマティック・イミュニティ（外交特権）の対策。

- ["SQL を書くときに入力補完してくれないような環境を使う価値は無い" (ﾊﾞｰﾝ](https://twitter.com/t_wada/status/759196415511760896)
- [ストアド書くのにステップ実行やブレイク、補完が出来ないツールは使う価値がない。OSS DB勢が全力で息してない事案だ](https://twitter.com/soudai1025/status/759196064649883649)
- [DBの課題](https://twitter.com/soudai1025/status/759193485098426368)  
 - ストアドやトリガーのソース管理
 - 単体テスト
 - 複数DB運用の際のデータベースの状態管理
- [既存のDBからDDLを生成してくれる？](https://twitter.com/ikkitang/status/759197366079463424)
- [SQLは単体テストを書く言語ではない。ないよりはいい](https://twitter.com/mao_instantlife/status/759204936592846852) 
- [スキーマ比較機能はホント便利](https://twitter.com/mako_wis/status/759196000233795585)
- [initdb.sql と updateYYMMDD.sql の二重管理してやってるけど、辛いのよね。](https://twitter.com/masudakz/status/759206283371286528)

二つのDB実体から、スキーマ差分をとってMigrationSQLを生成してくれる機能は激しく欲しい。

# PostgreSQLアンチパターン

日本PostgreSQLユーザ会中国支部長 @soudai1025 さん

- とりあえず削除フラグ
- 困ったときの配列型とJSON型
- マテビューの功罪

2015/11以来の定番ネタ。出た当時に社内に拡散したら、CDOが感心して、@soudai1025 さんの他のスライドも全部読んでたっけ。

# SQLアンチパターン (拡大版) @t_wada さん

こちらも定番スライド。6/2の社内読書会では、20分ダイジェストという弾丸セッションをやっていただきました。

# ディスカッション

既知のスライド発表が３つ中２つもあるのに参加した理由のひとつはこれ。

- 社内読書会が20章まで進む予定で、議論ネタが貯まっていそう
- このイベントが東京だったら参加人数的にディスカッションに参加するのが難しそうだけど、岡山ならコンパクトでいいかんじになりそう

## とりあえず論理削除

- まずINSERTとSELECTだけでサービスを表現出来る集合でまず設計する。
- UPDATE・DELETEができないシステム＝改ざんできないシステム
- テーブル名にm_とかt_って付ける人はおっさん。
 - 銀行の勘定系の経験のある人々
- 俺「m_ とか t_ とかの人じゃないんですが、別方面からINSERTとSELECTだけでやれるとこまでやろうという方針に到達してました。PostgreSQLユーザです。その追記型アーキテクチャが、UPDATEとDELETEのコスト、VACUUMなどのメンテコストを引き上げるところを回避しようとしてのことです。」
- MySQLとPostgreSQLの違いでよくいわれるやつだ
- 珍しくそーだいさんがPostgresについて語り始めた。
- そーだいさん、PostgreSQLも詳しんだ。

## 非正規化

- 正規化することによって得られた、データの整合性・データの重複の排除などなどの利益と結合によって損なわれる効率の問題を天秤にかけて、正規化のために分割したテーブルを結合した形のひとつのテーブルの形で再構成します。
- nextでidを指定してやってオフセットで飛ばす、というのが良いページャの作りだけど、インサートが発生すると困る。が、たいがい人は１ページ目で帰ってしまうという人の特性に基づいてページネーションする。
- ページネーションとかランキングとかカウントとかは、RedisなどNoSQLと組み合わせるのが最近のWebアプリの黄金パターン
- 俺「回避しにくい例として外部連携システムから定期的にCSVで取り込むTABLE。中に同じデータの繰り返しがあっても、正規化するには外もいっしょに直すことになる」
- そういう場合のデータ整合性は、外部側の責任としていくしかないか

## インデックス・ショットガン

- 複合インデックスって意外とつかわれない？　使い方が理解されていない？
- 勘定系の始末書悪夢：「突き抜け」営業時間終了から翌朝の営業開始時間までにバッチが終わりきらない
- "朝までに終わるのではないか"とかもうそういう時代じゃない。そんなのHadoop使え。」

## キーレス・エントリー

- 外部キー制約、つける会社とつけない会社。ここの部屋では半々ぐらい？
- 会社のテーブル定義書に『外部キー制約』を書くらんがないから」
「複合インデックスも、インデックスを書いておくカラムが1つしかないので書かない」
同意しすぎてヘッドバンキングしている
- リバースエンジニアリングするときに外部キー制約がついてないと残念なER図になる。わかる。
- A5 人気
- 俺「うちはSchemaspyでリバースのみ。（だから外部キー制約は基本的につける派）」
- 外部キー制約、100万件オーダまでだったら迷いなくつける。それ以上だとシャーディングするかもしれないので迷う。

社内読書会は、社内の具体的な問題について突っ込んだ議論ができるのがいいところ。社外読書会は、自分のところと異なる環境での知見が広がるのがいいところ。

## NULL恐怖症

- OracleのNULLが空文字と＝な話
- MySQLのNULLが'0000-00-00'と＝の話

# 懇親会：座・スタジアム

- @t_wadaさん[岡山の「座・スタジアム」は全国屈指の LT 会場だと思う #ChugokuDB](https://twitter.com/t_wada/status/759309311029813248)
![座](https://pbs.twimg.com/media/CombyPEUAAETyzl.jpg:small)

ハコも最高ですが、運用ソフトウェアも最高でしょう。長駆参加したもうひとつの理由は、懇親会がこの会場だったから。

## 店のシステム

- 食べ放題・飲み放題
 - アルコール飲料もソフトドリンクも食べ物も、「もうそこにある」状態でスタート。途中で注文とりまとめとかせずにLTに専念できる。
- 一日一組限定予約。予約時間の前も後も他のお客なし。ごゆっくり。

## LT支援

いつからLT始めたっけ？　2008かな2009かな。花田氏に「プロジェクタの使えるいいLT会場をみつけたんですよ」って聞いたのは。

- 長く繰り返し使っているからプロジェクタの勝手もよくわかっていらしゃる
- 始まる前に、酔っ払う前に、LTする人は接続確認というお約束
- 予備機材に感謝
 - 自分のMacBookProのVGAケーブルではだめっぽかったのだけど、HDMIケーブルをお借りして無事発表できました

## オーディエンス

- 盛り上げスキルが高い。高すぎるよ。
- ここのLTの盛り上がりは、LT慣れした常連の「大向こうさん」たちの貢献が大きい。

本当、久しぶりの座・スタジアムだったけど、ここは最高だ。