データベースの考え方

データベースの目的あるいは利点

  1. データの共有
  2. プログラムから独立
  3. 機密保護

データベースの種類

階層データモデル階層データベース ツリー(木)構造
ネットワークモデルネットワークデータベース 網の目構造
関係モデル関係データベース (RDB) 2 次元表で表示

データベース管理システム

データの独立 データベースの属性を追加・ 変更してもその列を参照しないプログラムに影響はないように設計
冗長性の排除 同一の内容を持つデータの重複を避けるように設計
同時処理 排他制御を用い、 複数のプログラムから同時にアクセスが可能となるように設計

キー

キーのまとめ

関係データベース: データベースを 2 次元表形式にまとたもので、 行(レコード、組)と列(フィールド、属性)の表を作る

主キー: 特定の行を取り出すための属性のこと

候補キー: 関係表の中で、ある属性を持った行を全て取り出すもののこと、 ある行を一意に取り出すものは主キー

外部キー: 二つの表から参照関係を取り出すときに使う主キーや候補キーのこと

DBMS:データベース管理システム (DataBase Management System)

データベースの主な機能
定義スキーマを定義
操作データベースの構築、操作を行う
制御アクセス制御、排他制御、障害回復機能
トランザクション管理トランザクションの実行を制御
ビュー表の一部を抽出してユーザに分りやすく示す機能

トランザクション: インターネットバンキングなどの操作に使われ、 複数位置にある情報を更新するときに、 対象となる全ての更新処理が終了した段階で処理を確定させること

集合演算・関係演算

関係演算:一つあるいは複数の関係表のデータを取り出して、 新たに表を作ること

射影 表から特定の属性を取り出す
選択 表から特定の条件を満たす行を取り出す
結合 複数の表から条件を満たす行を取り出して新しい表を作る

集合演算:関係表の和・積・差・直積を求めること

和演算 2 つの関係表から、 どちらか一方あるいはどちらにも含まれるデータを取り出す
積演算 2 つの関係表から、両方に含まれるデータを取り出す
差演算 2 つの関係表から、どちらか一方にしか含まれないデータを取り出す

データモデル

データベース:情報を集約して管理するシステムや場所のこと

データモデル:情報を抽象化して表現した情報

データの独立性:データが変更されてもプログラムに変更が生じないこと、 3 層スキーマにより実現

ANSI:American National Standatrds Institute(米国規格協会)

DBMS概念スキーマ データベース全体の定義概念データモデル
外部スキーマユーザ側からのデータベース 論理データモデル、ビュー
内部スキーマ物理面(ハードウェア)からみたデータベース 物理データモデル

E-R 図:データモデルに独立な、データモデルの表現方法

トラブル対策:データベースは企業の資産であるので、 データベース管理システムにはログファイルやチェックポイントファイルなど、 停電やハードウェア障害などのトラブルが生じても、 データベースに損害を与えないようにする保護機能がある

SQL

DDL・DMLから成る RDB の定義と操作を行う言語、Structured Query Language

DDL データ定義言語 データを定義する スキーマ+ビュー Data Definition Language CREAT, GRANT など
DML データ操作言語 データを操作する クエリー Data Manipulation Language SELECT, INSERT, UPDATE, DELETE など

データ定義言語: データベース全体の定義+実表の定義+ビュー表の定義を行う

DDL での定義命令文機能の意味
スキーマ定義CREATE SCHEMA 文データベース全体を定義
表定義CREATE TABLE 文実表の定義
ビュー定義CREATE VIEW 文ビュー表の定義
権限定義GRANT 文 操作権限 (ALL, SELECT, INSERT, UPDATE, DELETE の許可)の定義

実表:実際にデータベースに存在する表

ビュー表:ユーザが目的に応じて要求したデータを組み合わせて作られる仮の表

権限定義: ユーザが表に対して操作できるかどうか予め定義することができる

SQL

SELECT 文:SELECT 列 FROM 表 [WHERE 条件]

ワイルドカード:あらゆる文字列を一つの記号で示すことで、 * (アステリスク) を用いることが多い。

