skillup

技術ブログ

Database

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

投稿日:

重すぎるOLTP

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

デメリット

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

対策

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

DATE型の型の不統一

デメリット

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

対策

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

データ量の想定が甘い

デメリット

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

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

対策

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

-Database
-

執筆者:


comment

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

関連記事

no image

SQL基礎 ウィンドウ関数

SQLの基礎(主にSELECT)を whereはレコードに対しての集計、havingはレコードの集合に対しての集計 ビューは一時的なselect文なのでサブクエリとほぼ等価 条件分岐で出力項目を変えた …

no image

SQLクエリ比較

クエリの比較 SQLにおいては全く同じ結果を返すのであってもその検索結果が異なるということはよくあります。 例えば下記のようなテーブルがあった場合 co_cd | district —&# …

no image

JPAでのリレーションに関して

JPAではテーブルをクラスで定義します。もちろん例外とかはいろいろあるのですが、1テーブル1クラスというつくりで、これをエンティティと呼びます。 もともとクラスを作ってからDBを作成したり、JTAの規 …

no image

SQLの高速化について&explain

本日はSQLの高速化について。 高速化といってもさまざまなテクがあると思うのですが、代表的な考え方に関して。 Contents1 高速化に関して1.1 index1.2 ディスクアクセスを減らす1.3 …

no image

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

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