質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

3051閲覧

ストアドプロシージャの管理について

lilac

総合スコア13

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2018/08/17 08:09

ストアドプロシージャの管理について、ご意見ください。

システムで実行するDB操作を全てストアドプロシージャの呼び出しにした場合、ストアドプロシージャの名前をどのようにつけて管理するのが良いでしょうか。

例えば、テーブルAがあった場合に、以下のような処理が考えられます。
・テーブルAの全レコード抽出
・指定コードをもつレコードの抽出
・テーブルAへのレコード追加、更新、削除

それぞれ、
・A_SelectAll
・A_SelectByCode
・A_Insert, A_Update, A_Delete
のようにストアドプロシージャ名を付けて管理することを考えましたが、このような管理方法について、良い、悪いなどのご意見をいただけないでしょうか。
また、他に案があればご教授いただければと思います。

そもそも全てのDB操作をストアドプロシージャにするということがナンセンスということであれば、それもご指摘いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/08/17 08:41

その実行するシステムってどういった構成なんでしょうか?SQLを組み立てて発行する想定(している?)のでしょうか?
lilac

2018/08/18 01:24

システム(プログラム)ではSQLは組み立てず、SQL Serverに登録してあるストアドを呼び出すことを想定しています。※もちろんパラメタはシステムから渡します。
guest

回答2

0

ベストアンサー

テーブルAがどのようなデータを持っているのか、というところから、
A_SelectAll→Get~~~AllData
とかいう感じにするのが意味も明確だと思います。

DB操作をストアド・プロシージャにするのは全然いいと思いますよ。
(全部、というのは気がかりではありますが。)

投稿2018/08/17 08:16

macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lilac

2018/08/18 01:47

メソッドの命名規則のようなつけ方ということですね。 テーブルを結合したときの名前付けや、ストアドを探しやすくする名前付けの、よい規則がもしあれば教えていただきたいと思います。 簡単なSQL(SELECT * FROM ○○)程度ならばプログラム中に記載し、それ以外を全てストアドにしてしまうのはやはりあまり好ましくない設計ということですよね・・・。
backyard

2018/08/20 04:16 編集

横から割り込みすみません。 後々のメンテナンスを考えれば命名規則、ルールを作るのは良いことです。あなたが最初に書かれた「テーブル名_SQL処理名」という名称でも、それがルールとして統一されているならばアリかとは思います。ただ、ストアドプロシージャは単純なSELECTやINSERT等以外の複雑な処理も実現できるので、SQLの命令を名称に着けるのではなく、回答者さんの言われるように「それが一体何をするのか」をGetなどの英単語の並びで命名したほうが、この先、いろんなストアドプロシージャが登場した時にも統一がとりやすいと思います。 簡単な処理をストアドプロシージャにするのがNGということはありません。「なぜストアドプロシージャにするのか」をきちんと決めればOKです。たとえば、将来的にSQLが変わることが想定される場合、プログラム側を変更せずにストアドプロシージャだけの変更で済む、とか、別のプログラムからも同じ処理を呼び出せるようにしておきたい、とか。そういう理由があれば単純なSQLで1行のストアドプロシージャだってありだと思いますよ。 そのあたりは設計をどうするかなので、きちんと「理由の説明できる設計」を心がけておけばそもそも疑問にすら上がらないはずです。がんばってくださいね。
lilac

2018/08/20 05:28

命名規則の徹底やしっかりとした設計が、ストアドの管理のし易さにも繋がるということですね。 「理由の説明できる設計」ということをよく考えてルール作りをしていきたいと思います。
guest

0

そのストアドを利用する側からの意味の分かる命名が良いと思いますよ。
テーブルがその意味を持っていたとしても、複数のテーブルを結合した結果で従来の結果を返す必要が発生した場合に、そのルールを破らざるを得なくなりますから。

ストアドに限らず利用目的に応じた命名にした方が、利用する側も分かり易いですし。

投稿2018/08/17 15:00

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lilac

2018/08/18 01:38

確かに、テーブルを結合した場合に名前をどうするという問題がありますね。 ただ、プレフィックスとしてテーブル名を付けない場合、ストアドを探し出すときに少し不便ではないかとも思うので悩みどころです。
backyard

2018/08/20 04:18

ストアドプロシージャ自体を使う人がどういう観点でストアドプロシージャを探すか、を考えましょう。それ抜きにして命名すると非常に使いづらい命名になります。いろんな処理がテーブル単位に行われるのであればテーブル名が冒頭のほうが良いでしょう。しかし、業務的な機能や処理単位でストアドプロシージャを使うのであれば、名称の冒頭は処理名や機能名のほうが良いかもしれません。 あなたが、ではなく、あなたたち全員のチームがどのように使うか、その観点で考えないと使いづらくなりますよ。
lilac

2018/08/20 05:17

難しい問題ですね。 テーブル単位もありますし、業務的な機能や処理単位もあります。 そして、どちらの場合も結構な数を作る必要がありそうです。 backyardさんのおっしゃる通り、"私"ではなく"チーム(そして今後の保守メンバー)"がどのように使うかをもう一度考えてみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問