ホーム > データベーススペシャリスト試験 > 2017年
データベーススペシャリスト試験 2017年 午後1 問01
データベースの設計に関する次の記述を読んで、設問1〜3に答えよ。
D社は, グループウェア (以下, GW という)を主力商品とするソフトウェア開発会社である。 D社では現在、次期のGW を開発しており, S君がデータベースの設計を行っている。
〔GW の主な機能〕
1.利用者管理機能
GWでは,ユーザ, グループなどを用いて GW の利用者の情報を管理する。
(1) ユーザとは, GW 上の利用者である。 GW の利用者は, GW上でユーザ登録を行い,ユーザID及びパスワードを使用して GW にログインし、 GW の各機能を利用する。
(2) グループとは, GW 上の組織である。 例えば,営業部, 経理部などである。グループには,上位のグループを一つ定めることができる。
(3) ロールとは, GW 上の役割である。 例えば, 経理担当者, 経理責任者などである。ロールは,ロール ID で一意に識別し,ロール名をもつ。
(4) ユーザは,一つのグループに必ず所属し,これを主務グループと呼ぶ。 ユーザは,一つ又は複数のグループに兼務として所属することができる。また, ユーザには,必要に応じて一つ又は複数のロールを付与でき,一つのロールを複数のユーザに付与することもできる。
なお,上位のグループの中には,ユーザが一人も所属しないグループが存在する。
2.予約機能
GW では,スケジュール予約及び設備予約を行うことができる。 例えば,打合せを行う場合に,出席者のスケジュール予約と会議室の設備予約を行うことができる。
(1) スケジュール予約とは,ユーザ自身又は他のユーザのスケジュールを予約する機能である。スケジュールを予約されたユーザは, そのスケジュールに参加するか否かを回答することができる。
(2) 設備予約とは,会議室,プロジェクタなど, あらかじめ GWに登録された設備を予約する機能である。 設備には,必要に応じて,当該設備の管理を行うグループを一つ定めることができる。
(3) スケジュール予約及び設備予約は, それぞれを同時に予約することも,いずれか一方を予約することもできる。
3.コミュニケーション機能
GWには, ユーザ間で直接メッセージをやり取りするメッセージ機能, 及び特定のテーマに関してユーザ同士で議論できる電子会議機能が備えられている。
(1) ユーザは,1人又は複数のユーザにメッセージを送信することができる。 送信先のユーザがメッセージを開封すると, 開封日時が記録される。
(2) 電子会議とは, GW 上の会議の単位である。 電子会議には,例えば“プロジェクタの利用について” などの議題が定められる。 ユーザは,新たな電子会議を作成することができる。
(3) 投稿とは, ユーザが電子会議上に文章を書き込むことである。
(4) 分野とは, 電子会議を分類する単位である。 例えば, 総務, 営業などである。電子会議は,いずれか一つの分野に属し, 分野ごとに定められた表示順に従って一覧表示される。
4.ワークフロー機能
GWには, 簡易なワークフロー機能があり、申請及び承認の流れを定義し, 定型業務として利用できる。
(1) 申請ひな形とは,各種申請のテンプレートである。 例えば,経費申請,交通費申請などの種類がある。
(2) 決裁ルートとは, 申請ひな形ごとに定められた, 申請を処理する承認経路であり,一つ以上のステップによって構成される。
(3) ステップには, 承認可能なユーザ, グループ又はロールを指定する。 ユーザ,グループ又はロールのいずれで指定されているかは、承認者区分で識別する。
(4) ユーザは,申請ひな形を指定して各種申請を行うことができる。 申請を行うと、決裁ルートの最初のステップに進む。
(5) 決裁ルートの各ステップに指定されている承認者は,自身が処理すべき申請に対して,承認処理として次のいずれかの処理を行う。
・承認 :最後のステップでは,申請状態を決裁済にする。 それ以外のステップでは,次のステップに進める。
・差戻し : 一つ前のステップに戻す。 ただし, 最初のステップでは,差戻しができない。
・否認 :申請状態を否認済にする。
(6) 申請を行ったユーザは, 申請中の申請を取り消すことができる。 取消しを行うと, 申請状態は取消済となる。
(7) 承認処理を行うと,その都度処理内容がデータベースに新規登録される。
なお,ステップの承認者をグループ又はロールで指定している場合,そのステップで複数のユーザが同時に承認処理を行うことはできない。
ワークフロー機能の決裁ルートの例を図1に, 承認画面の例を図2に示す。


