skillup

技術ブログ

Database

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

投稿日:

今回のアンチパターンは主にデータ設計に関する部分。

同一データの使用

以前説明したアンチパターン「同一値を複数テーブルに配置」に少し近い。テーブルが無駄に分かれており、同一データ(とおもわれるもの)が複数テーブルにある。または意味不明な複数のテーブルが存在している。

デメリット

  • データ同士の同期が取れなくなり、いずれ差分が起こる
  • どのデータが正かがわからなくなる
  • 時間がたつにつれ複数のテーブルに同じ処理をしなければならないため、追加開発のコストが高くつく

対策

  • 時間がかかっても不要なデータ重複をなくしていく
  • 全体のデータモデル図を書く
  • 安易にこのデータをこちらにコピーみたいなことを行わない

DBの不要な連携

処理に必要なデータが別々のDBに散らばっているため、不要な連携が行われる。追加開発において、既存部分への変更を最小限にするために安易にDB連携を行ってしまうことが多い。

なお「同一データの使用」を避けるために、この手法がとられることもある(元のデータに変更を加えたくないため。)。

デメリット

  • SQLが非常に遅い(ネットワークの通信速度はメモリアクセスに比べてはるかに遅いため)
  • 他のデータベースの影響を受ける(あるDBが止まると自分も影響を受ける)。

対策

  • 時間をかけて再構築を行う

サーバーの移行やバージョンアップでSQLテストを行わない

バージョンアップによる不具合。データベース以外にも通常のアプリなどでもあるため、バージョンアップを甘く見ないこと

デメリット

  • SQLの遅延(実行計画はバージョンにより大きくかわるため)

対策

  • 開発環境にてバージョンアップを上げておく
  • 仮想環境ツールなどを有効に使うこと
  • 業務に影響度が大きいSQLをリストアップしておき、優先的にテストを行う

-Database
-

執筆者:


comment

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

関連記事

no image

SQL基礎 結合に関して

SQL実践入門を読んで勉強しておりますが、本日は結合に関して。 Contents1 クロス結合2 内部結合3 外部結合4 結合のアルゴリズムとパフォーマンス4.1 NestedLoops4.2 Has …

no image

MySQLの大文字、小文字問題について

MySQLでテーブルを作る際にカラムに重複を許さない制約(unique)を振ることがあると思います。 数字の場合は問題ないのですが、文字列の場合、なんと英語の大文字と小文字が区別されません。 つまりa …

no image

SQLのチューニングに関して

ここ2か月ぐらいはSQLの本でがりがり勉強してきましたね。当然復習も必要かと思いますが、だいぶいろんなことを覚えたなあという気がします。 一番勉強になった本はもちろん「達人に学ぶ SQL徹底指南書」と …

no image

データベース設計のアンチパターン 重すぎるOLTP+Date型不統一+データ量想定が甘い

Contents1 重すぎるOLTP1.1 デメリット1.2 対策2 DATE型の型の不統一2.1 デメリット2.2 対策3 データ量の想定が甘い3.1 デメリット3.2 対策 重すぎるOLTP ※O …

no image

SQL結合 サブクエリに関して

今回はサブクエリに関してです。 もちろんSQL実践入門を読み進めています。 SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。 以下 …

アーカイブ