• 締切済み

SQLの解析資料の作り方

仕事のメンテナンスで他の人が作ったSQLの解析を 多く行うのですが、複雑なSQLや10以上のテーブルを 結合して何をどうしているかを、解析した以外の人間が 一目で見て分かるような資料をどのように作ったらいいか 困っています。 何か良い表現方法やまとめかたをご存知の方がいらっしゃったら 教えていただきたいです。 現在は、どのテーブルからどの結合条件でどの抽出条件で などのまとめかたで記述をしているのですが、ぱっと見 わかりづらく、伝わりにくいので解析後時間がたってしまうと わけがわからなくなり困っております。 よろしくお願いいたします。

みんなの回答

回答No.2

なるほど、今ある資産から遡って資料を作ろうとしているのですね。 既にシステムがある、しかし仕様書がないというふざけた昔のシステム作りのせいで。 それは、そのシステムや機能がどういうものなのかというのは全く理解する事はできないと思います。 それに携わったことがあり、全てを知り尽くしている人がいなければ。 大体、初めっからちゃんと設計書を起こしていないプログラムについて 完璧な設計書を後から作成できるはずがありません。 あなたがやれるのは、『既にあるプログラムを日本語に翻訳するだけ』です。 つまり、 1.あれする 2.これする 3.Aの場合A1のSQLをながし、5.項以降の処理を続行する。 4.Bの場合B1のSQLをながし、5.項以降の処理を続行する。 5.それする 6.どれする と処理を羅列することしか出来ませんよね? どういう理由でそのSQLを流さなければならないのかまで把握することは不可能です。 テーブル項目の意味もわからなければ、それは更に加速されるでしょう。 削除フラグ、とかユーザーIDとか、まぁ、多少想像がつくところは あるかもしれませんが、あくまで想像であって、本当にイメージしている 動作をするかは分からないはずです。 こんなのはどうでしょうか? 1.機能毎にSQL一覧を作り、各SQLはユニークな名称がつけられている。   (機能に振られている機能ID、テーブル名や連番などを利用して勝手に採番) 2.機能毎に処理内容を記載し、その中でSQLを利用するならば、   『「SQL一覧.~(1.で採番したユニークな名称)」のSQLを発行する』などとする。   条件があるなら、表形式で   P1  なになに   P2  あれこれ   とかしてやる。 そんな感じでやれば、SQL自体の解析は一切不要で、、それを流してるんですよ ってのがわかります。 SQLだけなら、ソースから簡単にひっぱってこれますよね。 条件のところは実際何が使われているのかは調べないといけないかもですが・・。 こういった作業は、理解しながら進めるというより、既に記されている内容を 日本語にして書き出すだけの作業になります。 考える必要があるのは、プログラム内での変数の使われ方くらいですきっと。 なぜそれを今するかというと、昔のシステム作りがずさんで、今しわ寄せがきているのでしょう。 もしくはただの勉強がてら、ってやつですね。

kuwazoo
質問者

お礼

おつきあい頂き感謝致します。 業務の内容も全くわからないのに、このSQLは正しいのか それも判断しながら仕様をまとめろということ自体 この作業を頼まれた時点うまくいかないなといういやぁな 予感はしていたのですが・・・。その通りになってしまいました。 プログラムの解析は前後関係を見てなんとかなるのですが DBの内容、使われ方が全く霧の中のためSQLの妥当性 など全く判断がつかず困っていました。少しでも 私の困っている内容、それに対しての丁寧な対処方法 とても心強く拝見しました。 明日から対応してみたいと思います。 本当にどうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

どういった仕様で、何をしたい為にどういう手順で何をしようとしているのか、 それを行う為には何が必要なのか、 これをちゃんと順を追って資料化されているのなら誰でも分かると思います。 解析ではなく、しっかり文書化・図式化などがされていないのではないでしょうか。 また、それを理解しようする為には、テーブルの各項目が何を意味しているのかも 予め理解していないといけません。

