skillup

技術ブログ

Database

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

投稿日:

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

同一データの使用

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

デメリット

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

対策

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

DBの不要な連携

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

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

デメリット

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

対策

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

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

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

デメリット

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

対策

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

-Database
-

執筆者:


comment

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

関連記事

no image

ユニークキーの設定

MySQLでのユニークキーの設定に関して。 ユニークキーの設定は下記の通り。

ユニークキーを作成した後に確認するのは下記コマンドで。 …

no image

cake sql系+リレーション+ヘルパー

先月末に引き続いてcakeネタをもりっといきます。 といっても自分用の小ネタリンク集です。 Contents1 sql系の小ネタ1.1 findとread1.2 find(‘count&# …

no image

EXISTSについて

今回はEXISTSについてです。 実務では伝票と明細との検索関連の処理で結構出てきます。 なお、達人に学ぶ~では論理学について少しふれており、この領域を本気で理解する場合は論理学を勉強する必要がありま …

no image

CASE式のすすめ

SQL実践入門を7割がたぐらい終えたところで同著者の方の「達人に学ぶSQL徹底指南書」を学習しようと思っています。 この方の著書は気づいたら結構読んでましたね。 Contents1 CASE式での注意 …

no image

slow-query-logについて

データベースを伴う部分でののチューニングですが、大きく分けると SQLを書き直す インデックスを張りなおす プログラム内部でキャッシュを有効化する 設定ファイルの修正 上記のようなかんじになるのではな …

アーカイブ