こんにちは!平野です。

今回の記事は以下の記事の続きとなります。
OracleAPEXにおけるGUIを用いたテーブルの作成

前回はタスク管理アプリケーションに必要な要素を考え、タスク作成のためのテーブルをGUI上で作成しました。

TASK_LISTSテーブル

列名説明データ型スケールNULLを許可
ID作成されたタスクごとに付与NUMBERいいえ
USERNAMEタスクを作成したユーザーの名前VARCHAR2255いいえ
TASK_TITLEタスクのタイトルVARCHAR2255
TASK_CONTENTタスクの内容VARCHAR24000
TASK_DEADLINEタスクを完了すべき期日の設定DATE

このテーブルだけでもタスクの作成はできますが、このタスクを細分化することでさらに管理がしやすくなります。

今回はタスクを細分化するための「サブタスクテーブル」を作成していきます。

更新履歴

日付更新概要
2020/11/25記事公開

対応バージョン

製品名バージョン
Oracle APEX5.1 – 20.1.0.00.13
Oracle Database12.2 – 19.6

タスクとサブタスクの関係性

タスクとサブタスクの関係性を考えてみます。

例えば、「社内イベント企画」というタスクがあるとします。
社内イベントを企画するためのさらに詳細なタスクを以下のように考えてみます。
1. イベント内容選定
2. 参加社員のスケジュール調整
3. イベント費用徴収

これが今回作成するサブタスクに当たります。

まずは、テーブル作成に必要な要素を考えてみます。

テーブル名:TASK_SUBLISTS

列名説明データ型スケールNULLを許可
ID作成されたタスクごとに付与NUMBERいいえ
TASK_IDサブタスクに対応するTASK_LISTSのIDNUMBERいいえ
TASK_TITLEサブタスクのタイトルVARCHAR2255
TASK_CONTENTサブタスクの内容VARCHAR24000
TASK_DEADLINEサブタスクを完了すべき期日の設定DATE

>要素ごとのデータ型に関してはOracleの公式マニュアルSQL言語リファレンスを参考にしてくだい。

タスクを作成した後、細分化の為にサブタスクを作成し、サブタスクのタイトルと内容、その期限を指定するアプリケーションを考えます。サブタスクのテーブルにはそれらの情報を保存できるように、元のタスクを判定するための列と、タイトル、内容、期限を保存できる列を作ります。

サブタスクのテーブルには親となるタスクを判断する列(TASK_ID)に外部キーを付与することが出来ます。
この外部キーの設定により、親となるテーブルに存在しないタスク(TASK_ID)のサブタスクは作成出来なくするなど、関連付けが可能です。

このテーブルの定義をもとに、Oracle APEXのGUI上でテーブルを作成していきます。
Oracle APEXでは、外部キーの設定もGUI上で行うことができます。

サブタスクテーブルの作成

GUI操作の手順を説明していきます。

  1. オブジェクトブラウザを開き、右上の+マークから表を選択します。
    画像1
  2. 今回仮定したテーブル定義を入力します。
    画像2
  3. 新規順序から移入を選択し、主キーをIDとして下さい。
    画像3
  4. 外部キーを設定します。
    1. 削除を許可しないを選択
    2. サブタスクのキー列をTASK_IDに設定
    3. 参照表をTASK_LISTSとし、参照列をIDに設定
    4. 追加ボタンで設定完了
      画像4
  5. 制約についてはそのまま設定せず次へを選択してください。必要となった場合は後から設定することも可能です。
  6. 表の作成を選択してください。
    画像5

今回GUI上で作成したテーブルの外部キー制約にあたるSQL文が以下のように自動生成されます。

ALTER TABLE "TASK_SUBLISTS" ADD CONSTRAINT "TASK_SUBLISTS_FK" 
FOREIGN KEY ("TASK_ID")
REFERENCES "TASK_LISTS" ("ID")

おわりに

いかがだったでしょうか。
Oracle APEXは表の作成だけでなく、テーブル間の制約に関してもGUI上で作成することが可能です。

是非ともご参考にしていただければと思います。
ありがとうございました!