Lesson6 表の結合
リレーショナルデータベースの基礎でもあるリレーショナルモデルが、他のデータモデルと比べて異なる点は何でしょうか。やはり、データを表という単位で扱い、表と表との関連付け(リレーションシップを取ると言います。)を行える点でしょう。この関連付けを行うことによって、データの重複を避けることが可能になり、追加や修正にも柔軟に対応できるようにもなります。
ここでは、実際にSQL文を使ったリレーションシップの実現方法について考えてみます。
6.1 リレーションシップとは
リレーションシップとは表と表とを互いに関連付け、さらに新しい表をつくり出す機能です。新しく作成された表も、もちろん通常の表と同じように扱うことができるので、本来の表に含まれないデータでも取得することができるようになります。
例えば次のような表が存在したとします。
SELECT * FROM BUYS;
NO NAME SHOP ----- --------------- -------
1 みかん 2
2 りんご 2 3 キュウリ 1
4 ぶどう 2
5 テレビガイド 3
SELECT * FROM SHOP;
NO NAME
----- ---------------
1 八百八
2 くだものキムラ
3 ブック原木
上の2つの表は 買い物リスト( BUYS ) と そのお店
( SHOP ) のリストです。
この2つの表の共通点は BUYS 表にある SHOP
の 番号( NO ) と SHOP表にある 番号 NO そのものです。この2つの値を使って表を結び付けます。
SELECT BUYS.NO, BUYS.NAME, SHOP.NAME
FROM BUYS, SHOP WHERE BUYS.SHOP = SHOP.NO;
結果は次のようになります。
NO NAME SHOP
----- --------------- ---------------
1 みかん くだものキムラ
2 りんご くだものキムラ 3 キュウリ 八百八
4 ぶどう くだものキムラ
5 テレビガイド ブック原木
2つの表が結合されて1つの表と同じように扱うことができました。
仮に、この表から果物を買うお店を「くだものキムラ」から「スーパーキムラ」に店名が変更された場合を考えてみて下さい。最終的な表から変更する場合には合計3行の変更をしなければなりません。しかし、このように
お店のリスト ( SHOP )として、2つの表が分離していれば
SHOP 表の NAME 列の 1行のみを変更して結合するだけで済みます。
また、BUYS表に存在する NO 列の値だけで、SHOP
表の名前を導き出せるようになります。
まとめ
結合はリレーショナルデータベースの軸になる技術です。この技術こそ現在まで高い評価を保ちつづけるリレーショナルデータモデルの実力であると言えるでしょう。表のリレーションシップによって表に柔軟性を与え、拡張性にとんだデータ構造を実現することが出来るようになります。
本書での要点
<戻る>