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

73 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: 'SQLステートメントとストアドプロシージャ生成のガイドライン'
applyTo: '**/*.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を含める