独自のSQLを記述する
Prisma Client APIは、すべてのデータベースクエリを直感的で型安全、かつ便利にすることを目指していますが、それでもRaw SQLが最適なツールとなる状況があるかもしれません。
これは、特定のクエリのパフォーマンスを最適化する必要がある場合や、Prisma ClientのクエリAPIではデータ要件を完全に表現できない場合など、さまざまな理由で発生する可能性があります。
ほとんどの場合、TypedSQLを使用すると、Prisma Clientの優れたユーザーエクスペリエンスを享受しながら、クエリをSQLで表現できます。ただし、TypedSQLは静的に型付けされているため、動的に生成されるWHERE
句など、特定のシナリオを処理できない場合があります。これらの場合、$queryRaw
または$executeRaw
、あるいはそれらの非安全な対応物を使用する必要があります。
Prisma ClientとTypedSQLで型安全なクエリを記述する
TypedSQLはPrisma ORM 5.19.0以降で利用可能です。以前のバージョンでのRawデータベースアクセスについては、Rawクエリのドキュメントをご覧ください。
TypedSQLとは?
TypedSQLは、Prisma Clientの優れた開発者体験を享受しながら、.sql
ファイルでクエリを記述できるPrisma ORMの新機能です。慣れているコードを記述し、完全に型付けされた入力と出力の恩恵を受けることができます。
TypedSQLを使用すると、次のことができます
- 慣れた構文を使用して複雑なSQLクエリを記述する
- SQLの完全なIDEサポートと構文ハイライトの恩恵を受ける
- SQLクエリを完全に型付けされた関数としてTypeScriptコードにインポートする
- Prismaの型システムの安全性でRaw SQLの柔軟性を維持する
TypedSQLは特に次のような場合に役立ちます
- PrismaのクエリAPIでは表現が難しい複雑なレポートクエリ
- 緻密な調整を要するSQLを必要とするパフォーマンスクリティカルな操作
- PrismaのAPIでまだサポートされていないデータベース固有の機能を活用する
TypedSQLを使用することで、Raw SQLのパワーと柔軟性を犠牲にすることなく、効率的で型安全なデータベースクエリを記述できます。この機能により、カスタムSQLクエリをPrismaを搭載したアプリケーションにシームレスに統合し、型安全性を確保し、開発者の生産性を向上させることができます。
TypedSQLの開始方法に関する詳細なガイド(セットアップ手順や使用例を含む)については、TypedSQLドキュメントを参照してください。
Rawクエリ
バージョン5.19.0以前では、Prisma Clientは型安全ではないRaw SQLクエリのみをサポートしており、クエリ結果を目的の型に手動でマッピングする必要がありました。
TypedSQLほど人間工学的ではありませんが、これらのクエリは引き続きサポートされており、TypedSQLでまだサポートされていない機能のため、またはクエリが動的に生成される場合に、TypedSQLクエリが利用できない場合に役立ちます。
リレーショナルデータベースにおけるRaw SQLクエリの代替アプローチ
Prisma ORMは、リレーショナルデータベースでRaw SQLクエリを実行するための4つのメソッドをサポートしています
これらのコマンドはTypedSQLの使用に似ていますが、型安全ではなく、専用の.sql
ファイルではなくコード内で文字列として記述されます。
ドキュメントデータベースにおけるRawクエリの代替アプローチ
MongoDBの場合、Prisma ORMはRawクエリを実行するための3つのメソッドをサポートしています
これらのメソッドを使用すると、Raw MongoDBコマンドとクエリを実行でき、MongoDB固有の機能や最適化を使用する必要がある場合に柔軟性を提供します。
$runCommandRaw
はデータベースコマンドの実行に使用され、<model>.findRaw
はフィルターに一致するドキュメントの検索に使用され、<model>.aggregateRaw
は集計操作に使用されます。3つのメソッドすべてがPrismaバージョン3.9.0以降で利用可能です。
リレーショナルデータベースにおけるRawクエリと同様に、これらのメソッドは型安全ではなく、クエリ結果の手動処理が必要です。