こんにちは!平野です。
今回の記事は以下の記事の続きとなります。
OracleAPEXにおけるGUIを用いたテーブルの作成
前回はタスク管理アプリケーションに必要な要素を考え、タスク作成のためのテーブルをGUI上で作成しました。
TASK_LISTSテーブル
列名 | 説明 | データ型 | スケール | NULLを許可 |
---|---|---|---|---|
ID | 作成されたタスクごとに付与 | NUMBER | いいえ | |
USERNAME | タスクを作成したユーザーの名前 | VARCHAR2 | 255 | いいえ |
TASK_TITLE | タスクのタイトル | VARCHAR2 | 255 | |
TASK_CONTENT | タスクの内容 | VARCHAR2 | 4000 | |
TASK_DEADLINE | タスクを完了すべき期日の設定 | DATE |
このテーブルだけでもタスクの作成はできますが、このタスクを細分化することでさらに管理がしやすくなります。
今回はタスクを細分化するための「サブタスクテーブル」を作成していきます。
更新履歴
日付 | 更新概要 |
---|---|
2020/11/25 | 記事公開 |
対応バージョン
製品名 | バージョン |
---|---|
Oracle APEX | 5.1 – 20.1.0.00.13 |
Oracle Database | 12.2 – 19.6 |
タスクとサブタスクの関係性
タスクとサブタスクの関係性を考えてみます。
例えば、「社内イベント企画」というタスクがあるとします。
社内イベントを企画するためのさらに詳細なタスクを以下のように考えてみます。
1. イベント内容選定
2. 参加社員のスケジュール調整
3. イベント費用徴収
これが今回作成するサブタスクに当たります。
まずは、テーブル作成に必要な要素を考えてみます。
テーブル名:TASK_SUBLISTS
列名 | 説明 | データ型 | スケール | NULLを許可 |
---|---|---|---|---|
ID | 作成されたタスクごとに付与 | NUMBER | いいえ | |
TASK_ID | サブタスクに対応するTASK_LISTSのID | NUMBER | いいえ | |
TASK_TITLE | サブタスクのタイトル | VARCHAR2 | 255 | |
TASK_CONTENT | サブタスクの内容 | VARCHAR2 | 4000 | |
TASK_DEADLINE | サブタスクを完了すべき期日の設定 | DATE |
>要素ごとのデータ型に関してはOracleの公式マニュアルSQL言語リファレンスを参考にしてくだい。
タスクを作成した後、細分化の為にサブタスクを作成し、サブタスクのタイトルと内容、その期限を指定するアプリケーションを考えます。サブタスクのテーブルにはそれらの情報を保存できるように、元のタスクを判定するための列と、タイトル、内容、期限を保存できる列を作ります。
サブタスクのテーブルには親となるタスクを判断する列(TASK_ID)に外部キーを付与することが出来ます。
この外部キーの設定により、親となるテーブルに存在しないタスク(TASK_ID)のサブタスクは作成出来なくするなど、関連付けが可能です。
このテーブルの定義をもとに、Oracle APEXのGUI上でテーブルを作成していきます。
Oracle APEXでは、外部キーの設定もGUI上で行うことができます。
サブタスクテーブルの作成
GUI操作の手順を説明していきます。
- オブジェクトブラウザを開き、右上の+マークから表を選択します。
- 今回仮定したテーブル定義を入力します。
- 新規順序から移入を選択し、主キーをIDとして下さい。
- 外部キーを設定します。
- 削除を許可しないを選択
- サブタスクのキー列をTASK_IDに設定
- 参照表をTASK_LISTSとし、参照列をIDに設定
- 追加ボタンで設定完了
- 制約についてはそのまま設定せず次へを選択してください。必要となった場合は後から設定することも可能です。
- 表の作成を選択してください。
今回GUI上で作成したテーブルの外部キー制約にあたるSQL文が以下のように自動生成されます。
ALTER TABLE "TASK_SUBLISTS" ADD CONSTRAINT "TASK_SUBLISTS_FK"
FOREIGN KEY ("TASK_ID")
REFERENCES "TASK_LISTS" ("ID")
おわりに
いかがだったでしょうか。
Oracle APEXは表の作成だけでなく、テーブル間の制約に関してもGUI上で作成することが可能です。
是非ともご参考にしていただければと思います。
ありがとうございました!