第11講 関係データベース  1講 2講 3講 4講 5講 6講 7講 8講 9講 10講  12講 13講 14講

コンピュータの基礎第11講
関係データベース

【第11講のポイント】
 前講では、データ(レコード)ファイルの編成法について、アクセス速度の観点も含めて議論してきた。本講では、データベースについて学ぶ。データベースは、現在のコンピュータシステムおいて最も基本的な役割を果たすサービスプログラムである。

【第11講の目標】学習後、以下のことが身についたかチェックしよう。
  1. データベースの機能と役割を理解する
  2. 関係データベースの次の操作について理解する
     射影、選択、直積、結合
  3. SQLによる問合せについて理解する。
  4. 表(テーブル)設計の基本的考え方を理解する。

【第11講の構成】
  1. DBMS
  2. 関係データベース
  3. 射影操作
  4. 選択操作
  5. 直積操作
  6. 結合操作
  7. SQLの例題と問題
  8. 表の設計

本書の見方
ページをめくる
左(右)ページの左(右)端クリックまたはドラッグする
左(右)矢印キーを押す
1ページ分の移動
左右上端にある[Next]、[Previous]タブをクリックする
章の頭に移動
右上の【章の移動】タブをクリックし、現れた章を選ぶ
ページのジャンプ
右上のページ番号表示タブをクリックし、現れたページを選ぶ
画像の拡大およびリンク先への移動
画像やリンク先をクリックすれば、別ウィンドウ(タブ)で表示される

この教科書はBookletを利用して作成しています。

第1節 データベース管理システム(DBMS)

 データベースとは、関連するデータファイルを集めて整理・統合し、データベース管理システム(DBMS)を通して一元的に管理・利用する仕組みである。
 データベースが導入される以前は、大学でいえば、学生のデータファイルを教務課、学生課、経理課等がそれぞれ別々に管理していた。学生が住所を変更したとしよう。学生は、関連するすべての部署に住所変更届を出さなければいけないか、あるいは一ヶ所ですむとしたら、受け付けた部署が他のすべての部署に連絡しなければならない。ここで、変更届の提出漏れあるいは連絡漏れがあれば、ある部署では住所が更新されているのに漏れのあった部署では古いままというデータの不整合が生じる。このように、複数の部署が同じような(微妙に異なる)データを同じような(微妙に異なる)プログラムで別々に保守・管理するのは無駄だし、間違いも起こりやすい。
 すべての部署(のプログラム)がデータベース(管理システム)を共有してその機能を利用することの利点としては、
  1. データファイルの共有化により、重複したフィールド(項目)が一元化される
  2. ユーザ(個々のプログラム)はデータ管理の詳細に煩わされなくなる
  3. ユーザ(個々のプログラム)は高度な利用が簡単に行えるようになる
  4. データの(構成や編成法の)変更が、利用プログラムに影響を与えない
等が考えられる。そのためデータベース管理システムは、次の機能を持つ。
  1. データの集中管理:整合性の維持、機密保全、障害回復等
  2. データ構造の定義、再構築
  3. データの操作:問合せ、レコードの追加、削除

 データベースには、その表現モデル(第2講第4節参照)によって、ネットワーク型データベース、階層型データベース、関係データベースがある。現在は、もっぱら関係データベースが使われており、次節以降、より詳しく学んでいこう。

*問11.1. (ヒント)
  1. 階層型データベースについて説明せよ
  2. ネットワーク型データベースについて説明せよ
  3. データベースが持つ機能とその機能により得られる利点を対応付けて説明せよ

第2節 関係データベースと SQL

学生
番号氏名住所
101青森太郎多摩市
102岩手陽子八王子市
119兵庫健多摩市
関係モデルを用い、レコード(データ)を(複数の)表(テーブル)で保持する。
  1. の各列には項目(フィールド)名が付く
  2. 表の各行がレコードで、各項目に対する値の組である
このようなレコードの集まりを数学では「関係」と呼ぶ。
成績
番号科目点数
101数学80
101国語70
102国語90
119数学60

SQL による表作成

SQLは、関係データベースへの操作を記述する言語である。SQLite compiled to javascript(sql.js)を使ったデモページを利用して、SQLについて学んでゆく。詳しく学ぶには、SQLiteの解説がある。

問11.2.次頁の SQL interpreter で以下の操作を行え (ヒント)
  1. 以下のSQLをコピペし元のSQLと置換えて実行【Execute】し、学生、成績の表を作成せよ
    --表のクリアと構造定義(表の枠組み作成)
    DROP TABLE IF EXISTS 学生; DROP TABLE IF EXISTS 成績;
    CREATE TABLE 学生(番号 integer,氏名 text,住所 text);
    CREATE TABLE 成績(番号 integer,科目 text,点数 integer);
    --データの挿入
    INSERT INTO 学生 VALUES (101,'青森太郎','多摩市');
    INSERT INTO 学生 VALUES (102,'岩手陽子','八王子市');
    INSERT INTO 学生 VALUES (119,'兵庫健','多摩市');
    INSERT INTO 成績 VALUES (101,'数学',80);
    INSERT INTO 成績 VALUES (101,'国語',70);
    INSERT INTO 成績 VALUES (102,'国語',90);
    INSERT INTO 成績 VALUES (119,'数学',60);
    SELECT * FROM 学生; SELECT * FROM 成績;-->表の表示
  2. 後の問用に作成データベースを保存【Save db】(ダウンロード)せよ。
  3. レコード (120,'愛媛雅美','八王子市') を追加するSQL命令を書き、正しく動くことを確認せよ。
2.の注.ダウンロードファイル(例えばsql.db)はSQL Intepreterにロード【Load db】するものなので、パソコンに対応アプリ(SQLite)をインストールしなくてよい。(開けないというメッセージがでても構わない
射影 各レコードの指定された項目だけを取り出す操作で、例えば次の SQL文は、学生表の番号と住所の項目のみからなる表を作成する。
学生
番号氏名住所
101青森太郎多摩市
102岩手陽子八王子市
119兵庫健
SELECT 番号, 住所
FROM 学生;
 
番号住所
101多摩市
102八王子市
119多摩市

選択 指定された条件をみたすレコードを取り出す操作で、例えば 次の SQL文は、成績表から科目項目の値が「数学」であるレコードが選択される。

成績
番号科目点数
101数学80
101国語70
102国語90
119数学60
SELECT *
FROM 成績
WHERE 科目='数学';
 
番号科目点数
101数学80
119数学60