1. ホーム
  2. sql

[解決済み] ストアドプロシージャの命名規則について教えてください。[クローズド]

2022-07-18 13:34:10

質問

ストアドプロシージャの命名規則について、いろいろと見てきました。

ある人は sproc 名の前に usp_ を付け、ある人はアプリ名の略語を付け、またある人はオーナー名を付けます。SQL Serverでは、本当に意味のない限り、sp_を使うべきではありません。

あるものは動詞で proc 名を始めます(Get、Add、Save、Remove)。また、エンティティ名を強調するものもあります。

何百ものsprocを持つデータベースでは、すでに存在すると思われるsprocをスクロールして見つけるのは非常に難しいでしょう。命名規則があれば、スプロックを簡単に見つけることができます。

命名規則を使用していますか?それについて説明し、なぜ他の選択肢よりもそれを好むのかを説明してください。

回答の要約です。

  • 誰もが命名の一貫性を提唱しているようですが、どの特定の命名規則を使用するかよりも、誰もが同じ命名規則を使用することの方が重要なのかもしれません。
  • 接頭辞。多くの人が usp_ または同様のもの (ただし、まれに sp_) を使用する一方で、他の多くの人はデータベース名またはアプリケーション名を使用します。ある賢い DBA は、gen、rpt、tsk を使用して、一般的な CRUD スプロックをレポートまたはタスクに使用するものと区別しています。
  • 動詞 + 名詞は、名詞 + 動詞よりもわずかに人気があるようです。SQL キーワード (Select, Insert, Update, Delete) を動詞に使用する人もいれば、Get や Add などの SQL ではない動詞 (またはその省略形) を使用する人もいます。また、取得するレコードが 1 つなのか複数なのかを示すために、名詞を単数形と複数形に区別する人もいます。
  • 適切な場合には、最後に追加のフレーズが提案されます。GetCustomerById、GetCustomerBySaleDate。
  • 名前セグメントの間にアンダースコアを使用する人もいれば、アンダースコアを避ける人もいます。 app_ Get_Customer vs. appGetCustomer -- 読みやすさの問題だと思います。
  • sproc の大規模なコレクションは、Oracle パッケージまたは Management Studio (SQL Server) のソリューションとプロジェクト、あるいは SQL Server スキーマに分離することができます。
  • 不可解な略語は避けるべきです。

なぜ私がそのような答えを選んだのか。 たくさんの良い回答がありました。ありがとうございます。ご覧の通り、1つだけ選ぶのはとても難しいです。私が選んだものは、私の心に響くものでした。Verb + Nounを使おうとしても、Customerに適用されるsprocをすべて見つけることができないのです。

既存の sproc を見つけることができるか、あるいは存在するかどうかを判断できることは、非常に重要です。誰かが不注意に別の名前で重複するsprocを作成すると、深刻な問題が発生する可能性があります。

私は通常、何百もの sproc を持つ非常に大きなアプリで作業しているので、最も見つけやすい命名方法を好みます。小規模なアプリでは、メソッド名の一般的なコーディング規約に従っているため、Verb + Noun を推奨するかもしれません。

彼はまた、あまり有用ではない usp_ の代わりにアプリ名をプレフィックスにすることを提唱しています。何人かの人が指摘したように、データベースには複数のアプリの sproc が含まれていることがあります。そのため、アプリ名をプレフィックスとすることで、sproc を分離し、DBA や他の人が sproc がどのアプリのために使用されるかを判断するのに役立ちます。

どのように解決するのですか?

前回のプロジェクトでは、usp_[Action][Object][Process] を使用しました。たとえば、usp_AddProduct や usp_GetProductList, usp_GetProductDetail などです。しかし、データベースが700プロシージャを超えるようになり、特定のオブジェクトに関するすべてのプロシージャを検索することが非常に難しくなってきました。例えば、私は今、製品追加のための50の奇妙なAddプロシージャを検索し、Getなどのための50の奇妙なプロシージャを検索する必要があります。

このため、私の新しいアプリケーションでは、オブジェクトごとにプロシージャ名をグループ化することを計画しています。また、プロシージャ名自体から推測できることですが、プロシージャであることを示す以外に、やや冗長だと感じるので、usp を削除します。

新しい形式は次のとおりです。

[App]_[Object]_[Action][Process]

App_Tags_AddTag
App_Tags_AddTagRelations
App_Product_Add 
App_Product_GetList
App_Product_GetSingle

特に大量のスプロケがある場合、後で見つけやすいようにグループ化するのに役立ちます。

複数のオブジェクトが使用される場合についてですが、ほとんどのインスタンスにはプライマリとセカンダリのオブジェクトがあり、プライマリのオブジェクトは通常のインスタンスで使用され、セカンダリはプロセスセクション、例えばApp_Product_AddAttributeで参照されることがわかりました。