ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

開発の初めから順番に書いていってみる その31:外部設計(8)DB設計など。。


シリーズ「開発の初めから順番に書いていってみる」の続きです。
 今、外部設計の段階で、要求仕様から、詳細設計までの間(ここを外部設計と、ここでは読んでいるわけですが)の手順は、以下の手順で行うと、流れに飛躍がなく説明がつくということを書きました。
(1)入出力の媒体をきめる。
(2)その媒体ごとにフレームワークを決定する。
   なければ、入出力方法を決定する。
(3)そのプロセスの起動方法を考える
   なければ、起動モジュールを考える。
(4)起動モジュールから、(2)の呼出し手順を考える
(5)その処理部分をどうするか、考える。
(6)そうすると、細分化された入出力、処理部分ができる。
   ここで、あわせたいものは、あわせる
(7)処理部分を、ワーカーさんに渡せるまで落とし込む。


だけど、実際にやられるのは、こんなかんじだと書きました。

(あ)フレームワークの確認から、全体的なプログラムの書き方を決める
(い)画面の設計をする
(う)DBの設計をする、(その他外部の設計をする)
(え)プログラムを適当に詳細化し、詳細設計に持っていく


 で、前回までで(い)をやりましたので、今回は「(う)DBの設計をする」です。




■ER図から、テーブル定義書をまとめる

 とはいえ、実際にER図ができていたとしたら、以下の手順で、テーブル定義書はできます。

(1)エンティティがテーブルとなりますので、
     エンティティ名をテーブル名にしてください
     エンティティ名が日本語なら適当な英語名を付けてください

(2)エンティティの属性が、テーブルの項目となりますので
     属性名を項目名にしてください
     属性名が日本語なら適当な英語名を付けてください
     主キーの場合、主キーのチェック欄にチェック(ないかもしれない)
     外部キー(FK,参照キー)の場合、そのチェック欄にチェック(ないかも)
     型をテキトー(いや、適切に)決めてください
     NotNullかどうかきめてください。

(3)ER図にはないけど、インデックスを適当に(適切に)はってください。

 エンティティが多対多の場合や、テンポラリのテーブル、作業用のテーブル(たとえば、最大件数テーブルなど)がある場合には、エンティティにないテーブルがあることがありますが、たいてい、エンティティはテーブルです。

 なお、正規化はおこなっているものとします。
 正規化の方法については、
    第一正規形
    第二正規形
    第三正規形
 について書いたので、ここでは省略します。




■テーブル定義書から、プログラム、テストデータの自動生成

 テーブル定義書は、プログラムやテストデータ、SQL文の自動生成の対象となることがあります。
 フレームワークの段階で、フレームワークを利用するかどうかにかかわらず、DBアクセスの方法は決めておくはずです。

 この理由は、
(1)方法を統一しておかないと、どこでトランザクションがスタートするかわからず、二重にトランザクションをスタートさせてしまったりする(トランザクションの入れ子は、入れ子どおりに処理されることは保障されていないケースもある)。

(2)もし、パフォーマンスが出なかったとき、DB入出力をいっぺんに直さないといけない。そのため、DBアクセスロジックを散在させたくない。

(3)DBアクセスのパフォーマンスは、SQL文の書き方に依存する部分もあり、このとき、その手法について全員に説明することは困難である。なので、一箇所にまとめて、一部の人たちだけでSQLを書くようにしたい

(4)書き方を決めて、自動生成させて、効率化したい

などなどです。。

 で、書き方が決まっているのなら、自動生成できます。
 で、ソースコードだけでなく、SQL文のCREATE TABLEなど、テーブル作成も自動生成できます。
 テストデータに関しては、テストデータを入れてもらわないとできないので、Excelなどから、テーブル定義に基づき、データを入力してもらい、テストデータのSQLを作成します。
 ちなみに、テスト項目も自動生成できるんですけど。。

 このように、テーブル定義から、ソース、テーブル作成、テストの各ソース・ドキュメントを自動生成します。
 どのようにやるかというのは、それだけで、シリーズができてしまうと思うので、今回は、やめときます。




■そのほかの入出力

 そのほかの入出力についても、入出力の種類ごとに、ドキュメントを作ります。
 ドキュメントは1種類について、順番があるモノは順番を書いたもの(画面遷移など、メッセージシーケンスもこれ)、それと、それぞれのメッセージなり、フォーマットなり、レイアウトといった入出力内容について書きます。

 そして、各入出力は、フレームワークの段階で、どのような形でプログラムするか決めておくべきであり、決まっていれば、多くのケースで、そのドキュメントから、ソースなどが自動生成できるはずです。




 ということで、外部入出力全般について説明したこととして、次回は、「(え)プログラムを適当に詳細化し、詳細設計に持っていく」について書きます。