skillup

技術ブログ

Database

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

投稿日:

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

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

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

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

参考文献

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

複数の表結合

デメリット

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

対策

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

許されるケース

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

メモ

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

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

デメリット

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

対策

リファクタリング

メモ

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

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

デメリット

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

対策

正規化を正確に行う

許されるケース

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

メモ

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

 

-Database
-,

執筆者:


comment

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

関連記事

no image

外部結合について 行列変換

今回から外部結合について学習します。 これはCASE式でもやった集合の考え方が大事になってきます。 例えば下記のようなテーブルCoursesとがあるとします。 name | course &#8212 …

no image

SQL基礎 case式について

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

no image

DBの基礎 テーブルとは

CSSを学習したあとはデータベースの学習などを。 参考図書:「達人に学ぶDB設計指南書」基本的にはこれを読んでいきます。が、現状よくわからないところは飛ばしていきます・・・ Contents1 テーブ …

no image

MySQLでの日付関数

MySQLでSUMやCOUNTなんかはよく使うと思うのですが、日付の関数なんかもかなり使います。 今回は、日付の日数をとりたいときの関数を紹介。 例えばあるカラムにある日付が入力されており、現在との日 …

no image

checkboxでの値の管理

formにてcheckboxの値を一つのカラムにいれて管理する機会があったのですが、これ入力更新出会っても検索であっても処理がなかなか厄介です。特に検索の時ですね・・・ 要するに値の候補が1,2,3, …