SELECT 文に使う関数
AVG平均を出すAVG(列名)
COUNT行数を出すCOUNT(*)
MAX最大値を出すMAX(列名)
MIN最小値を出すMIN(列名)
SUM合計を出すSUM(列名)

COUNT(DISTINCT 列名):重複を排除した行数を数える

GROUP BY重複する行をグループ化する HAVINGグループ化する際の条件

例:SELECT 属性 FROM 表 GROUP BY 属性 HAVING 条件式

INSERT 文:INSERT INTO 表(or 列) VALUES (値)

UPDATE 文:UPDATE 表 SET 列 = 値 [WHERE 条件]

DELETE 文:DELETE FROM 表 WHERE 条件

データの正規化

データの正規化: 繰り返される要素を排除して表を整理すること

正規化の手順

一意:主キーを用いて分類したとき、属性が重複なく分類できていること

完全関数従属:どの主キーで選んでも一意に决まること

部分関数従属:主キーを選べば、一意に决まること

推移関数従属:完全関数従属の関係が複数続くこと

非正規形のデータ 重複する要素が含まれている
第 1 正規形 繰り返しされている情報を複数の行に分けたものを、 複数の表に分解し、重複しない表を作る
第 2 正規形 部分従属変数を取り除くこと
第 3 正規形 推移関数従属を取り除くこと

正規化の例

ある問屋で働く人の手書きの売上げメモを読んでみよう。

これを一覧表にしてみるとどうだろうか?

6月15日 薄型さにーテレビ テレビ まり電器
6月15日 月立計算機 PC ゆっきーのPC
6月15日 ダコモフォーン携帯電話ともき電話取次店
6月15日サーテックPCPCやまがた電機
6月16日サムさんPCPCまる電器店
6月16日ダコモフォーン携帯電話おの商店
6月16日 ぼうだフォーン携帯電話ともき電話取次店
6月16日 サムさんPCPCゆっきーのPC
6月16日 ダコモフォーン、ぼうだフォーン携帯電話おの商店
6月16日 薄型さにーテレビテレビやまがた電機
6月16日ラノボ思考版PCまる電器店
6月17日 サーテックPC、ラノボ思考版PCゆっきーのPC
6月17日 ラノボ思考版PCまり電器
6月17日 ぼうだフォーン携帯電話やまがた電機

これに関して第一正規化を行なう。2 つのデータが含まれているところを分解する。

6月15日 薄型さにーテレビ テレビ まり電器
6月15日 月立計算機 PC ゆっきーのPC
6月15日 ダコモフォーン携帯電話ともき電話取次店
6月15日サーテックPCPCやまがた電機
6月16日サムさんPCPCまる電器店
6月16日ダコモフォーン携帯電話おの商店
6月16日 ぼうだフォーン携帯電話ともき電話取次店
6月16日 サムさんPCPCゆっきーのPC
6月16日 ダコモフォーン携帯電話おの商店
6月16日 ぼうだフォーン携帯電話おの商店
6月16日 薄型さにーテレビテレビやまがた電機
6月16日ラノボ思考版PCまる電器店
6月17日ラノボ思考版PCゆっきーのPC
6月17日サーテックPCPCゆっきーのPC
6月17日 ラノボ思考版PCまり電器
6月17日 ぼうだフォーン携帯電話やまがた電機

卸した取扱商品一覧と卸した店舗名の表に分けてみる。

売れた品目リスト
6月15日薄型さにーテレビテレビ
6月15日月立計算機PC
6月15日ダコモフォーン携帯電話
6月15日サーテックPCPC
6月16日サムさんPCPC
6月16日ダコモフォーン携帯電話
6月16日ぼうだフォーン携帯電話
6月16日サムさんPCPC
6月16日ダコモフォーン携帯電話
6月16日ぼうだフォーン携帯電話
6月16日薄型さにーテレビテレビ
6月16日ラノボ思考版PC
6月17日ラノボ思考版PC
6月17日サーテックPCPC
6月17日ラノボ思考版PC
6月17日ぼうだフォーン携帯電話
卸した先
6月15日テレビまり電器
6月15日PCゆっきーのPC
6月15日携帯電話ともき電話取次店
6月15日PCやまがた電機
6月16日PCまる電器店
6月16日携帯電話おの商店
6月16日携帯電話ともき電話取次店
6月16日PCゆっきーのPC
6月16日携帯電話おの商店
6月16日携帯電話おの商店
6月16日テレビやまがた電機
6月16日PCまる電器店
6月17日PCゆっきーのPC
6月17日PCゆっきーのPC
6月17日PCまり電器
6月17日携帯電話やまがた電機