kuwazoo
質問者

お礼

どうもありがとうございます。 わからない霧の中で人がわかるような資料をつくるのは 無理ですよね。 何をしたいのかがわからない(教えられていない。 というより、仕事を頼んだ人もわかっていないので 聞いても答えてもらえないのです。) ままずっとこの作業をしています。 仕様はわからず、現在あるプログラムが仕様で テーブルもER図は無く整理もされていません。 その仕様が正しいのか正しくないのかはどうでもよくて ただ、プログラムを解析して仕様をまとめろというのが 仕事になっています。 なんだか作業内容がすじが通っていない気がするのですが なので、SQLを解析しても頭にすっとはいってこないのかもしれないです。 やり方をかえてみようと思います。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQL作成時のポイント

    SQLは簡単なものなら組めますが、副問い合わせなど複雑なものになるとまだまだ苦手なレベルで、3つ以上のテーブル結合などもかなり時間がかかったり、作っているうちに自分でどこまでの条件をつなげたらいいのかが分からなくなってしまいます。 「条件をつける時はここに気をつけて!」など、SQLをつくる時に意識しておいた方がいいこと、作成の考え方などがありましたら、ぜひ教えて下さい。

  • ユニオンクエリで期間指定抽出のSQL記述について

    いつもお世話になっております。 Access 2007で、「人名集計」テーブルと「資料送付」テーブルがあり、それぞれ、同一のフィールド名でテーブルが作成されております。 これを「発送日」フィールドの昇順で並べ替えながら結合するユニオンクエリを作成しました。 SELECT * FROM 人名集計 UNION ALL SELECT * FROM 資料送付 ORDER BY 発送日; とりあえず、上記のSQLでは動いていますが、このSQLに、 「発送日」の期間を指定して、抽出条件(パラメータ)を加えようとしていますが、うまくいきません。 WHERE句を使って、Between 「最初の日付を入力」 And 「最後の日付を入力」 のような文を SQLの何処にどのように記述すればよいのか、教えてください。 宜しくお願い申し上げます。

  • SQLの参考書(文法書?)

    みなさんこんにちは。 SQLの参考書について、教えてください。 下記のテーブル t0、t1、t2 において、 key0 および key1は t1.id への外部キーで、 key は t0.id への外部キーです。 この構成に対して全リストを SELECT しますと、 RESULT に示す結果となります。 上記のような機能の SQL につきましては、 3個以上のテーブルの結合や、 1つのレコードからの同一テーブルへの複数の結合が必要となり、 記述が複雑になると思います。 そこで教えていただきたいのですが、 このような SQL を記述する際に必要な文法を勉強するには、 どのような参考書が良いでしょうか? どうぞ、よろしくお願いいたします。 TABLE: t2 -------------------- id key0 key1 -------------------- 0 2 0 1 3 1 2 4 6 3 5 7 TABLE: t1 -------------------- id key -------------------- 0 3 1 4 2 5 3 6 4 7 5 0 6 1 7 2 TABLE: t0 -------------------- id text -------------------- 0 "00000" 1 "00001" 2 "00002" 3 "00003" 4 "00004" 5 "00005" 6 "00006" 7 "00007" RESULT: -------------------- id text text -------------------- 0 "00005" "00003" 1 "00006" "00004" 2 "00007" "00001" 3 "00000" "00002"

  • SQL・・・分かりません。

    SQLの勉強をしています。 仕事の研修で習っているのですが、基礎的なものを学習しましたが 応用したパターンが全く理解ができません。 例としまして ・AテーブルとBテーブルを結合して、データを抽出する ・Aテーブルに存在しているのに、Bテーブルに存在していないデータも抽出する ・しかし、Aテーブルに存在していないのに、Bテーブルに存在しているはデータは抽出しない ☆抽出方法に二パターン存在する 1つ目も全く見当つかずです。ヒントでよいので教えていただけたらと思います。 意味が分からなかったらすみません。何を描き足したらよいか教えて下さい。 宜しくお願いしたします。

  • SQLの高速化

    SQLの高速化に関する情報を教えてください! 結合する時、どっちのテーブルを=の左にする(これ、分かりません・・・)、とか、多くのテーブルとテーブルの結合条件を書く際、WHEREに近い方にどういう結合条件を持ってきたらいい、とか、WHERE句を評価する時のDBの検索の仕組み(順番)とか・・・基本的なとこから全部知りたいです! ↑これは適当に言っていることであって、このような感じの情報がもしあれば、知りたいということです。 どうかお願いいたします。

  • Access2000VBAにてDAOでカレントにあるテーブルの内容をSQLで抽出して別のテーブルを作成する方法

    こんにちは Access2000VBA初心者です。 現在開いているデーターベースで、フォーム上から抽出条件を入力してそれをSQLに渡し、定義させているテーブルから抽出して新しいテーブルを作成する記述がわかりません。 DAOでできそうなのですが、VBA教本を読んでいるとDebug.printで抽出結果を表示して終わっているのでそれ以上のことが書いてありません。 やりたいことは、SQLでテーブルから必要な条件をセットしてそれをrecordsetにいれるのだと思いますが、 そのrecordsetをなんとか新しいテーブルに作成して入れることはできないのでしょうか。 AccessVBAに明るい方よろしくお願いいたします。

  • SQLの結合条件について

    SQLの結合条件について ・table_A ID | ATAI 01 | AAA 01 | XXX 02 | ABC 03 | DEF table_B ID | ATAI 01 | 不要 02 | 必要 03 | 必要 04 | 不要 上記のようなテーブルAとBがあるとします。 やりたいこと 1.テーブルAに存在するIDをBのIDから抽出 2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。 ※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。 2.がうまくいきません。 select B.ID from table_A A,table_B B where A.ID = B.ID 上記のSQLに2.の条件を足して、結果を02と03にしたいです。 ※CASEは使わずにお願いします。

  • SQLの記述について

    SQLの記述で Aトランザクションテーブル(以後Aテーブル)とBマスタテーブル(以後Bマスタ)が有り, AテーブルにBマスタの内容を反映させ或る条件のデータだけ抽出は可能でしょうか? 例 Aテーブルの内容をBマスタを検索しデータがAの場合のみ抽出 Aテーブル        Bマスタ キー  データ     キー  データ      001 0001    001 A 001 0002    002 B 002 0003    003 A 001 0004    004 C 002 0021 003 0005 004 0001 実行結果 キー  データ 001 0001 001 0002 001 0004 003 0005 上記の結果のように,Aテーブルの内容からBテーブルを見て条件を判断しての抽出は可能でしょうか?

  • oracle(SQL)のHINT指定について

    性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。  →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。 

  • データがあれば○○なければのSQL

    基本的なことなのかもしれませんが・・・ AとBというテーブルがあり、あるタイミングでAを元にBを作成します。つまりBはデータがある場合とない場合があります。また、2つは関連番号で紐づいています。 Aテーブルを抽出したい時に、抽出条件は以下です。 ・Bテーブルのステータスが1であれば抽出 ・Bテーブルのステータスが0であれば非抽出 ・Bテーブルにデータがなければ抽出 INNER JOINだとデータがない時に抽出できないし、 WHERE句にCASE句を入れればいいのかなと思いましたが、テーブルにデータがあればなんて条件書けないしで詰まりました。 SELECTした結果に対して条件つけて抽出する手も思いつきましたが もっと美しいSQLがあれば教えてもらえないでしょうか。 環境はSQLServerです。よろしくお願いします。

このQ&Aのポイント
  • 10Gネット回線を使うには、ルーターのポートも対応している必要があります。
  • LAN環境を10GBにするのはコストがかかるため、2.5GBで作り直すことも可能です。
  • マルチギガ対応のルーターのポートが必要であり、マルチギガ対応のポートを持つルーターも一部販売されています。
回答を見る