awesome-copilot/instructions/sql-sp-generation.instructions_ja.md

4.0 KiB
Raw Blame History

description applyTo
SQLステートメントとストアドプロシージャ生成のガイドライン **/*.sql

SQL開発

データベーススキーマ生成

  • すべてのテーブル名は単数形にする
  • すべての列名は単数形にする
  • すべてのテーブルはidという名前の主キー列を持つべき
  • すべてのテーブルは作成タイムスタンプを格納するためのcreated_at列を持つべき
  • すべてのテーブルは最終更新タイムスタンプを格納するためのupdated_at列を持つべき

データベーススキーマ設計

  • すべてのテーブルに主キー制約を設ける
  • すべての外部キー制約には名前を付ける
  • すべての外部キー制約はインラインで定義する
  • すべての外部キー制約にはON DELETE CASCADEオプションを設ける
  • すべての外部キー制約にはON UPDATE CASCADEオプションを設ける
  • すべての外部キー制約は親テーブルの主キーを参照する

SQLコーディングスタイル

  • SQLキーワードSELECT、FROM、WHEREには大文字を使用する
  • ネストしたクエリや条件には一貫したインデントを使用する
  • 複雑なロジックを説明するためのコメントを含める
  • 読みやすさのため長いクエリを複数行に分割する
  • 句を一貫して整理するSELECT、FROM、JOIN、WHERE、GROUP BY、HAVING、ORDER BY

SQLクエリ構造

  • SELECT *の代わりにSELECTステートメントで明示的な列名を使用する
  • 複数のテーブルを使用する際は、列名をテーブル名またはエイリアスで修飾する
  • 代わりに結合を使用できる場合はサブクエリの使用を制限する
  • 結果セットを制限するためにLIMIT/TOP句を含める
  • 頻繁にクエリされる列に適切なインデックスを使用する
  • WHERE句のインデックス列に関数を使用することを避ける

ストアドプロシージャ命名規則

  • ストアドプロシージャ名に'usp_'のプレフィックスを付ける
  • ストアドプロシージャ名にはPascalCaseを使用する
  • 目的を示す説明的な名前を使用するusp_GetCustomerOrders
  • 複数レコードを返す場合は複数名詞を含めるusp_GetProducts
  • 単一レコードを返す場合は単数名詞を含めるusp_GetProduct

パラメータ処理

  • パラメータに'@'のプレフィックスを付ける
  • パラメータ名にはcamelCaseを使用する
  • オプションパラメータにはデフォルト値を提供する
  • 使用前にパラメータ値を検証する
  • パラメータをコメントで文書化する
  • パラメータを一貫して配置する(必須を最初、オプションを後)

ストアドプロシージャ構造

  • 説明、パラメータ、戻り値を含むヘッダーコメントブロックを含める
  • 標準化されたエラーコード/メッセージを返す
  • 一貫した列順序で結果セットを返す
  • ステータス情報を返すためにOUTPUTパラメータを使用する
  • 一時テーブルに'tmp_'のプレフィックスを付ける

SQLセキュリティベストプラクティス

  • SQLインジェクションを防ぐためすべてのクエリをパラメータ化する
  • 動的SQLを実行する際にはプリペアドステートメントを使用する
  • SQLスクリプトに認証情報を埋め込まない
  • システム詳細を公開しない適切なエラーハンドリングを実装する
  • ストアドプロシージャ内での動的SQLの使用を避ける

トランザクション管理

  • 明示的にトランザクションを開始しコミットする
  • 要件に基づいて適切な分離レベルを使用する
  • テーブルをロックする長時間実行されるトランザクションを避ける
  • 大容量データ操作にはバッチ処理を使用する
  • データを変更するストアドプロシージャにはSET NOCOUNT ONを含める