masalibの日記

システム開発、運用と猫の写真ブログです

ひどいDB設計

仕事の愚痴です

別チームが作ったシステムがある
そちらを引継ぎ、DB設計書を更新した
本当に意味がわからない設計していると思った事を記載する

DB設計書が2つある

チームの中でAグループとBグループに別れてシステムをつくっていた
なぜかAグループとBグループの独自のDB設計書がある
同じシステム同じDBなのに・・・分かれている
そしてAグループのリーダーが辞めて、Bグループのリーダーが辞めた

そして意味の分からないDB設計つが2つ残った

なんで自分が統一(merge)しないといけないだよ

T_T

唯一の救いはフォーマットが統一されている所

PKのカラムが異常にでかいテーブルがある(すべてではないです)

varcharの512だった
UTF8なので1536バイト

普通に作成したらインデックスのエラーになる!!!
もっといいPKはないのか!!
拡張して無理やり通すなら別のPKをはってくれよ
http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0032

記事IDとユーザーIDの名前が一緒だった

「システム名+ID」が記事IDは100歩譲ってわかるが
「システム名+ID」がユーザーIDというのは
まじで設計したやつは頭が・・・
きれいにバイト数も同じだった

他のカラムをみないと
どっちのカラムなのかわからない

テーブル設計書の日本語表記に
XXXXX_ID(ユーザー)と書かないといけない

登録日や登録者IDがNULL許可だった

なんで?許可したの??
デフォルト許可しない設定だからわざわざ許可した
まじでわからない
更新日と更新日がNULL許可されるパターンとされないパターンがあった
その差がまったくもってわからない

ステータスコードや削除フラグがintとTINYINTでバラバラ

どっちかに統一しろよ
しかもintの場合はint(10)とint(11)が混在している
本当に統一しろよ

削除フラグがint(11)を使う理由ってなんだろう??

FOREIGN KEYが1つもない

1つもないだよ!!

ER図の自動作成ツールで出力したら
テーブルが200個以上ならんでいるだよ
関係性とかわかるか!!
プログラムで関係性をチェックしている

mysqlはリレーショナルデータベースだよな〜・・・

トランザクションデータが消す設計になっていない

毎日、トランザクションデータ(作業用データ)が発生するが
そのデータを消し込む設定になっていない

1日1,000件,1年で365,000件程度なら
消し込まないという選択肢も理解できなくはないが・・・

1日に3,000,000~5,000,000件ほど
発生するトランザクションデータを消さない

Google先生のBIGQueryとかに移すとかやってくれれば
使えるのですがそれもない
mysqlに1日に3,000,000~5,000,000件ほど溜まっている
SSDで早くなったとはいえ本当に頭がおかしいと思う

辞める前に消していいのか聞いた所

「このデータはビックデータになるので消せない」

と回答をもらった

消せないじゃなくて使えないじゃないの?

最後にびっくりなのが
システム開発1、2年目の人間のDB設計ならわかるが
10年以上もやっている人達がこの設計をしている

その人達は学歴や経歴はすごいが運用・保守を考えられないみたい
自分が作りたいようにシステムを作っていたらしい

本当に

「趣味でやってください」
と言いたい

引継ぎをしたのは2年前で自分はインフラのみだった
サーバーサイドはブラックボックスだった。
そのブラックボックスを解体していかないといけない
担当者・開発者なんてとっくに辞めている
プログラムのみで引継ぎをしないといけない
本当に泣きが入る

DB設計は初めてに方針をきめるべきだね
http://qiita.com/kiyodori/items/5083ad8bbfc232d01827
http://qiita.com/genzouw/items/35022fa96c120e67c637

上には上がいるね
https://developers.srad.jp/story/14/03/06/063252/