skillup

技術ブログ

Database

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

投稿日:

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

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

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

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

参考文献

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

複数の表結合

デメリット

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

対策

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

許されるケース

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

メモ

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

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

デメリット

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

対策

リファクタリング

メモ

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

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

デメリット

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

対策

正規化を正確に行う

許されるケース

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

メモ

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

 

-Database
-,

執筆者:


comment

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

関連記事

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

データクレンジング

リレーショナルデータベースでデータを管理する前に、しなくてはいけないことはデータをデータベースに登録できる形に整形することです。 このことをデータクレンジングといいます。 これを行わずに何も考えずにデ …

no image

データベースの権限設定

データベースを作成するときに

と入力していますが、ほぼ機械的にこれを売っているのでこれを機にどんな使い方があるのかを調べてみました。 …

no image

DBUtils活用

普段はJavaEEで開発を行っているのでデータベースへのアクセスはJPAを活用しています。 ただ、JavaEE環境だとglassfish経由でデータベースを動かしているので、glassfishを動かさ …

no image

JavaでのSQLの書き方

ちょっと小ネタです。 通常SQLを記述する場合、縦に分けて書くのが見た目にも見やすく、保守性も高いです。 例として

と書くよりは、 [ …