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

checkboxでの値の管理

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

no image

SQLインジェクション

セキュリティ関係の知識がぬるいのでちょっとお勉強。 知っていることもあるが復習もかねて勉強を。 Contents1 SQLインジェクションとは?2 被害3 対策4 参考サイト・書籍5 ソース SQLイ …

no image

ajaxのasync:falseと複数DBのjoinに関して

本日も小ネタ集です。 Contents1 ajax:false2 複数DBでのJOIN ajax:false ajaxは非同期処理が基本ですが、async:falseとすると同期処理になります。 ただ …

no image

Postgres リモートホストからの接続他

今まで使ってきたデータベースはMySQLがほとんどなのですが、最近少し、Postgresを触っています。 今回はパスワードの設定とリモートからの接続など。 Contents1 postgresへのログ …