〔データモデルの設計〕
S君は, 概念データモデル (図3) 及び関係スキーマ (図4) の設計を行った。


図4の関係スキーマの主な属性とその意味 制約を、 表1に示す。

〔T部長の指摘事項〕
S君の上司であるT部長は, S君が設計した成果物を確認し、次の事項を指摘した。
指摘事項①:ロールを管理するデータ構造が設計されていないので,ロールを用いて承認者を指定することができない。
指摘事項②:承認処理を行う際に, 不具合が発生するおそれがある。
設問1(1):関係“電子会議投稿”について,(1),(2)に答えよ。
関係 “電子会議投稿” の候補キーを全て答えよ。 また, 部分関数従属性,推移的関数従属性の有無を, “あり” 又は “なし” で答えよ。 “あり” の場合は,次の表記法に従って, その関数従属性の具体例を一つ示せ。
なお, 候補キー及び表記法に示されている属性1 属性 3, 属性 4 が複数の属性から構成される場合は,{}でくくること。

模範解答
候補キー:{ 電子会議番号, 投稿番号}, { 分野番号, 表示順, 投稿番号 }
部分関数従属性の有無:あり
推移的関数従属性の有無:あり
部分関数従属性:電子会議番号 → 議題
推移的関数従属性:電子会議番号 → 分野番号 → 分野名
解説
1. 核心キーワードと論点整理
2. 解答に至る論理的プロセス
2.1 電子会議投稿に含まれる鍵候補の洗い出し
問題文より
“電子会議を一意に識別する番号”
→ 電子会議番号 が電子会議レベルの一意識別子。
“投稿番号は電子会議番号との組合せで投稿を一意に識別”
→ {電子会議番号, 投稿番号} が投稿レベルの一意識別子(=候補キー①)。
“電子会議は…分野ごとに定められた表示順に従って一覧表示される。…一つの分野内で表示順が重複することはない。”
→ 同一分野内では 表示順 が重複しない ⇒ {分野番号, 表示順} が電子会議を一意に識別。
そこに投稿番号 を加えると投稿まで一意 ⇒ {分野番号, 表示順, 投稿番号}(候補キー②)。
そこに投稿番号 を加えると投稿まで一意 ⇒ {分野番号, 表示順, 投稿番号}(候補キー②)。
2.2 部分関数従属性の有無
主キーを K1 = {電子会議番号, 投稿番号} とすると
電子会議番号 → 議題 (※投稿番号を使わずに決まる)
=複合キーの一部 ⇒ 非キー属性 なので「部分関数従属性あり」。
電子会議番号 → 議題 (※投稿番号を使わずに決まる)
=複合キーの一部 ⇒ 非キー属性 なので「部分関数従属性あり」。
2.3 推移的関数従属性の有無
電子会議番号 → 分野番号(同一電子会議は単一分野)
分野番号 → 分野名(分野マスタ依存)
∴ 電子会議番号 → 分野番号 → 分野名 は推移的。
よって「推移的関数従属性あり」。
分野番号 → 分野名(分野マスタ依存)
∴ 電子会議番号 → 分野番号 → 分野名 は推移的。
よって「推移的関数従属性あり」。
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
このパターンを押さえれば、午後Ⅰのデータモデル問題は確実に得点できます。
設問1(2):関係“電子会議投稿”について,(1),(2)に答えよ。
関係 “電子会議投稿” は,第1正規形, 第2正規形, 第3正規形のうち,どこまで正規化されているか答えよ。 また, 第3 正規形でない場合は,第3正規形に分解し, 主キー及び外部キーを明記した関係スキーマを示せ。
模範解答
正規形:第1正規形
関係スキーマ:分野(分野番号, 分野名)
電子会議(電子会議番号, 議題, 分野番号, 表示順, 作成者ユーザID)
投稿(電子会議番号, 投稿番号, 投稿本文, 投稿者ユーザID)
解説
1. ここがポイント(キーワード整理)
2. 解答に至る論理的プロセス
(1) 関係と主キーを確認
問題文の関係 “電子会議投稿” は次の 9 つの属性を持つ。
電子会議投稿(電子会議番号, 議題, 分野番号, 分野名, 表示順, 作成者ユーザID, 投稿番号, 投稿本文, 投稿者ユーザID)
電子会議投稿(電子会議番号, 議題, 分野番号, 分野名, 表示順, 作成者ユーザID, 投稿番号, 投稿本文, 投稿者ユーザID)
・投稿は「電子会議番号+投稿番号」で一意に識別すると【表1】に明記されている。
⇒ 主キー:<電子会議番号, 投稿番号>
⇒ 主キー:<電子会議番号, 投稿番号>
(2) 機能従属を洗い出す
(ア) 電子会議に関する情報
問題文より
–「電子会議には議題が定められる」
–「電子会議は,いずれか1つの分野に属し,分野ごとに表示順が決まる」
–「電子会議を作成したユーザIDが記録される」
したがって
電子会議番号 → 議題, 分野番号, 表示順, 作成者ユーザID
問題文より
–「電子会議には議題が定められる」
–「電子会議は,いずれか1つの分野に属し,分野ごとに表示順が決まる」
–「電子会議を作成したユーザIDが記録される」
したがって
電子会議番号 → 議題, 分野番号, 表示順, 作成者ユーザID
(イ) 分野に関する情報
「分野は“分野番号, 分野名”で管理される」
分野番号 → 分野名
「分野は“分野番号, 分野名”で管理される」
分野番号 → 分野名
(ウ) 投稿に関する情報
電子会議番号, 投稿番号 → 投稿本文, 投稿者ユーザID
電子会議番号, 投稿番号 → 投稿本文, 投稿者ユーザID
(3) 正規形の判定
1NF:繰り返し属性・複数値はない ⇒ 1NF は満たす。
2NF:複合キーの一部(電子会議番号)のみに依存する属性(議題, 分野番号, 分野名, 表示順, 作成者ユーザID)が存在 ⇒ 2NF を満たさない。
3NF:まず 2NF 条件で落第なので 3NF でもない。よって “第1正規形” 止まり。
2NF:複合キーの一部(電子会議番号)のみに依存する属性(議題, 分野番号, 分野名, 表示順, 作成者ユーザID)が存在 ⇒ 2NF を満たさない。
3NF:まず 2NF 条件で落第なので 3NF でもない。よって “第1正規形” 止まり。
(4) 3NF へ分解
部分従属・推移従属を切り離すように次の 3 関係へ分解するのが最小で自然。
(模範解答と整合)
3. 受験者がよく間違えるポイント
- 「2NF=複合キーのときだけ問題」という誤解
主キーが単一なら 2NF は自動的に満たされるが,複合キーの場合は今回のような“部分従属”が頻出。 - 表示順や分野名を“従属関係なし”と見なすミス
表示順は“分野単位で重複なし”と書かれており,電子会議番号に従属。分野名も分野番号に従属するので要注意。 - 3NF 判定で「推移従属だけ」を見て 2NF を飛ばす
まず 2NF を満たすかを確認し,次に 3NF の推移従属を調べる手順が鉄則。
4. 試験対策まとめ
これらを押さえておけば、本問のような正規化問題は確実に得点できます。
設問2(1):図3,4及び表1について,(1),(2)に答えよ。
図 4 中の(a)〜(f)に入れる適切な属性名を答えよ。 また, 主キーを構成する属性の場合は実線の下線を, 外部キーを構成する属性の場合は破線の下線を付けること。(d, eは順不同)
模範解答
a:主務グループID
b:管理グループID
c:送信元ユーザID
d:送信先ユーザID
e:開封日時
f:参加可否回答
解説
模範解答のキーワードと論点整理
論点
- 問題文中の「主務グループ」「管理を行うグループ」「メッセージ送信元」「メッセージ送信先」「開封日時」「参加可否回答」のそれぞれを、関係スキーマの空欄に当てはめる。
- 主キーと外部キーの指定。
解答の根拠と論理展開
(a) ユーザ関係の空欄
- 問題文:「ユーザは,一つのグループに必ず所属し,これを主務グループと呼ぶ。」
- → ユーザ関係には所属先グループを示す属性が必要 ⇒ 主務グループID
- 外部キー(ユーザ→グループ.グループIDを参照)
(b) 設備関係の空欄
- 問題文:「設備には,必要に応じて,当該設備の管理を行うグループを一つ定めることができる。」
- → 設備関係には管理を行うグループIDを保持 ⇒ 管理グループID
- 外部キー(設備→グループ.グループIDを参照)
(c) メッセージ関係の空欄
- 問題文:「ユーザは,1人又は複数のユーザにメッセージを送信することができる。」
- メッセージが誰から送られたかを識別する ⇒ 送信元ユーザID
- 外部キー(メッセージ→ユーザ.ユーザIDを参照)
(d),(e) メッセージ送信先関係の空欄
- 関係スキーマ:メッセージ送信先(メッセージID,□d,□e)
- 問題文:「送信先のユーザがメッセージを開封すると,開封日時が記録される。」
- 空欄には「送信先ユーザID」「開封日時」を設定
- 送信先ユーザID:主キーの一部(メッセージIDと組合せで一意)かつ外部キー(ユーザを参照)
- 開封日時:非キー属性
(f) スケジュール予約先関係の空欄
- 関係スキーマ:スケジュール予約先(予約番号,予約先ユーザID,□f)
- 問題文:「スケジュールを予約されたユーザは,そのスケジュールに参加するか否かを回答することができる。」
- → 回答結果を表す属性 ⇒ 参加可否回答
- 非キー属性
受験者が誤りやすいポイント
- 「主務グループID」と「管理グループID」を混同しやすい
- 主務グループ:ユーザが必ず1つ所属
- 管理グループ:設備に対して「必要に応じて」設定
- メッセージ関係で「送信元ユーザID」と「投稿者ユーザID」など、用語の類似に注意
- メッセージ送信先の主キー設定
- (メッセージID, 送信先ユーザID) の複合主キーであること
- 外部キーは参照先の主キー名と一致させるのが基本
- 実線/破線の下線指定を忘れやすい
- 主キー:実線下線
- 外部キー:破線下線
試験対策として覚えておくべきポイント
- 概念モデル(ER図)で定義した役割や制約を、物理モデル(関係スキーマ)に正しくマッピングする練習を繰り返す。
- 問題文中の「必ず」「必要に応じて」「一つ又は複数」「一意に識別」などのキーワードから、主キー・外部キー・NULL制約の要否を判断する。
- 関係スキーマ設計では、属性名の一貫性(ID付与ルール)を守ると誤答を減らせる。
- 主キー/外部キーの表記方法(実線・破線)を確実に身につける。
- 練習問題を通じて、(a) に該当する文章→属性名への翻訳力を高めよう。
設問2(2):図3,4及び表1について,(1),(2)に答えよ。
図3のエンティティタイプ間のリレーションシップを全て記入せよ。 また,リレーションシップには,エンティティタイプ間の対応関係にゼロを含むか否かの表記(“○” 又は “●”)も記入すること。
なお,図3に表示されていないエンティティタイプは考慮しなくてよい。
模範解答

