関連する表を使う
この例では,JOIN文を使わなくても,1つの表を別の表に関連付けることができる非常に強力なテクニックを示す.このテクニックは,実体値の特性の単純な概念に基づいているため,実体をこれまでに使ったことのある人にはなじみ深いものである.
リレーショナルデータベースの多くには外部キーが含まれる.表のいくつかの列に外部キーのタグが付いている場合には,それらは別の表の主キーを参照し,2つの表の間の接続を作成する.例えば,注文の表には顧客や製品の表への外部キーが含まれ,それらの情報を直接複製しなくてもよいように設定することができる.豊かな構造をもつ典型的なデータベースについて見てみよう.
外部キーを通して関連付けられる表の構造は,グラフとして可視化できる.
RelationalDatabaseに対応するEntityStoreを構築する際には,外部キーから特別な特性がいくつか構築される.
実体タイプの注文を見てみよう.外部キー"customerNumber"は,"customers"の表を指し示す.フレームワークは,自動的にそれを認識し,Entityオブジェクトを返す"customers"という名の新しい特性(概要の表で下線が引かれている)を作成する.このように"orders"実体それぞれについて対応する"customers"実体がある.EntityStoreを登録してこれを確かめる.
これで"orders"タイプの実体にEntityValueを呼び出すことができる.
"orders"の表は,"orderdetails"の表からの外部キーの対象であり,このことが"orderdetails"の表から逆写像を作成するフレームワークを許す.その結果,タイプ"orders"がEntityClassの値を持つ特性"orderdetails"を持つことになる.
外部キーの周りにこれらの記号ラッパーを持つことの大きな利点は,特性の抽出をEntityFunctionにつなぐことができることである.例えば,顧客の実体から始めて,誰がその営業担当者であり,その担当者の管理者が誰であるかを調べてみよう.
これらの操作は,Wolfram言語を使い慣れている人にとっては非常に自然なことであるように思われるかもしれないが,これらの特別の特性を使わなければ非常に複雑な操作である.通常行われるのは,これをJOIN文として見なすことである.
関連付けられた表を使うことのもう一つの大きな利点は,クエリとして考えずにこれらを使って集約を行えることである.例えば,以下は注文の値の合計である.
集約についての同様のクエリだと以下のようになる.