Contenu connexe
Similaire à Database smells
Similaire à Database smells (20)
Plus de Mikiya Okuno (17)
Database smells
- 2. 免責事項
● 本プレゼンテーションにおいて示されている見解は、私自身
の見解であって、オラクル・コーポレーションの見解を必ず
しも反映したものではありません。ご了承ください。
- 3. 自己紹介
● 今日は個人として来ています。
– http://nippondanji.blogspot.com/
– Twitter: @nippondanji
● MySQL サポートエンジニア
– 2000 年にサン・マイクロシステムズ入社
– 2007 年に MySQL KK へ転職
– 気付くとまたサン・マイクロシステムズに・・・
– 現在は日本オラクルに在席。
– サポート一筋 12 年
● 日々のしごと
– MySQL トラブルシューティング全般
– Q&A 回答
など
- 12. サポートの日常
● そもそも既に困っているからサポートへ
– お客様が既に臭いに気づき・・・
– 手に負えないからサポートへ!!
– 既に手遅れな場合も
● よくあるパターン
– 個性的なテーブルを目にすること幾多
– ややこしいクエリ
– 膨大なスロークエリログ
- 14. 世界は不吉な臭いで充満している!!
● 全員が気づいていないことは誰も気付けない
– ベストでないプラクティスが慣習に
– みんなそれが普通だと思っている
● 日本的なるもの
– 盲目的な前例主義
– 変更を許さない官僚主義
– 面子
● 間違いを指摘できない
● 指摘しても聴く耳を持たれない
- 21. ほとんどの問題はテーブル設計に帰着する
● ひと言で言うと、リレーショナルモデルを無視した設計に
なっている場合は悲劇につながる。
– リレーショナルモデルを正しく使おう!!
● 知らない場合はまず勉強しよう!!
– リレーショナルモデルを知らずに RDBMS を使うのは、オブ
ジェクト指向を知らずに Java を書くようなもの。 HTML
を知らずにウェブプログラムを書くようなもの。運転の仕
方を知らずにクルマを走らせるようなもの。超危険!!
● リレーショナルモデル
– リレーションの演算
– 集合論理
● データベース設計理論
– 正規化
– 直交性
- 24. RDBMS の落とし穴
● リレーショナルモデルに従わなくても強力だったりする
– データに永続性がある
– データをメモリ上にキャッシュできる
– トランザクションがある
– SQL によって柔軟な検索がおこなえる
– インデックスにより高速な検索がおこなえる
– バックアップやレプリケーションなどのツールが充実
– 超便利!!
● 単なるデータの入れ物として使っていませんか?
- 25. リレーショナルモデルの利点
● 開発・メンテの効率化
– Java に例えると・・・
● 例)オブジェクト指向を知らなくても Java は便利だが・・・
– 豊富な API やパッケージ
– 強力な開発環境
etc
● 待ち受けてるのは地獄
– 読みづらい、コードの重複がたくさん、バグだらけ
– リレーショナルモデルに従うと
● アプリのコード量が減る
● データの整合性をデータベースで保証できる
● SELECT がストレートに
● パフォーマンスの向上
● データベースの変更が容易に
- 28. 世界は不吉な臭いが充満している!
● 感覚が麻痺しているかも
– 内輪の常識を疑う
– 赤信号、みんなで渡れば怖くない?
● みんな揃って地獄行き!!
– プログラムや運用でカバーする羽目になる
● コスト大!!
● 目を覚まそう!!
– 改善した結果どうなるか
– 挫けず勇気をもって改善を。
- 29. 危険を回避するために
● リレーショナルモデルに従う。
– データベースの設計には必須の知識!!
● しかしまともに学習する機会はほとんどないかも。
● 何はともあれリレーショナルモデルについての正しい理解
を。
– RDBMS の基本機能だけで満足しない。
– 正規化とはひと言でいうと重複を排除する作業
● 正規化していないとひとつの意味のレコードが複数の場
所に出現してしまう
● すべてを同時に更新しないと更新異常に!!
● データベースをリファクタリングしよう!!
– 世の中は危険な臭いで充満している!!
– 勇気を持って改善を。
- 30. 腐海に踏み込んだあなたへ。
● ガスマスクをつけよう。
– 適切な防御で身を守ります。
– 無ければ即死?
● 毒ガスの正体を見極める。
– 多くのコードはデータの整合性確認に費やされる
– 逆に言うと・・・
● 整合性確認漏れに注意が必要
● 整合性は更新処理で問題になる
– 例)テンポラリテーブルを活用
● 条件が複雑な場合にはスパゲティになりがち
● ひとつの SELECT で解決するのではなく、短いクエリに区
切る
● ストアドプロシージャのほうが上手に書ける場合も
- 31. お勧め書籍
● データベース・リファクタリング以外にも
– SQL and Relational Theory
– The Art of SQL
– SQL Antipatterns
– 44 のアンチパターンに学ぶ DB システム