つぎに、部分従属変数を取り除く。A といえば B または C が該当する、 という状況ならば、A と B の表、A と C の表に分解する。

ここでは、この問屋にとって取引先が PC 取扱専門店、電話取扱専門店かどうか、 が分かる。卸した先をさらに分解すると

ゆっきーのPCPC
まる電器店PC
おの商店携帯電話
ともき電話取次店携帯電話
やまがた電機PC
やまがた電機テレビ
やまがた電機携帯電話
まり電器PC
まり電器テレビ

この例では、やまがた電機は得意先であり、 おの商店やともき電話取次店は携帯電話を専門に扱っていることが分かる。

一方、取扱った商品で表を分解すると

薄型さにーテレビテレビ
月立計算機PC
サーテックPCPC
サムさんPCPC
ラノボ思考版PC
ダコモフォーン携帯電話
ぼうだフォーン携帯電話

となり、この店ではテレビと言えば、薄型さにーテレビとなる。このように、 あるキーを選ぶと必ず特定できるものを完全関数従属という。 取扱った商品の表でで商品を選ぶとかならずある商品区分に分解される。 このように、商品名を選ぶと必ず商品区分が分かるようなものを部分関数従属という。 部分関数従属をあらたに表にしなおすことを第二正規形と呼ぶ。

この問屋は、月立計算機は唯一ゆっきーの PC にのみ卸している。 すなわちこの問屋では、ゆっきーの PC といえば、月立計算機を卸す、 と分析できる。月立計算機は、月立工場からのみ納入されるとすると、 ゆっきーの PC から月立計算機の故障のクレームがあった場合は、 月立工場に直接連絡を取ればよい。すなわち、 連絡先一覧は月立計算機を選ぶと必ずどこにとってよいか分かる。 これらを表にし直すことを第 3 正規形という。

E-R 図

関係データベースを作るに際し、関係をまとめるために使われる図である。

E-R モデル:Entity (実体) と Relation (関連) に分けてデータベース化すること

E-R 図:E-R モデルを図で表したもの。 データモデルに独立なデータモデルを表現する方法

矢印に数が示されている場合はその対応の数を示すが、 一般に矢でないほうの対応する数は多く、矢のほうは 1 である。

実体
属性
関連
直線 1 対 1
矢印 1 対多
両矢印 多対多

E-R 図は、属性を関係づけるものである。

関係表の例:公益大学の学生と必修科目
属性
「名前」「学籍番号」「語学クラス」「情報科目クラス」
レコード 1相田みつこc105901中国語情報 A
レコード 2飯島なおきc105902中国語情報 B
レコード 3内田外男c105903ロシア語情報 C
レコード 4江口洋子c105904ロシア語情報 C
レコード 5岡田増太c105905韓国語情報 A
レコード 6鎌田鍬夫c105906韓国語情報 A
レコード 7木村拓世c105907英語情報 C
レコード 8熊本みかんc105908英語情報 D
レコード 9今朝羽根坊c105909英語情報 D

E-R モデル:Entity (実体) と Relation (関連) に分けてデータベース化すること

E-R 図:E-R モデルを図で表したもの

データベース例

に対しての E-R 図は、属性を関係の矢印で結んだものである。

データベースに使われる言語

大量に質的データを取り扱うときには、計算機を用いる。 質的データを整理するには関係データベースを用いた、 SQL (Structured Query Language) を使う。

システムとしては PostgresQL, MySQL などいくつか流儀がある。