システム方式設計書(アプリケーション方式設計書)には具体的にどんなことを書いたらいいのでしょうか。
今回はデータベースアクセスについての方式設計書の書き方を説明します。
オンライン処理方式、バッチ処理方式の中で利用される方式です。
共通の方式あることと、設計項目が多いため独立した1章として作成します。
では、その多い設計項目にはどのような内容があるのか見ていきましょう。
データベースアクセス方式に書くこと
データベースに対し参照や更新を行うために必要な事柄を決めていきます。
採用するデータベース(SQL ServerやORACLEなど)によって実現可能な事ややり方が違ってきます。
採用するデータベースの特徴を意識する必要があり難しい設計項目です。
また、DBアクセスについては、生産効率アップ、処理の統一をするために共通部品化することも多いです。
その場合、共通部品の仕様や利用方法の説明もデータベースアクセス方式の中で決めます。
データベースアクセス方式に書く要素
では、データベースアクセス方式には具体的にどのようなことを書けばよいのか、要素の一部を挙げてみます。
・データベース接続方式
・トランザクション方式
・排他制御
・デッドロック制御
・アクセス制御
・データ削除方式
・履歴管理
データベースアクセス方式の「概要」
データベースアクセス方式についての要件を列挙していきます。
「概要」についてはオーナーと要件を合意するための内容を書くことを推奨します。
各方式の中に記載することについてはこちらの記事をご覧ください。
データベースアクセス方式についてオーナーと合意することは限られます。
開発者として決める技術要素はたくさんあるのですが、オーナーと合意が必要な要素は少し減ります。
技術的な内容が多いため、要点だけに絞って説明をしないと要件の決定までに時間がかかります。
ではどのようなことを合意したらいいのか例を挙げます。
データベース接続方式
ここでは、DBへコネクション張るタイミングや、コネクション保持の仕組みを検討する設計項目です。
しかし、オーナーにこのような話をするのは難しいです。
概要では同時接続数など利用上の制約になることを決めましょう。
コネクションを張るタイミングや保持の仕組みよって性能の違いが顕著になるようなら事前に合意が必要です。
トランザクション方式
アイソレーションレベルを決めたり、トランザクションの範囲を決める項目です。
概要としてオーナーと合意する内容は
・アイソレーションレベルの設定によってどのような問題が起きるか
・1トランザクションで管理できる範囲(Webシステムの場合、画面を跨いだトランザクション制御は難しい)を明確にし、設計上どのような制限が出るか
排他制御
Webシステムの場合、楽観排他、悲観排他を選択することになるでしょう。
この選択によってどのようなことができるのか、そのような問題が起きるのかを説明して方式を選択します。
データ削除方式
データ削除するときは物理削除するのか、論理削除するのか決めます。
履歴管理
データを更新するときに上書きするのか履歴を残すのかを決めます。
データベースアクセス方式の「方式設計」
方式設計には概要で明らかにした要件について、具体的な仕組みを設計します。
例えば次のようなことを決めます。
データベース接続方式
データベースへの接続する方法を決めます。
ここでは仕組みの説明は必要ありません。
次のようなことについて決めます。
・DBへの接続タイミング
アプリケーションの起動時やDBアクセス時に随時接続など。
・接続方式
コネクションプーリングを利用するか、随時接続を利用するか。
・アプリ構造
DBアクセスドライバをどのサーバに配置するのかなどを図で説明します。
どのサーバからDBアクセスが可能になるのかなどを表現します。
トランザクション方式
設計する要素は次のようになります。
・アイソレーションレベル
・トランザクションの有効範囲
アプリケーションのクラス構造図などを利用して、トランザクションの開始、終了をどのクラスで制御するのかを決めます。
つまり、開始、終了を制御するクラスより下流のクラス内でしかDBアクセスはできない仕様(制約)を決めることになります。
排他制御
排他処理の仕組みを決めます。
楽観的排他もしくは悲観的排他の方式を選択します。
その方式を実現するために、具体的にどのカラムを利用するのか仕組みを具体化します。
データ削除方式
データ削除の場合、物理削除するのか論理削除するのかを決めます。
論理削除の場合は削除フラグのカラム名などを決めます。
データベースアクセス方式の「実装方式」
実装方式では開発者向けにこの方式で開発する方法を示します。
・トランザクションの開始、終了の実装例
・排他処理の実装例
などを説明するとよいでしょう。
コメント