データベースとオブジェクト指向と

データベースとかほとんど使わないのですが、興味があったので勉強も兼ねて、データベーススペシャリスト試験をこの前受けました。(受かっているかは知りませんが)

勉強してみて、オブジェクト指向とデータベースの関係について気づいたこと・疑問におもったことを、まとまっていませんがメモします。


多くの人が試行錯誤した結果、データベースの設計にもデザインパターンがあります。第3正規形というやつです。オブジェクト指向での設計の際に言われないですが、正規形の考え方は意識したほうが良いように思いました。第3正規形のように、クラス内のメンバーに推移的関係性があったら、内部クラスでもいいですが、別クラスに分けた方がいい場合もあるかと思いました。

テーブル上の行を一意に決定するのが主キーです。オブジェクトを一意に決定するのはポインタが指すアドレスです。しかしながら、アドレスはDBに保存しても意味がないので、主キーとしては別の値を設定します。このミスマッチがオブジェクトをDBに保存する際に問題だと思いました。

また、Rubyのように数もオブジェクトであっても、DBに格納する際は結局スカラー値になってしまう点も、どうしようもないですが気に食わない。

そもそも、テーブルとオブジェクトは対応しているのか?オブジェクトは木構造だから、木構造を維持したまま保存した方が自然じゃないだろうか?そう思ったらリレーショナルデータベースでなくて、MongoDBのようなものもあるらしい。

値はなんとかなりますが、メソッドはどうでしょう?

オブジェクト指向は値とそれに関するメソッドがオブジェクトという入れ物に一緒に入っているからいいのに、DBには値しか格納できない。インスタンス毎にメソッドの中身が変わっているようなものはDBに保存できない。動的にメソッドを付け替えるとか、オブジェクト指向なら普通にするし、それがオブジェクト指向の良さだ。しかし、それをDBに保存するのは、できないからやらないのか?もし性能とかの互換性とかの課題がクリアされて、できるようになったら、そういう設計はありうるのだろうか?

おそらく同じようなことを考えている人が、ORマッパー等を作って工夫しているのだろうけど、キレイに解決はされていないようだ。