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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

6222閲覧

SQLの処理を可視化するツールについて

sysder

総合スコア25

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

6クリップ

投稿2020/02/06 14:09

お世話になっております。
sysderです。

社内で作成されているSQLの量が多くなってきているので、
それぞれのSQLがどんな処理をしているのか把握しにくくなってきています。

そこでSQLの処理内容のデータフロー図を作成しようと思っているのですが、
何か良いツールはないでしょうか。

こういうのがあったのですが、
なんかいまいちでして。。。
https://www.lucidchart.com/pages/ja/

また、皆さんはどのように処理内容を把握・管理しているのでしょうか。
属人化しないようにしたいと思っています。

ご教示の程よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

「SQLの処理内容のデータフロー図」というのが良く分かりません。
データフロー図はDB設計される前の概念図ですから、ER図のほうが良い気がします。

探せばフリーでもツールはありますので。

追記

※コメントから

1000行以上あるSQLがいくつもある場合、SQLを書いた人がいなくなった場合でも他者が対応できるようにしたいのですが、何か良い方法はありませんか?

それは保守の為という事ですね。それはプログラマー向けですか?
処理フローで書いたとして、SQLと直結する訳ではありませんから、それでSQLをメンテしろと言われてもSQLを組む人は結局SQLを解析する事になってしまいます。

SQLの設計に必要な4つの手順とは?わかりやすい図を使って解説!
SQLを作成するにあたって必要な資料は、ER図要件です。
(ER図にはテーブルの定義も含みます)
これらが変更になる時にメンテナンスが発生する訳ですが、その際に対象のSQLの構造が説明としてあれば、メンテナンスはし易くなるでしょう。

SQLが長くても単純であれば、解析にそれほど時間は要しません。
時間を要するのはサブクエリー等で、ネストが深い場合です。
なので、ネストの深いものから積み上げる形でそれぞれの単位で(ER図、要件)があれば良いかと思います。

ただ、それら詳細が無くても、元になる(ER図と要件)のしっかりした物があれば何とか出来ると思います。
現状でそれが無いなら作るしかありません。
ER図はリバースできるDBツールを利用して手抜きは出来ますが、要件を抽出してくれるツールは見た事がありません。

追記2

SQLが長大で解析が困難というなら、整形して見やすくするというのはどうでしょう。
SQL 整形ツール 美しいコードが出力できるテキストエディタはどれ?

統一化されるので要件の抽出はやりやすくなると思います。

投稿2020/02/06 15:19

編集2020/02/09 03:02
sazi

総合スコア25327

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

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

sysder

2020/02/06 22:54

ご回答いただきありがとうございます。 > 「SQLの処理内容のデータフロー図」というのが良く分かりません。 インプットデータはこれで、条件分岐(男性なら、20歳以上なら)をして、こんな処理(年齢カラムを追加、キーを追加)をして、アウトプットはこれ、というフローの可視化です。
sazi

2020/02/07 02:18

SQLは手続き型言語ではありませんので、SQLからデータフローを生成するようなツールは無いかと思われます。
sysder

2020/02/07 04:41

それではSQLを自分で読んで、その処理や流れを図に落とし込むのに最適なツールはありますか?
sazi

2020/02/07 05:03

SQLを処理や流れに置き換えるのは難しいと申しております。 SQLで表せるのは集合体ですので、処理や流れの単位で区切ったビューとし、それらをリレーションして表すし事しか思いつきません。 そういったことでER図作成のツールをお薦めしています。
Y.H.

2020/02/07 05:31 編集

質問者さんがSQLと呼ばれているのは もしかして、OracleならPL/SQL, SQL ServerならTransact-SQLなどの言語で記述されている ストアドプロシージャーなどの事をおっしゃってますか?
tacsheaven

2020/02/07 05:34

あえていうなら SQL の実行計画が近いかなという気はしますが……うーん?
sysder

2020/02/08 13:25

saziさん 1000行以上あるSQLがいくつもある場合、SQLを書いた人がいなくなった場合でも他者が対応できるようにしたいのですが、何か良い方法はありませんか?
sysder