解説
キーワードと論点整理
- エンティティタイプ間のリレーションシップ
「実体(エンティティタイプ)がどのように関連し、業務ルール上必須か任意かを示す」 - 多重度(対応関係)と参加制約
「1対多」「多対1」の区別、参加が必須なら●、任意なら○で表現 - ブリッジエンティティ
「兼務グループ」「設備予約先」「スケジュール予約先」「メッセージ送信先」は多対多を分解 - 自己リレーションシップ
「グループ」同士の上下位関係
リレーションシップ一覧と設計意図
以下では、図3に示されたエンティティタイプ9個間のリレーションシップを、業務要件に沿って列挙します。左側・右側の多重度は「(最小–最大)」で記述し、最小数が 0 の場合を ○、1 の場合を ● と表します。
-
ユーザ ― 所属 ― グループ
- 要件:「ユーザは,一つのグループに必ず所属し,これを主務グループと呼ぶ。」
- 多重度:ユーザ(●1) ― グループ(○0..*)
(各ユーザは必ず1グループ/各グループは0人以上のユーザ)
-
ユーザ ― 兼務グループ
- 要件:「ユーザは,一つ又は複数のグループに兼務として所属することができる。」
- 多重度:ユーザ(○0..*) ― 兼務グループ(●1)
(各ユーザは0件以上の兼務/各兼務は必ず1ユーザ)
-
グループ ― 兼務グループ
- 要件:兼務グループは「ユーザID, グループID」の組合せで定義
- 多重度:グループ(○0..*) ― 兼務グループ(●1)
(各グループは0件以上の兼務/各兼務は必ず1グループ)
-
予約 ― ユーザ
- 要件:「予約(予約者ユーザID)」
- 多重度:予約(●1) ― ユーザ(○0..*)
(各予約は必ず1ユーザ/各ユーザは0件以上の予約)
-
予約 ― 設備予約先
- 要件:「設備予約とは,…設備を予約する…設備予約先(予約番号, 設備ID)」
- 多重度:予約(●1) ― 設備予約先(○0..*)
(各予約は0件以上の設備予約先/各設備予約先は必ず1予約)
-
設備 ― 設備予約先
- 要件:「設備には…管理を行うグループを…定めることができる。」
- 多重度:設備(○0..*) ― 設備予約先(●1)
(各設備は0件以上の予約先/各設備予約先は必ず1設備)
-
予約 ― スケジュール予約先
- 要件:「スケジュール予約先(予約番号, 予約先ユーザID, …)」
- 多重度:予約(●1) ― スケジュール予約先(○0..*)
(各予約は0件以上のスケジュール先/各先は必ず1予約)
-
ユーザ ― スケジュール予約先
- 要件:「スケジュール予約されたユーザは…」
- 多重度:ユーザ(○0..*) ― スケジュール予約先(●1)
(各ユーザは0件以上のスケジュール先/各先は必ず1ユーザ)
-
メッセージ ― メッセージ送信先
- 要件:「メッセージ送信先(メッセージID, …)」
- 多重度:メッセージ(●1) ― メッセージ送信先(○0..*)
(各メッセージは少なくとも1送信先/設計上0件許容されるが、運用では1件以上)
-
ユーザ ― メッセージ送信先
- 要件:「ユーザは,1人又は複数のユーザにメッセージを送信することができる。」
- 多重度:ユーザ(○0..*) ― メッセージ送信先(●1)
(各ユーザは0件以上の受信/各送信先は必ず1ユーザ)
-
グループ ― 上位グループ(自己リレーション)
- 要件:「グループには,上位のグループを一つ定めることができる。」
- 多重度:グループ(○0..*) ←──→ グループ(○0..1)
(親グループは0件または1件/子グループは0件以上)
解答導出のロジック
- 業務要件の読み取り
- 「必ず所属」「一つ又は複数」「0人もあり得る」などの表現から、多重度と参加制約を判断。
- 多対多の分解
- 「兼務」「設備予約」「スケジュール予約」「メッセージ送信」は多対多の性質があるため、中間エンティティで「–先」「–グループ」を設計。
- ER記法との整合
- 必須参加を●、任意参加を○で表し、図3の黒丸/白丸に対応させる。
- 自己リレーションの扱い
- グループ同士の上下位は、自己結合で「0..1/0..*」とする。
受験者が誤りやすいポイント
- 「必ず1つ所属」と「兼務は任意」を混同しやすい
- 多対多を直接結ばず「中間エンティティ」を立てる点
- 自己リレーションシップ(グループの上下位)を見落とす
- 「0件許容」と「1件以上必須」を示す○と●を逆に記載する
試験対策ポイント
- 要件文中の「必ず」「できる」「存在しない場合はNULL」などのキーワードで、多重度と参加制約を即座に判断
- 多対多は必ずブリッジエンティティで分解
- ER図の記号(●=必須、○=任意)を正確に使い分ける
- 自己リレーションは「同じエンティティを親子関係で結ぶ」パターンとして覚えておく
以上の流れで、「図3のエンティティタイプ間のリレーションシップ」を正しく抽出・記述できます。
設問3(1):〔T部長の指摘事項〕 について,(1),(2)に答えよ。
指摘事項①に対応するために、 新たな関係を二つ追加し、 既存の関係に属性を一つ追加することにした。 新たに追加する関係の主キー及び外部キーを明記した関係スキーマ, 属性を追加する関係名及び追加する属性名を答えよ。
模範解答
関係スキーマ:ロール(ロールID, ロール名)
ロール付与先(ロールID, ユーザID)
関係名:決裁ルート
属性名:承認ルートID
解説
キーワード・論点整理
- 指摘事項①:ロールを管理するデータ構造が設計されていない
→ 問題文中に「ロールは,ロール ID で一意に識別し,ロール名をもつ」「ユーザには…一つ又は複数のロールを付与でき…一つのロールを複数のユーザに付与することもできる」とある - 必要な追加
- ロールを表す関係(エンティティ)
- ユーザとロールの多対多を表す関係(関連)
- 「承認者区分」が“ロール指定”の場合にそのロールを参照するための属性
解答に至る論理的理由
-
【ロールを表す関係】
問題文:「ロールは,ロール ID で一意に識別し,ロール名をもつ。」
したがって,下記のようにロールを管理する新規関係を追加します。 -
【ユーザとロールの多対多関係】
問題文:「ユーザには…複数のロールを付与でき,一つのロールを複数のユーザに付与することもできる。」
多対多を実現する中間テーブルを追加します。 -
【承認者をロールで指定できるように属性追加】
問題文:「ステップには,承認可能なユーザ,グループ又はロールを指定する。ユーザ,グループ又はロールのいずれで指定されているかは、承認者区分で識別する。」
既存の決裁ルート
関係には「承認ユーザID」「承認グループID」しかなく,「ロール指定」の場合の参照先がありません。
したがって,決裁ルート
関係に「承認ルートID」を追加し,- 承認者区分=“ロール指定”のときはこの「承認ルートID」で
ロール
を参照 - 他区分のときは NULL とする
ことで,各区分に応じた承認者情報を保持できます。
- 承認者区分=“ロール指定”のときはこの「承認ルートID」で
受験者が誤りやすいポイント
- 「ロールID」を直接
ユーザ
関係に追加して1対多と勘違いし,多対多を表現しきれない - 承認者区分=ロールの場合の参照属性を忘れて「承認ユーザID」「承認グループID」しか使えないままにする
- 属性名を「承認ロールID」としてしまうが,設問や模範解答に合わせて「承認ルートID」を正確に記述する
試験対策として覚えておくべきポイント
- 多対多の関係は中間テーブル(関係)を設け,両者の主キーを外部キーかつ複合主キーとして設定する
- エンティティ(概念)として明示されたものは必ず対応する関係(テーブル)を設計する
- 「区分」と「参照先属性」のペアはセットで設計し,区分に応じて適切な外部キー属性を持たせる
- 模範解答の表記や固有名詞は問題文と同じ用語・名称を正確に引用することが重要
設問3(2):〔T部長の指摘事項〕 について,(1),(2)に答えよ。
指摘事項②の不具合はどのようなときに発生するか。 その状況を、具体的に 40字以内で述べよ。 また, 不具合に対応するために、 関係を一つ修正することにした。 修正後の関係の主キー及び外部キーを明記した関係スキーマを答えよ。
なお, 修正後の関係スキーマは,第3正規形の条件を満たしていること。
模範解答
状況:一度承認を行った申請が差戻しされた後、再度承認処理を行ったとき
関係スキーマ:承認(申請ひな形番号, 申請連番, ステップ番号, 承認連番, 承認処理結果, コメント, 承認者ユーザID, 承認日時)
解説
キーワードと論点整理
-
指摘事項②の不具合
「一度承認を行った申請が差戻しされた後、再度承認処理を行ったとき」に既存の承認テーブルで主キー制約違反や上書きが発生する。 -
原因
オリジナル設計では承認を識別するキーに「承認連番」を含めておらず、同一ステップで再承認すると既存レコードと衝突する。 -
修正
承認テーブルの主キーに「承認連番」を追加し、再承認を別レコードとして登録できるようにする。
解答理由の論理的説明
-
【問題文】より
「ステップの承認者をグループ又はロールで指定している場合…再度承認処理を行うことはできない」
とあり、差戻し後に同じステップへ戻るケースがあることが前提。 -
承認処理の登録要件
「承認処理を行うと, その都度処理内容がデータベースに新規登録される。」
しかし、元スキーマで主キーが
(申請ひな形番号, 申請連番, ステップ番号)
のみだと、再承認時に同一キーで新規行を追加できず、エラー又は上書きとなる。 -
結果
「一度承認を行った申請が差戻しされた後、再度承認処理を行ったとき」に不具合発生。 -
対策
承認を一意に識別するため、主キーに「承認連番」を含める。
これにより、同一ステップで何度承認しても別レコードとして管理可能になる。
修正後の関係スキーマ
- (申請ひな形番号, 申請連番)→申請(申請ひな形番号,申請連番)
- (申請ひな形番号, ステップ番号)→決裁ルート(申請ひな形番号,ステップ番号)
- 承認者ユーザID → ユーザ(ユーザID) |
受験者が誤りやすいポイント
- 「承認連番」は単なる連番と考えがちだが、主キーに含めないと差戻し後の再承認で一意性を担保できない。
- 差戻し(ステップ番号が同じ状態へ戻る)と否認(申請が終了)を混同しない。否認は最終状態へ遷移し再承認は起きない。
試験対策として覚えておくべきポイント
- 再度同一キーで追加すべきケースには、必ず「複数回分」を識別する連番やタイムスタンプを主キーに含める。
- 第3正規形では、主キー以外の属性が互いに依存し合わないことを確認し、必要な識別子を欠かさず設計する。
- ER/リレーション設計で「多重登録」の要件を常に洗い出し、キー設計と突き合わせるクセをつける。