skillup

技術ブログ

Database

データベース設計のアンチパターン 複数表結合,大作SQL,Blob型の乱用

投稿日:

データベースのアンチパターンに関して。

以前下記ブログでも書いたんですが設計のスキルに関してもう少し身に着ける必要があるとおもい、チェックします。

論理設計のグレーノウハウ サロゲートキー
論理設計のグレーノウハウ 列持ちテーブル、集計キー、多段ビュー

今回お世話になりそうな本はこれです。

参考文献

44のアンチパターンに学ぶDBシステム

複数の表結合

デメリット

正規化が徹底されておらず、SQLのレビューもされていないため、表の結合が多すぎて解読しにくい、サービスイン直前でデータが増えた場合、パフォーマンスに問題がある

対策

表設計の見直し、SQLの構築

許されるケース

集計や帳票出力などの多数のテーブルデータをどうしてもつなぐタイプのもの

メモ

SQLの結合はプログラムのループに近い。ループが小さいもの(カーディナリティが小さいもの)を先に条件付けしたほうが、早く結合が行える

大作SQL(いわゆるスパゲッティ)

デメリット

性能が悪く、実行計画が悪くなりがち

対策

リファクタリング

メモ

実行計画やSQLのアルゴリズムについて勉強すること

BLOB型の乱用(シリアライズしてデータを格納)

デメリット

結合ができない。SQLを利用した検索もきかず、パフォーマンスに問題が出る。

対策

正規化を正確に行う

許されるケース

本当にバイナリデータを格納する(あるいはそれに近いケース)。本当のシリアライズが必要なときなど

メモ

本当にシリアライズするタイプのデータ以外は基本正規化していれる。また文字数でもむやみやたらにtextを使わない

 

-Database
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

MySQL safe mode

MySQLに関してしっかりパスワードをチェックしていれば問題ありませんが、中にはrootパスワードをわすれた!なんてこともあるでしょう。 そんなときはsafe modeで実行することでrootのパスワ …

no image

O/Rマッパー iciqlについて

以前、このブログでも紹介したO/Rマッパーのiciqlについて、使い方や問題点がある程度わかったので書いておきます。 Contents1 インストール2 自動生成3 注意点3.1 Date型のインポー …

no image

SQL基礎 手続き型言語と集合思考の言語

どんな仕事でもそうだと思いますが、長年惰性で使っていると日常の作業はなんとかできてるけど、実は深く理解していない&効率のいいやり方を知らない、ということが結構あります。 私の場合、ちょっと前にCSSを …

no image

SQL問題

今までやったSQL問題などのまとめ。定期的にやる予定です・・ 自分用なのでテーブルデータとかあったりなかったりいい加減です(汗) SQLドリル 問題1 nameとageで構成されたテーブルがあるとして …

no image

日付がらみの処理に関して(MySQL&Java)

MySQL触りだして3年ぐらいたつんですがいまだに整理できないことが多いです。(特に日付がらみ) ちょっとJavaのネタと合わせて整理しておこうかなーと思います。 Contents1 MySQLの日付 …

アーカイブ