2020/02/08 13:26

Y.Hさん いいえ、違います。
sysder

2020/02/08 13:57

tacsheavenさん 実行計画は深すぎる気がします。。。
退会済みユーザー

退会済みユーザー

2020/02/08 14:15

面白そうなんで、クリップしてます! なんかひねり出してください!w
sazi

2020/02/08 15:25 編集

@sysderさん SQLからフローに落とすというのをどういうイメージを持たれていますか? リバースするという事はジェネレーションもできないと駄目ですけど。 持たれているイメージを図解して質問に張り付けて頂けると他の方も回答しやすくなると思います。 SQLをリバースしてグラフィカルにするとしたら、クエリーデザイナーくらいだと思いますけど。
sazi

2020/02/09 01:58

@te2jiさん SQLの最適化が難しいんだと思いますよ。
退会済みユーザー

退会済みユーザー

2020/02/09 02:06

なんか論文もあるみたいなんだけど、難しそうなんで手を出してないw このツールの後継探してるんだけど、見つからないんだよねぇ。。。
sazi

2020/02/09 02:35

SQLの解析というなら、それはDBMSがやっている事ですから、それをハックするか、実行計画を元に解析するような事だと思います。
sazi

2020/02/09 02:44

QueryVizと同系列のものとしてはQGMというのがあるらしいですよ。 尤も、それでは不足としてQueryVizがあるようですが。
sysder

2020/02/09 12:17

@saziさん こんな感じのものを想定していました。 https://it-koala.com/flowchart-2241 ひし形の条件のところで性別や年齢でデータを分けたり、その後で20代のデータにのみ適応する処理を四角に書く、平方四辺形にはインプットデータとアウトプットデータを書く、といったものです。
sazi

2020/02/09 13:01 編集

フローチャートは知っていますよ。 最初から言っていますが、フローは手続きで、一方SQLは集合を扱うものです。 ご自身でフローチャートからSQLを作るとか、SQLからフローチャートを起こしてみて下さい。 そうすれば、それが如何に乖離しているか分かると思います。 分かり易く一例を上げるとループ命令などSQLには存在しません。
退会済みユーザー

退会済みユーザー

2020/02/09 13:12

> sysder さん SQL を図示すると、リレーションを示すので、ER 図もどきになります。 ツールとしては以下な感じ。 https://www.slideserve.com/tao/wolfgang-gatterbauer ただ、現在探した範囲ではあまり研究は進んでいないようです。 アプローチが違う上、使ったこと無いけど、この辺が役に立つかも https://omnidb.org/en/documentation-en/visualizing-query-plans-en > sazi さん いいの無いね^^;残念。
sysder

2020/02/11 11:47

@saziさん、te2jiさん SQLを解読して処理内容を文章にまとめるしか方法がないのかなと思いました。 色々と助言ありがとうございました。
guest

0

RDBMSの種類によっても違うのですが、OracleやPostgreSQLはオプティマイザが賢く相関サブクエリなどもパフォーマンスが出るので、適切に使うと意味のあるまとまりが明確になり読みやすくなります。(MySQLはダメです)
そのため頻出するパターンはViewを作成することでクエリの可読性が向上します。
パフォーマンス上の課題があれば、マテリアライズド・ビューやテーブルの非正規化も有効かと思います。

またSQL内にコメントを書くことも有効です。オブジェクト指向プログラミングではコメントで書く内容はほぼ全てメソッド名で表現できるためコメントがバッドノウハウとされていますが、SQLではメソッドのような形で処理を分割することができないためコメントが有効です。
RDBMSのパフォーマンス上のボトルネックは通常、ネットワークとストレージの走査のため、SQLの解析時にコメントを削除する処理によるパフォーマンスの劣化は無視できます。

投稿2020/02/09 20:10

編集2020/02/09 20:12
rysh

総合スコア874

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

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

sysder

2020/02/11 11:38

ご回答ありがとうございます。 MySQLを使っています。。。 SQLとSQLの入出力の繋がりも把握するのが難しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問