このチュートリアルでは、問題追跡アプリケーションの例にデータ・オブジェクトを計画、設計および移入する方法を説明します。このチュートリアルを終了すると、第15章「問題追跡アプリケーションの作成およびデプロイ方法」に進み、この章で設計したデータ・オブジェクトにアプリケーションのユーザー・インタフェースを実装およびデプロイすることができます。
Oracle Technology Networkで、完成したIssue Trackerアプリケーションのサンプルおよび補助スクリプトを入手できます。次の場所に移動し、「パッケージ・アプリケーション」にナビゲートしてから「Issue Tracker」を選択します。
http://www.oracle.com/technology/products/database/application_express/index.html
注意: このチュートリアルを完了するには、約1、2時間かかります。特定の演習を試す前に、資料に慣れるため、最初にチュートリアル全体を通して読むことをお薦めします。 |
この項の内容は次のとおりです。
このトピックに関するその他の例は、次に示すOracle by Examples (OBE)を参照してください。
データベース・オブジェクトの操作
http://www.oracle.com/technology/obe/hol08/apexintro/apex3.1.1_a/apex3.1.1_a_otn.htm
スケジュールどおりに予算内でプロジェクトを完了するには、効率的にプロジェクトを管理する必要があります。すべてのプロジェクトには、追跡し、優先順位を付けて管理する必要がある複数の問題があります。
このビジネス例では、MRVL Companyには、会社が利益をあげるためにスケジュールどおりに完了する必要があるいくつかのプロジェクトがあります。プロジェクトが期限内に完了しないと、減収につながります。会社のプロジェクト・リーダーは、手動でノートブックにステータスを記録したり、テキスト文書で問題を編成したり、スプレッドシートを使用して問題を分類するなど、様々な問題追跡方法を使用します。
プロジェクト・リーダーは、ホスティングされたアプリケーションをOracle Application Expressに作成することで、一元的に問題を簡単に記録および追跡できます。この方法によって、プロジェクト・リーダーが必要なデータのみにアクセスし、致命的な問題がに対する処置が行われているかどうかを簡単に管理できるようになります。
Oracle Application Expressアプリケーションで開発を開始する前に、まず、アプリケーション要件を定義する必要があります。その後、定義した要件を使用して、データベース、およびユーザー・インタフェースでデータを受け入れて表示する方法のアウトラインを設計します。
このビジネス例では、プロジェクト・リーダーが、追跡の必要がある情報、セキュリティ要件、データ管理機能およびデータの表示方法を定義する要件を決定します。
この項の内容は次のとおりです。
現在、情報の追跡方法は、プロジェクト・リーダーによって若干異なります。同時に、すべてのプロジェクト・リーダーは、次の情報がアプリケーションに必要であると考えています。
問題のサマリー
問題の詳細
問題を発見したユーザー
問題が発見された日付
問題が関連するプロジェクト
問題を割り当てられたユーザー
問題の現在のステータス
問題の優先順位
目標とする解決日
実際の解決日
進捗レポート
解決のサマリー
プロジェクト・リーダーは、すべての情報にアクセスできるすべてのユーザーを監視する必要があるため、次のアクセス・ルールに従っています。
各チーム・メンバーおよびプロジェクト・リーダーが一度に割り当てられるのは、1つのプロジェクトのみです。
各チーム・メンバーおよびプロジェクト・リーダーは、1つのプロジェクトに割り当てられる必要があります。
マネージャは、特定のプロジェクトには割り当てられません。
マネージャのみがプロジェクトおよびユーザーを定義および管理できます。
すべてのユーザーが新しい問題に取り組むことができます。
割り当てられた後は、割り当てられたユーザーまたはプロジェクト・リーダーのみがその問題に関するデータを変更できます。
マネージャには、特定の問題の詳細にアクセスしなくても、データのサマリーを表示するビューが必要です。
次に、プロジェクト・リーダーは、システムに情報を入力する方法を決定します。このプロジェクトでは、ユーザーは、次の操作を行う権限が必要です。
問題の作成
問題の割当て
問題の編集
プロジェクトの作成
プロジェクトの管理
ユーザーの作成
ユーザー情報の管理
プロジェクト割当ての管理
データをアプリケーションに入力した後、ユーザーはそのデータを表示する必要があります。ユーザーが次の内容を表示できるようにする必要があることをチームで決定します。
プロジェクトごとのすべての問題
プロジェクトごとの未解決の問題
プロジェクトごとの期限切れ問題(すべてのユーザー用)
最近発見された問題
未割当ての問題
プロジェクトごとの問題のサマリー(マネージャ用)
指定した月ごとの解決済問題
カレンダに示される問題解決日
ユーザーごとの問題解決にかかる日数
最後に、プロジェクト・リーダーは、アプリケーションによって次の特別な機能がサポートされる必要があることを決定します。
問題がユーザーに割り当てられた際に、ユーザーに通知します。
問題が期限切れになった際に、プロジェクト・リーダーに通知します。
データベース要件を定義した後は、これらの要件をデータベースの設計、およびユーザー・インタフェースでデータを受け入れて表示する方法のアウトラインに適用します。このステップでは、基礎となるデータベース内の表に情報を編成する方法について検討する必要があります。「計画およびプロジェクト分析」で示す要件に従って、このプロジェクトでは、3つの表を作成する必要があります。
Projects
: すべての現行のプロジェクトを追跡します。
People
: 問題を処理するために割り当てることが可能なユーザーに関する情報が含まれています。
Issues
: 問題に関するすべての情報(関連するプロジェクト、問題に割り当てられたユーザーなど)を追跡します。
これらの表をサポートするには、表に加えて、順序、トリガーなどの追加のデータベース・オブジェクトも作成する必要があります。すべての表にシステム生成の主キーを使用すると、カスケード更新を実行しなくてもすべてのデータを編集できます。
この演習用に設計されたデータ・モデルは、図14-1のようになります。
この項の内容は次のとおりです。
各プロジェクトには、プロジェクト名、プロジェクトの開始日、目標とする終了日、実際の終了日の列を含める必要があります。これらの日付列は、未処理の問題がプロジェクト終了日に間に合うかどうかを確認するのに役立ちます。表14-1に、Projects表に含まれる列を示します。
表14-1 Projects表の詳細
列名 | 型 | サイズ | Not Null | 制約 | 説明 |
---|---|---|---|---|---|
project_id |
number |
該当なし |
はい |
主キー |
数値による各プロジェクトの一意の識別情報です。 トリガーを使用して順序に従って移入されます。 |
project_name |
varchar2 |
255 |
はい |
一意キー |
各プロジェクトの一意の英数字名です。 |
start_date |
date |
該当なし |
はい |
なし |
プロジェクト開始日です。 |
target_end_date |
date |
該当なし |
はい |
なし |
目標とするプロジェクト終了日です。 |
actual_end_date |
date |
該当なし |
いいえ |
なし |
実際の終了日です。 |
created_on |
date |
該当なし |
はい |
なし |
レコードが作成された日付です。 |
created_by |
varchar2 |
255 |
はい |
なし |
レコードを作成したユーザーです。 |
modified_on |
date |
該当なし |
はい |
なし |
レコードが最後に変更された日付です。 |
modified_by |
varchar2 |
255 |
はい |
なし |
レコードを最後に変更したユーザーです。 |
各ユーザーには、定義された名前およびロールがあります。プロジェクト・リーダーおよびチーム・メンバーには、プロジェクトも割り当てられています。カレント・ユーザーに組織内のロールを割り当てる場合は、ユーザー名に電子メール・アドレスを使用します。
現行のユーザーを割り当てる場合は、People表にユーザー名の列を追加します。これによって、認証メカニズムを決定する際の柔軟性が向上し、また、ログオンしたユーザーを特定して、そのユーザーがアプリケーションにアクセスできるかどうかを決定する認可スキームも使用できるようになります。
基準として、各表にaudit列を追加します。これらの列は、実装の直前に一貫して各表に追加されるため、分析時に指定する必要はありません。
表14-2に、People表に含まれる列を示します。
表14-2 People表の詳細
列名 | 型 | サイズ | Not Null | 制約 | 説明 |
---|---|---|---|---|---|
person_id |
number |
該当なし |
はい |
主キー |
各ユーザーを識別する数値IDです。 トリガーを使用して順序に従って移入されます。 |
person_name |
varchar2 |
255 |
はい |
一意キー |
各ユーザーを識別する一意の名前です。 |
person_email |
varchar2 |
255 |
はい |
なし |
ユーザーの電子メール・アドレスです。 |
person_role |
varchar2 |
30 |
はい |
チェック制約 |
各ユーザーに割り当てられたロールです。 |
username |
varchar2 |
255 |
はい |
一意キー |
このユーザーのユーザー名です。ユーザーの詳細にログインをリンクさせるために使用します。 |
assigned_project |
number |
該当なし |
いいえ |
なし |
このユーザーが割り当てられているプロジェクトです。 |
created_on |
date |
該当なし |
はい |
なし |
レコードが作成された日付です。 |
created_by |
varchar2 |
255 |
はい |
なし |
レコードを作成したユーザーです。 |
modified_on |
date |
該当なし |
はい |
なし |
レコードが最後に変更された日付です。 |
modified_by |
varchar2 |
255 |
はい |
なし |
レコードを最後に変更したユーザーです。 |
注意: このアプリケーションは、この演習用に簡略化されています。通常、ユーザー・データはより複雑で、多くの場合、企業の人事システムから抽出されます。また、通常、ユーザーは一度に複数のプロジェクトに取り組みます。ユーザーに割り当てるロールを動的にする必要がある場合は、People表に関連する外部キーを持つ個別の表としてロールを実装します。 |
プロジェクト・リーダーは、アプリケーション要件の定義時に、各ユーザーに割り当てた個別の問題を追跡することを決定しました。問題は、監査証跡を提供する追加の列とともに列に含まれます。監査証跡では、問題を作成したユーザー、問題が作成された日付、問題を最後に変更したユーザーおよびその変更が行われた日付が追跡されます。
表14-3に、Issues表に含まれる列を示します。
表14-3 Issues表の詳細
列名 | 型 | サイズ | Not Null | 制約 | 説明 |
---|---|---|---|---|---|
issue_id |
number |
該当なし |
はい |
主キー |
問題を識別する一意の数値IDです。 トリガーを使用して順序に従って移入されます。 |
issue_summary |
varchar2 |
255 |
はい |
なし |
問題の簡潔なサマリーです。 |
issue_description |
varchar2 |
4000 |
いいえ |
なし |
問題の詳細です。 |
identified_by_person_id |
number |
該当なし |
はい |
「People」への外部キー |
問題を発見したユーザーです。 |
identified_date |
date |
該当なし |
はい |
なし |
問題が発見された日付です。 |
related_project |
number |
該当なし |
はい |
「Projects」への外部キー |
問題に関連するプロジェクトです。 |
assigned_to |
integer |
該当なし |
いいえ |
foreign key to eba_it_people |
この問題を所有しているユーザーです。 |
status |
varchar2 |
30 |
はい |
チェック制約 |
問題のステータスです。新しい場合は |
priority |
varchar2 |
30 |
いいえ |
チェック制約 |
問題の優先順位です。 |
target_resolution_date |
date |
該当なし |
いいえ |
なし |
目標とする解決日です。 |
progress |
varchar2 |
4000 |
いいえ |
なし |
問題の進捗です。 |
actual_resolution_date |
date |
該当なし |
いいえ |
なし |
問題の実際の解決日です。 |
resolution_summary |
varchar2 |
4000 |
いいえ |
なし |
解決のサマリーです。 |
created_on |
date |
該当なし |
はい |
なし |
レコードが作成された日付です。 |
created_by |
varchar2 |
255 |
はい |
なし |
レコードを作成したユーザーです。 |
modified_on |
date |
該当なし |
はい |
なし |
レコードが最後に変更された日付です。 |
modified_by |
varchar2 |
255 |
はい |
なし |
レコードを最後に変更したユーザーです。 |
注意: 実際のアプリケーションでは、より高コストの監査を行う必要があります。たとえば、最後の変更のみでなく、データに対して行われたすべての変更を追跡する必要があります。データに対して行われたすべての変更を追跡するには、Issues表にリンクする追加の表が必要です。問題に割り当てられる有効な優先順位を動的にする必要がある場合は、Issues表に関連する外部キーを持つ個別の表を追加する必要があります。 |
アプリケーション作成の最初のステップとして、データベース・オブジェクトを作成します。
この項の内容は次のとおりです。
このアプリケーションに必要な表の主キー値を移入する場合は、順序を使用できます。他の方法として、一意の値を提供するファンクションを作成することもできます。このアプリケーションでは、後者の方法を使用します。ファンクションは、アプリケーションに対して指定されたパッケージの一部として作成されます。ユーザー・インタフェースの実装時に、追加のファンクションおよびプロシージャが必要になった場合は、これらを追加できます。
パッケージの仕様部および本体のDDLを次に示します。最初にパッケージ仕様部が作成され、次にパッケージ本体が作成されます。パッケージ本体が最後に作成されるのは、本体が通常、指定済の表を参照するためです。ただし、この例では、本体は表を参照しません。
Oracle Application Expressにオブジェクトを作成するにはいくつかの方法があります。次の選択肢があります。
「オブジェクト・ブラウザ」でのオブジェクトの作成: 「オブジェクト・ブラウザ」を使用して表、ビュー、索引、順序、タイプ、パッケージ、プロシージャ、ファンクション、データベース・リンクのトリガー、マテリアライズド・ビューおよびシノニムを作成します。ウィザードでは、選択したデータベース・オブジェクトを作成する場合に必要な選択肢の概要を確認できます。「オブジェクト・ブラウザ」でオブジェクトを作成するには、「SQLワークショップ」、「オブジェクト・ブラウザ」にナビゲートし、「作成」をクリックします。詳細は『Oracle Database Application Expressユーザーズ・ガイド』の「オブジェクト・ブラウザを使用したデータベース・オブジェクトの管理」を参照してください。
SQLコマンドの実行: SQLコマンドを実行するには、それらのコマンドを「SQLコマンド」に入力または貼り付けます。「SQLコマンド」にアクセスするには、「ワークスペース」ホームページで「SQLワークショップ」アイコンをクリックした後、「SQLコマンド」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』の「SQLコマンドの使用」を参照してください。
スクリプトのアップロード: 必要なすべてのcreate object文を含むスクリプトをSQLの「スクリプト・リポジトリ」にアップロードします。スクリプトをアップロードするには、「ワークスペース」ホームページで「SQLワークショップ」をクリックし、「SQLスクリプト」をクリックした後、「アップロード」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』のSQLスクリプトのアップロードに関する説明を参照してください。
オンラインでのスクリプトの作成: スクリプトをスクリプト・リポジトリにオンラインで作成します。この演習では、この方法を使用してデータベース・オブジェクトを作成します。スクリプトをオンラインで作成するには、「ワークスペース」ホームページで「SQLワークショップ」アイコンをクリックし、「SQLスクリプト」を選択した後、「作成」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』のスクリプト・エディタでのSQLスクリプトの作成に関する説明を参照してください。
この演習では、スクリプトを作成して実行します。
スクリプトを作成してデータベース・オブジェクトを作成するには、次のステップを実行します。
Oracle Application Expressにログインします。
「ワークスペース」ホームページで「SQLワークショップ」をクリックして、「SQLスクリプト」をクリックします。
「作成」をクリックします。
「スクリプト・エディタ」で、次のステップを実行します。
「スクリプト名」で、DDL for Issue Tracker Application
と入力します。
「アプリケーション・データベース・オブジェクトのDDLの作成」のデータ定義言語(DDL)をコピーしてスクリプトに貼り付けます。
「保存」をクリックします。
「SQLスクリプト」ページで、DDL for Issue Tracker Applicationのアイコンをクリックします。
スクリプト・エディタが表示されます。
「実行」をクリックします。
確認のリクエストとともにサマリー・ページが表示されます。
再度、「実行」をクリックして確認します。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
「オブジェクト・ブラウザ」を使用してデータベース・オブジェクトを表示できます。
「オブジェクト・ブラウザ」でデータベース・オブジェクトを表示するには、次のステップを実行します。
「ワークスペース」ホームページに戻ります。「ホーム」ブレッドクラム・リンクをクリックします。
「ワークスペース」ホームページで、「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。
ページの左側にある「オブジェクト」リストから、「表」を選択します。
特定のオブジェクトの詳細を表示するには、次の表のいずれかを選択します。
IT_ISSUES
IT_PEOPLE
IT_PROJECTS
関連項目: 『Oracle Database Application Expressユーザーズ・ガイド』の「オブジェクト・ブラウザを使用したデータベース・オブジェクトの管理」 |
すべての必要なデータベース・オブジェクトを作成した後、表にデータをロードします。手動でデータをロードするか、SQLスクリプトで使用可能なインポート機能によってスクリプトを記述および実行できます。ただし、次の演習では、SQLスクリプトを使用してデモンストレーション・データをロードします。デモンストレーション・データを作成、削除および再作成できるように、パッケージに作成スクリプトが含まれています。最初に、パッケージ仕様部およびパッケージ本体を作成するスクリプトをロードして実行します。次に、コマンド・プロセッサを使用して、新しいパッケージ内からプロシージャを実行します。
デモンストレーション・データをロードするには、次のステップを実行します。
「SQLワークショップ」ブレッドクラム・リンクをクリックします。
「SQLスクリプト」をクリックします。
「作成」をクリックします。
「スクリプト・エディタ」に、次のように指定します。
「スクリプト名」に、Load Data
と入力します。
「問題スクリプトの作成」のスクリプトをコピーして、スクリプトに貼り付けます。
「保存」をクリックします。
「SQLスクリプト」ページで、Load Dataのアイコンをクリックします。
スクリプト・エディタが表示されます。
「実行」をクリックします。
サマリー・ページが表示されます。
再度、「実行」をクリックします。
確認のリクエストとともに「スクリプトの実行」ページが表示されます。
「実行」をクリックして確認します。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
「SQLワークショップ」ブレッドクラム・リンクをクリックします。
「SQLコマンド」をクリックします。
各表にデータをロードするプロシージャを実行するには、次を入力します。
begin it_sample_data.create_sample_projects; it_sample_data.create_sample_people; it_sample_data.create_sample_issues; end;
「実行」をクリックします。
すべてのIssue Trackerアプリケーション・オブジェクトの設計、作成およびデータの移入を行いました。次に、これらのオブジェクトにユーザー・インタフェースを作成するには、引き続き第15章「問題追跡アプリケーションの作成およびデプロイ方法」を完了してください。