🙄

プログラムとDBの役割

2023/05/26に公開

はじめに

こんにちは、今回はプログラムとデータベースの役割についての洞察と、SQLとプログラムのバランスについてまとめたいと思います。

きっかけ

私がこのテーマについて調べた理由は、プログラムとSQLのどの部分をどの程度カバーすべきなのか、明確に理解していなかったからです。

プログラムとDBの役割

プログラムの仕事は、データの加工などを行い、なるべく少ない回数のSQLを使用して目的を達成することです。一方、データベースの仕事は、データの移動を最小限に抑えつつ、プログラムが必要とするデータを効率的に取得することです。

問題点

おそらく、これらの考え方は一般的な正論だと思います。しかし、実際にプログラムを書いてみると、go言語においてはone2manyなどの設計でStructがネスト化している場合、思った通りにバインドされないことがよくあります。

よくない

そのような場合、私がよく見かける間違いは、目的の親レコードを取得し、for文を使って親レコードに対応する子レコードをクエリで取得してしまうことです。これは遅延読み込み(lazy-load)と呼ばれ、プログラムのパフォーマンスの低下の原因にもなります。

解説策とまとめ

代わりに、目的の親レコードを取得し、親の主キーと子レコードの外部キーを使用して、関連するデータを取得し、プログラム側で必要な加工を行う方法があります。この方法を採用すれば、クエリの回数を最小限に抑えつつ、柔軟なデータ加工が可能です。ただし、コードの複雑化や長さの増加といったデメリットも考慮する必要があります。ですから、作りたいものをよく考えて、コードを書く際に適切なバランスを保つことが重要です。

Discussion