「親亀こけたら小亀もこける」のが外部キーだと思うのだけど

久しぶりにDatabaseの話。

あるシステムの解析で、摩訶不思議なビューがいくつかいた。
中身はそこそこ意味合いがわかるようにはなっていたけど、あまりに謎な冗長構成になっていた。

謎とは、こんな感じ。

◆前提条件
あるテーブルがある。これをTABLE_Aとする。
そのテーブルに外部キーを貼っているテーブルがある。これをTABLE_Bとする。

◆謎1
あるビューがある。
そのビューはTABLE_AとTABLE_Bと、それ以外のテーブルとをいろいろ関連付けて構成されていた。
そのビューでのTABLE_AとTABLE_Bの関係は「TABLE_Bの外部キーとなっている項目の存在関係の確認」だけであった。

外部キー貼ってるのに…。orz
親テーブルのTABLE_Aに存在しないデータがTABLE_Bにあるかもしれんから…という思いが製作者にはあったのかもしれないけど、外部キーの存在にきづいとったら、そんなのいらないってすぐわかるだろうに…。

◆謎2
あるビューがある。
そのビューは謎1のような構成のビューがいくつか組み合わさってできていた。
しかも、謎1構成のビューはいろんなところで使われているわけではなく、このビューのためだけに作られていた
さらに、TABLE_Aにあるデータの存在チェックまで入っていた。

何回も意味不明に呼ばれるTABLE_A…。
こき使われています。orz
こき使われすぎです。orz

◆謎3
あるビューがある。
そのビューは謎2のような構成のビューがいくつか組み合わさってできていた。
しかも、TABLE_Aと内部結合していた
最終出力結果はこのビューらしい。あとのビューは中間ビュー。

最後までTABLE_Aはこき使われています…。orz

このビューを最終的に使うんなら、謎1とか謎2で何度もTABLE_A呼ばんでもいいやん。
しかも、何でOracleでこんなにビュー作るねん。
ストアドプロシージャでワークテーブルにデータつっこんでやったほうがラクやんか。
何でこんなにOracleエンジンいじめんの。(涙)

…ってなわけで、Database Loveな私は(--#)な顔して仕事をしていたような気がするのでした。