skillup

技術ブログ

Database

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

投稿日:

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

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

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

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

参考文献

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

複数の表結合

デメリット

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

対策

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

許されるケース

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

メモ

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

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

デメリット

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

対策

リファクタリング

メモ

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

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

デメリット

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

対策

正規化を正確に行う

許されるケース

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

メモ

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

 

-Database
-,

執筆者:


comment

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

関連記事

no image

CakePHPでの数字カンマ区切り&PHP&MySQL曜日の出力

今回は主に時間やお金の表示など、出力に関するネタです。 Contents1 Cakeでのカンマ区切り1.1 単純なカンマ区切り 例1,0001.2 \をつけるケース 例 \1,0001.3 円をつける …

no image

アンチパターン 参照渡しと値渡し+キー情報の設定+同一値を複数テーブルに配置+正規化が不十分+集計表+不適切なステータス値

本日は自分がデータベースの設計をしていて気を付かないといけないなーと思った点などを。 注意点としては設計のミスは実装で取り返しにくいことが多いので極力気を付けましょう。あといろいろなテーブルのパターン …

no image

Webの高速化に関して

Webの高速化に関してメモ。 高速化って言っても幅広いんですけどね。自分が行なっている対策に関して。 一応LAMP環境を前提にしてます。 Contents1 一番大事なのは測定2 DB対策3 フロント …

no image

第二、第三の正規化&ER図&Check制約

前回第一正規化を話したので、第二、第三に進んでいきます。 Contents1 第二正規化とは?2 第三正規化とは?3 正規化のメリット4 ER図5 本日のSQLネタ Check制約 第二正規化とは? …

no image

アンチパターン データ分身の術+DBの不要な連携+バージョンアップ未テスト

今回のアンチパターンは主にデータ設計に関する部分。 Contents1 同一データの使用1.1 デメリット1.2 対策2 DBの不要な連携2.1 デメリット2.2 対策3 サーバーの移行やバージョンア …