本記事は、なぜデータ層(データベース側)にロジックを配置しなければならないのか、というソフトウェア設計の根幹に関わる重要な設計理念について詳細に説明しています。
この設計は、効率、コストダウン、安全性(セキュリティ) の3つの目標を実現するために行われます。
1. 根本的な設計理念(MVCモデル)
データ層にロジックを置くことは、単なる技術的な選択ではなく、ソフトウェアエンジニアリングにおける「重要な設計理念」に基づいています。
- MVC(Model-View-Controller)設計理念: この理念に基づき、M(Model)がデータ層を指します。BigQueryやOracleといったデータベースソフトウェアがこのデータ層に該当します。
- 実現すべき3つの要素: この設計理念を採用し、データベース上にロジックを構築する目的は、効率(効率アップ)、コストダウン、そして 安全性(セキュリティ) の3点を実現することです。
2. 効率の向上とコストダウン
難しいデータ検索や処理をデータベース側で行うことは、システムの効率を劇的に高め、結果としてコスト削減につながります。
データ処理の効率性
- データベースの専門性: データベースソフトウェアは、データの組み合わせや検索といった処理に特化して設計されたソフトウェアです。
- 圧倒的な優位性: データベースソフトウェアでの処理は、JavaScriptなどで
forやifといったロジックを組むよりも、100倍、1000倍効率が良いとされています。
- 処理の役割分担: したがって、難しいデータ検索は、フロントエンド側やバックエンド側のロジックで組むのではなく、そもそもデータベース側で処理を行うのが最も効率的です。
通信量の削減(コストダウン)
- データの整理整頓: 効率とコストダウンのためには、データベースからバックエンド側にデータを送信する前に、SQLを用いて必要最低限のデータに整理整頓しておくことが重要です。
- 通信コストの削減: 整理整頓されていない、無駄に大きなデータをとりあえずバックエンド側に送信すると、通信量がとにかく高くなってしまいます。
3. 安全性(セキュリティ)の確保
データベースのロジック(ビュー)は、機密性の高いデータを保護し、システム全体の安全性を保つ役割を果たします。
- 敏感なデータの保護: データベース上には、時として敏感なデータ(機密データ)が保存されています。
- アクセス権限のリスク回避: これらのデータに対するアクセス権限を、フロントエンド側やバックエンド側に全て渡してしまうことは危険です。
- ビューによる制御: 安全性を保つため、データベース上にビューを作成し、このビューを通じて、必要最低限のデータだけを渡す仕組みを採用します。
- 直接アクセス禁止: データベース上に保存された敏感なデータが漏洩するのを防ぐため、ユーザーやアプリケーションからの直接アクセスはさせません。エンジニアが書いたビューを通じてのみデータが送信される形式を取ります。