skillup

技術ブログ

Database

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

投稿日:

重すぎるOLTP

※OLTP=オンライントランザクションシステム(多数の端末から中央のデータベースにアクセスするタイプのシステム)

デメリット

速度を要求されるシステムなのに、遅いためユーザー離脱などにつながる。

対策

  • 早い段階でのプロトタイプでの性能確認(大量データでの性能確認)
  • 業務要件自体が無理
  • 非正規化
  • 実行計画での早期確認
  • 早い段階での集計表作成

DATE型の型の不統一

デメリット

規約が不十分なため、yyyymmddとyyyymmddhhmmssが混じるなど

対策

  • 規約の再定義
  • 時分秒があるときは00:00:00を入れると事故(意図した検索結果が出力されない)の元になる
  • 日付を検索するときは原則、時分秒までいれていいとおもう(個人的には。)
  • check制約を入れるのもあり
  • データベースだけではなく、画面表示なども混乱することが多い(ライブラリなどで統一した表記にしておいたほうがいいかも)

データ量の想定が甘い

デメリット

システム構築後数年たって、データ量が増えすぎ、パフォーマンスが劣化する

いざ削除しようと思っても、削除していいデータかどうかわからず削除ができない

対策

  • データ削除機能(物理削除)を持たせる
  • 概算値でいいので、データの蓄積量を決める
  • 設計段階でのCRUDの意識

-Database
-

執筆者:


comment

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

関連記事

no image

JPAでのデータベースとの同期

このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

MYSQL group_concat,cast等

実務でいろいろとトラブルがあり、データベースから在庫データを見てくれ~なんて依頼がありましたんでSQLをごりごり書いていたんですが、普段使わないようなSQLの構文を使ったのでここでちょっと紹介します。 …

no image

サブクエリ 移動平均など

前回の応用編です。 日付、入出金、残高はできましたが、ここからさらに、現在のレコードから3行以内(3行あれば3行、なければそれ以内でできるだけ)のレコードの合計値を出す計算を考えます。 結果だけ先に書 …

no image

persistence.xmlのプロパティについて

JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。 (ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource …

no image

cakePHPでの直SQL

今回はCakePHPにて直のSQLを書く方法を。 cakePHPにて大概の処理はもともと備わっているコマンドでなんとかなりますが、まれに直SQLを書いたほうがらくなこともあります。 書き方その1 [c …