DoorKeeper
http://sqlap.doorkeeper.jp/events/6643
以下の書籍をターゲットとした読書会なのです。
![]() | SQLアンチパターン (2013/01/26) Bill Karwin 商品詳細を見る |
場所はいつもの湯島、株式会社アルティネットさんです。
いつも会場提供ありがとうございます。
参加者は10人かな。
おなじみの顔ぶれです。
実はDoorKeeperのタイトルが「サーティーワンフレーバー」となってますが、正式には「サーティワンフレーバー」。
私も今まで、「サーティーワン」だと思ってましたが、違った。。。
ちなみに書籍はちゃんと「サーティワン」となってます。
サーティワンアイスクリームと言えば、子供のころ、スイミングスクールの帰りにオカンによく買ってもらったなぁ。
と、昔のことを思い出してとても懐かしくなりました・・・
生まれてから小学校3年生まで、愛知県春日井市というトコに住んでたんですが、その町の一番のショッピングモールにスイミングスクールも、31アイスクリームもあったのです。
ということでGoogle先生で検索してみたら、まだあった・・・!
サーティワンアイスクリーム アピタ高蔵寺店
超・懐かしい!
makopi23はこの後ブログ書くのしばし放置し、Googleストリートビューで懐かしき故郷を探検したのであった。。。
■アジェンダ
今回は @tkfuji さんがスライドを作って説明してくださいました。
スライドが大変充実していて、とても勉強になると共に小ネタも多くて笑いありw
あと、今回のスライドを作るために31アイスクリームを実際に店に買いに行ったそうです。素晴らしい!
ちなみに @t_wada さんも書籍執筆時に31アイスクリーム買いに行ったそうなw
■ディスカッション
今回もディスカッションしたいネタを付箋に書き出しました。

■サーティワンフレーバーをやってしまう場合
・そもそも、サーティワンフレーバーな設計を考える前に、10.5の解決策を思いつくのが普通では。
・キーレスエントリー(4章)な設計をしている場合はサーティワンフレーバーは有り得るのでは。
→ そうともいえない。例えキーレスエントリーだったとしても参照テーブルを用意すればINNER JOINで使うことで恩恵を受けられる。
・ENUMとかCHECK制約とか駆使してサーティワンフレーバーな設計をして足元をすくわれるのは、DB信仰者が多い。
・逆にキーレスエントリーな設計をする人は、DBMSを信用してない人たちが多い。
■ドメイン(DOMAIN)やユーザ定義(UDT)による制約
・DOMAIN やUDTは、UMLが出始めた時から出始めた。
・ドライバが高機能になってきたC/S時代は使用が多かったかも。
■アンチパターンを使ってもよい場合(10.4節)
・相互排他的な場合でもダメな場合がある。
→ 例えばISO 5218では「性別」の標準規格として、「不明」「男性」「女性」「適用不能」の4種類を定義している。
→ コード値を勝手に振るのは最後の手段とすべき。
(ISO 5218: http://ja.wikipedia.org/wiki/ISO_5218)
■ENUMデータ型
・ENUMデータ型を指定したカラムには、値ではなくインデックスが入っている。
→ ソートした時に文字列順にならない。
・しかもインデックスが0始まりじゃないので、罠でしかない!
→ 「0=男性、1=女性」のような割り当てをアプリ側でしていると、DBのENUM列とズレが発生する。
→ データ移行の際に問題となることが多い。
→ というのもENUMデータ型を指定したカラムの中だけ見ても、中身はインデックス値が入っているので気づかない。。。
■値設計
・データ中心アプローチを実践しているエンジニアは、値設計を3種類に分けている。
(1) フラグ
(2) 区分
(3) コード
・値設計はそんな単純じゃない。
・どういうライフサイクルを持っているかを考えて、設計する必要がある。
・そう考えて設計すれば、ENUMデータ型になるカラムはだいぶ減るはず。
・フラグとして使えるBoolean型はSQL標準じゃない。
・勝手に採番すると、国際化対応で破綻することになる。
■値の廃止(10.5.3節)
・BugsテーブルのstatusカラムにDEFAULT 'NEW'と設定し、かつBugsStatusテーブルのstatusカラムに外部参照制約を付与した場合、BugsStatusテーブルのstatusカラムから'NEW'を消したり更新したらどうなる?
→ たぶんDBMSが参照を管理してて、変更出来ないんじゃないか。
・DEFAULT値の変更自体は、ALTER文で行ける。
→ ロードバランシングして、リネームテーブルを用意して本物と偽物を一瞬で入れ替えるとかで対応可。
→ ただ、ALTER文はロックが掛かるので一瞬DBが止まる。
■「プログラマのためのSQL 第4版」のP.70の注釈
・↑が凄い BY @t_wada さん
![]() | プログラマのためのSQL 第4版 (2013/05/24) ジョー・セルコ、Joe Celko 他 商品詳細を見る |
■サーティワンフレーバーとこれまでのアンチパターンとの類似性
・サーティワンフレーバーって、これまでの1~9章のどれかと似てる気がする。。。
・固定情報を割り当てるという点では、8章の「メタデータトリブル」に似てるかも。
・5章のEAVに一番似てるかも。
★感想:
サーティワンフレーバーを最初読んだとき、この設計は無いわー、と私は思いました。
というのも、ふつーに第三正規系を思い浮かべると、この設計にはならないなぁ、と。
CHECK制約とかENUMとか思いつく方が珍しい気がする。
んでも、この日の読書会でいろいろな話を聞いて、このパターンを取りえる場合もあるのだなぁ、とあらためて勉強になりました。
あと、DBMSっていろんな機能をデフォで持ってるんやなぁ、と改めて気付かされた。
DOMEINとかCHECKとかENUMとか、これまで使ったことないし、存在さえ知らなかった。
上手に使えば、なんか使い道ありそうだ。
主催者の @natsu_nanana さん、参加者の皆さん、ありがとうございました~
★オマケ
勉強会の後、みんなでアイスクリームを買って帰るの巻。
今日の紹介スライドは素晴らしかった!おかげでアイスが食べたくなったので、コンビニで買って帰宅! #sqlap
— makopi23 (@makopi23) October 17, 2013
アイス買うか…寒いけど
— とーます (@grimrose) October 17, 2013
帰宅です。アイス買ってきた〜。
— Nao YAMAMOTO (@natsu_nanana) October 17, 2013
ふと、 #sqlap を検索したらアイスを食べたくなってきた
— あくらる@残像 (@akuraru) October 19, 2013
- 関連記事
-
- 「第8回 湘南国際マラソン」に参加しました
- SQLアンチパターン読書会 「サーティーワンフレーバー」に参加しました
- 「第41回 すくすくスクラム Team Geek Into Darkness」に参加しました