「親亀こけたら小亀もこける」のが外部キーだと思うのだけど
久しぶりに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な私は(--#)な顔して仕事をしていたような気がするのでした。