skillup

技術ブログ

Database

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

投稿日:

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

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

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

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

参考文献

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

複数の表結合

デメリット

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

対策

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

許されるケース

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

メモ

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

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

デメリット

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

対策

リファクタリング

メモ

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

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

デメリット

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

対策

正規化を正確に行う

許されるケース

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

メモ

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

 

-Database
-,

執筆者:


comment

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

関連記事

no image

MySQLのLIMIT,OFFSETに関して&explainの見方など

自作のWEBアプリを作っていたところSELECT句が異常に遅いケースがありました。 発見までにかなり時間がかかったんですが、不可思議な現象としてはOFFSETが小さいときと大きいときで検索スピードが全 …

no image

JPAを使用する  JavaSE編

現在の開発ではデータベースへの接続ではJPAを使っています。このJPAがなかなか曲者でいろいろと詰まることがありましたので解説させていただきます。 Contents1 JPAとは?1.1 メリット1. …

no image

自己結合のイメージ

前回に引き続き結合について考えます。 例えば下記のようなテーブルがあり、重複行を削除するとします。 1 りんご 50 2 みかん 100 3 みかん 100 4 みかん 100 5 バナナ 80 この …

no image

JPAまとめ

JPAわけわかんねーと思い、触りはじめてから3か月ぐらいたちます。 いまだに細かい部分はよくわかっていないことは多いのですが、全体像というか何となくどういうものかはわかり始めてきたいのでまとめたいと思 …

no image

正規化について&EXTRACT

Contents1 正規化とは?2 第一正規化3 SQLネタ EXTRACT 正規化とは? 正確な定義は難しいですが、8割ぐらいあっている定義としては「適切なテーブルに分割すること」です。※ただし正確 …