[OutSystems]Associate Reactive Developerのサンプル問題について解説 1/4(#1-#5)


Associateは入門レベルの試験で、この試験の合格が他の試験の受験資格にもなっています。
Reactiveとついている通り、Reactive Web App開発の基礎的な知識を問われる試験。

試験問題は、
https://www.outsystems.com/learn/certifications/
の、「Associate Reactive Developer (OutSystems 11)」項目のリンク「Exam Details」でダウンロードできる資料から。解凍したら、Japaneseフォルダにあるファイル「Associate Reactive Developer Sample Exam - JP.pdf」を開いてください。

Associate Reactive Developerのサンプル問題について解説 1/4(#1-#5)
Associate Reactive Developerのサンプル問題について解説 2/4(#6-#10)
Associate Reactive Developerのサンプル問題について解説 3/4(#11-#15)
Associate Reactive Developerのサンプル問題について解説 4/4(#16-#20)

1 データリレーション(多対多)

一般的なRDBの設計の知識で回答できる内容。

Entity間でリレーションを持つには、参照をする側のEntityに、参照される側のEntity Identifier型の属性を追加します。

上記の方法では参照する側:される側で多:1の関係になります。
Entity同士に多対多の関係を持つには、中間Entityを作り、双方のEntityのIdentifier型の属性を持たせればいいです。

つまり、この場合は、中間EntityにOrder Identifier型の属性とProduct Identifier型の属性を持たせます。
この場合1つのOrder(注文)中に複数のProduct(製品)が含まれ、1つのProductは複数のOrderに登場するという関係が表せる。

よって、このことを説明しているA(Order Identifier 型および Product Identifier 型の2つのアトリビュートを含む3つ目のエンティティを作成する。)が正解。

2 エンティティとデータ型(識別子)

エンティティに記載されています。

エンティティ識別子は主キーのこと。
OutSystemsでは主キーは1属性限定です。複合キーは持てない(別途UniqueなIndexを作成することは可能)。

各選択肢を見ていきます。
A:×。デフォルトではLong Integerですが、変更可能です。
B:×。同じくデフォルトでは自動採番(属性のIs AutoNumber=Yes)ですが、オフにできます。
C:○
D:×。型や名前を変更することができます。

というわけで正解はC。

3 Aggregate(Group By)

問題の図を見ると

  • ShippingState:Group Of ...という記述があるので、これはGroup Byが効いている
  • Count:Count of ...という記述があるので、この属性には、Group Byでまとめられたレコード数を返る

よって、Group Byがされているため、Aggregate返る属性は集計に使った2属性のみ。
選択肢A(2つの集約されたアトリビュート(ShippingStateおよびCount)。)が該当します。

なお、AggregateにGroup Byを適用する手順は、グループ化されたデータから値を計算するにあります。

4 Aggregate (JOIN)

図を見ると、

  • OrderとEmployeeが「With or Without」で
  • OrderとPriority/OrderStatusが「Only With」で

結合されています。
With or Without:結合の左側のEntityの全レコードを取得し、結合できるときだけ、右側のEntityをくっつけて返す(左外部結合)
Only With:左側のEntityのレコードと右側のEntityのレコードで結合できたレコードだけを返す(内部結合)

よって条件を読み替えると

  • Employeeがあるかどうかに関わらず(0レコード以上と読み替えられる)
  • Priorityがあり
  • OrderStatusがある

Orderレコードを返すことになります。
これに合致するのは選択肢D(Priorityがあり、Employeeが0人以上のOrderを返す。)ですね。
一応各選択肢を見ると
A:EmployeeがあるOrderのみを返す、の部分が間違い。With or Withoutなので、なくてもよい
B:Order.StatusでOrderStatus.IdをOnly Withで結合しているため、StatusがないOrderは返りません
C:Employeeはなくてもよいので、Employeeがない=0人の場合もOrderが返るため、「Employeeが1人以上の」の部分が間違い

5 Aggregate (Group By)

「PriorityごとのOrderの数を返す」なので、

  • (Priorityごとの)Priorityを一意に特定できる列にGroup Byする
  • (Orderの数を返す)Orderの列にCountをつける

が必要です。
選択肢Bが該当しますね。