web-dev-qa-db-ja.com

t-sqlのストアドプロシージャに名前を付けるベストプラクティスは何ですか?

私はいくつかの大きなデータベースで作業しましたが、ストアドプロシージャの名前は大きく異なりました。

SP_PrefixXXX
PrefixYyyXxx
Prefix: Rep, Act

命名のベストプラクティスは何ですか?どうすれば適切な方法でそれらを整理できますか?

25
Galkin

sp_プレフィックスはシステムプロシージャを表し、通常のプロシージャのプレフィックスとして使用する必要がありますnot。そうした場合、最初にmasterデータベースに追加でアクセスしてプロシージャを検索し、そこにあるプロシージャの1つと同じ名前の場合は、代わりにそのプロシージャが実行されます。あなたの手順。

それ以外は、好きな命名規則を自由に作成できます。弊社で使用しているのはsubsystem_object_action、例: main_Customer_Get。これにより、一緒に属するプロシージャがリストに近くなります。

52
Guffa

特定のオブジェクトを処理するSPがグループ化されるように、プレフィックスを付けるのが好きです。したがって、次のようなものの代わりに:

 InsertUser 
 UpdateUser 
 DeleteUser 
 GetUsers 

私はこのようにします:

 AppName_User_GetUser 
 AppName_User_InsertUser 
 AppName_User_UpdateUser 
 AppName_User_DeleteUser 

これは、SQL管理アプリとコードでも管理しやすいと思います。

他の人が言ったように、接頭辞を付けないでください sp_

7
rvarcher

最良の命名規則は、データベース全体で一貫しているものです:)

本当に、それはあなたとあなたのチーム次第です。それが明確で賢明である限り、あなたにはかなりの余裕があります。あなたが決めるものは何でも、誰もがそれに固執することを確認してください。大会自体よりもはるかに重要なのは、誰もがそれに固執するという事実です。

Sp_、usp_などは冗長であるため、避ける傾向があります。たとえば、InsertCustomerと呼ばれるsprocは明らかにsprocであり、テーブル、ビュー、またはその他の種類のオブジェクトと混同されることはありません。特にsp_は避けるべきです。

私はキャメルケースが好きですが、繰り返しますが、それは好みの問題です。私は自分のproc名が好きで、procが何をするのかをよく示しています-例えば:

InsertSalesOrder PopulateItemStagingTablesCalculateOrderSummaryPrepareCustomerStatements

等.

7
Aaron Alton

この場合、特定の「ベストプラクティス」が本当にあるかどうかはわかりません。私が現在いる会社では、標準はusp [ProcedureName](アンダースコアなし)です。個人的にはプレフィックスをまったく付けたくないのですが、会社やプロジェクトに初めて参加し、既存の標準がある場合は、これを使用しない技術的な理由がある場合にsp_を使用している場合を除き、おそらくそうではありません。確かに、この場合はまったくひどい基準ではないと思うので、議論する価値のある問題です。

一般に、命名規則を変更します。討論があり、他のチームメンバーがあなたに同意せず、コンセンサス基準が異なる場合、最善のポリシーは、すぐにそれを手放してコンセンサスを受け入れることです。一貫性は、他のチームメンバーとうまくやっており、「難しい」という評判を築いていないため、実際の標準自体よりも一般的に重要です。

6
PaulR

「sp_」でも「usp_」でもありません。私たちknowそれらはストアドプロシージャであり、命名スキームは私たちに伝える必要はありません。

私は通常、それらが何をするのかという名前を付けるだけで、スキーマ上でそれらを分割する可能性があります。例外は、「通常の」データベース操作の一部として直接使用されないが、データベースを参照するためにSSISパッケージによって使用されるストアドプロシージャに「ssis_」プレフィックスを使用することです。 「fn_」を使用して関数を示し、ストアドプロシージャと区別することができます。

6
John Saunders

名前の前に「SP_」を付けるのはかなり冗長です。これは実装の名前です(テーブルやビューではなく、SPです)。それが実装されているかどうかを教えてくれる他の方法(systebales、information_schema、それをどのように使用するか)はたくさんあります。

代わりに、インターフェースにちなんで名前を付ける必要があります。便宜上(多くのものはアルファベット順に並べられるため)、同じプレフィックスを使用して、同じような名前で同じようなものをグループ化するのが好きです。

しかし、繰り返しになりますが、どのように実装されるかではなく、何をするかという名前を付けます。

一般に、データベースオブジェクトの一般的な命名規則では、CamelCaseの代わりにアンダースコアが使用されています。これは単なる慣例の問題です。単なる規則ではないのは、データベースオブジェクトにすべて小文字を使用するという一般的な規則でもあります。これにより、大文字と小文字を区別しない場合としない場合があるサーバー設定を無視できます。

2
tpdi

私は、関数の目的だけでなく、入力変数が何であるかを理解できるような名前を付けようとする傾向があります。

例:ProcessMathEquationWithFieldIdPlantId

これは、それを使用している他の人にすぐに情報を提供するのに役立つと私は信じています。

また、名前の衝突の可能性を制限するために、sp_とusp_を避けています。

1
James Black

私はプロではありませんが、私はこのように好きです

アプリケーションのプレフィックス= XY;ビュー= v;ストアドプロシージャ= p;関数= f

Table: XY_Name
View: vXY_Name
Procedure: sXY_Name
Function: fXY_Name

どう思いますか ?オブジェクトタイプを識別するために2文字を使用する人もいますが、ほとんどの場合、1文字で十分です。

0
Muflix

別のモジュールのスキーマを作成することをお勧めします。

次に、意味のあるシンプルな名前を付けます。

例:学校のプロジェクトで働いている場合。

作成学生スキーマ

プロシージャ名:AddStudent

したがって、procedurelistではStudent.AddStudentのようになります。

教師モジュールについても同じです

0
user2275860

これは役立つかもしれません。私はフロント/バックエンドプログラマーなので、MySQLとSQLServerの両方に以下を使用します。

SPx_PAGE/MODULE_ACTION_OBJECT 

x:Rは読み取り、Iは​​挿入、Uは更新、Wは書き込み(インデックスが存在しない場合は挿入、存在する場合は更新を組み合わせる)、Dは削除を表します。

ページ/モジュール:プロシージャを呼び出す場所

例:

SPR_DASHBOARD_GET_USERS //reads users data
SPW_COMPANIES_PUT_COMPANY //creates or modifies a company
0
leandronn