質問: 今、データベースを構築しようとしてるのですが、どういう構造にしようか迷っています。 案件としては、「アカウントがあり、アカウントが商品を購入すると、購入履歴に商品が追加される」というものです。 (まだO/Rマッピングに疎いので合ってるかわかりませんが)愚直にO/Rマッピングをすると「Userクラスがあり、historyというフィールドがあり、データベースと連携させる」となると思います。 Twitter API風にするならUserクラスはidを格納していて、historyを持たず、API::history(id)として履歴を取得するのと思います。 データベース初心者でどちらで設計するべきか悩んでいます。Twitter API、O/Rマッピング、はたまた別の手法、どれが適しているのでしょうか?
回答: O/Rマッピングはオブジェクト指向設計とリレーショナルデータベース設計の差異を吸収してうまいこと橋渡しするための実装上の工夫のことです。 O/Rマッパーは言語によって色々ありますが、内部的にはDBクエリを発行しており、どのようなクエリを発行しているかを意識しないでオブジェクト指向チックにデータアクセスの実装が可能です。 使用するにはオブジェクト指向設計とリレーショナルデータベース設計に関する深い知識が前提にあります。 ネットに溢れるサンプルにはO/Rマッパーを使用すればさくっと書けるという記述が散見されますが初心者、特にDB初心者が使用すると大切なDB設計に関する知識が抜け落ちてしまう危険性があります。 中級者以上になるにはデータベースに関する知識が大切だと個人的に考えています。 O/Rマッパーを使用することとデータベース設計をどのようにするかは無関係です。テーブルの正規化をしっかりと行い、効率のよいインデックスを貼り、クエリとスキーマの最適化を図ることでチューニングする。設計はプログラムの実装よりもっと大切なもののはずです。 また、「Twitter API風」とおっしゃっていますが、APIの返り値とDB設計は無関係です。