リレーショナルデータベースの基本概念
大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
リレーショナルデータベースの基礎であるテーブル定義,一貫性制約,SQL,結合と分解,トランザクション,埋め込みSQL,実行計画,二次索引を学ぶ.SQLite 3 を用いて,SQL についての演習も行う.
【サイト内の関連ページ】
- ファイル (file)
ファイルにはファイル名があり,データが保存されている.ファイル操作には,ファイルオープン,ファイルクローズ,ファイルの読み出し,ファイルの書き込みなどがある.
- データベース (database)
データベースとは,複数のエンドユーザや,複数のアプリケーションプログラムから共有され,持続的に利用されるデータの集まりのことである. データベースは,実世界のある側面や部分を切り取り,データとして表現したものになっているのが普通である. データベースファイルは,普通,ハードディスクなどの二次記憶装置に置かれる(メインメモリなどにキャッシュされることもある).
- データベース名 (「データベース名」ともいう)
個々のデータベースに付けられた名前のこと.1度命名されたデータベース名は変更できない.
- データベースの正しさ
データベースが実世界の有り様を正しく記述していることが重要である.
- そのためにデータベースのデータ構造が正しく記述されることが必要である.例えば,人の名前についてのデータベースが,「姓」と「名」しか扱えないように設計されている場合, もし,ミドルネームを持つ人が現れると困ったことになる. 電話番号を扱う場合,電話番号を格納するための項目が1つしかない場合,携帯電話を複数持っている人,携帯電話と自宅の加入電話の両方を使っている人は困ったことになる.
- データベース内のデータに誤りがないことが必要である(このことを.「一貫性」あるいは「整合性」と呼ぶことにしたい).例えば,生年月日のデータが「平成3年4月1日」としてデータベースに記録されているが実際は違うとか,会員のデータベースで同じ人が二重登録されているなど,データベースに誤りが混入すると困ったことになる.
- 一貫性制約 (integrity constraint)
一貫性制約とは,データベースの一貫性に関する制約のこと. 例えば,「月の値は1以上12」になっていなければならない.「氏名の欄は空ではいけない」など,述語などの形で,データベースの一貫性制約を記述することができる. 記述された一貫性制約を全て満足するからといって,データベースの一貫性が保たれているとは限らないことに注意.例えば,生年月日の年を本当は1980なのに,勘違いして1979と記入してしまうようなミスなどは,一貫性制約で防ぎようがない.
- 問い合わせ (query)
問い合わせとは,データベース内から必要なデータを取り出すためのプログラムのことをいう.
- 一貫性の維持
データベースへの書き込み(=データの挿入,削除,更新)のうち,誤った操作を排除し,データベースを常に,一貫性制約を満足している状態に維持すること.
- アクセス権限
データベースの共有において,許されるデータアクセス(=読み出し,書き込み)の種類と範囲をユーザごとに定め,それを守らせるための機能.権限外のアクセスは許されない.
- 障害回復 (recovery from crash)
各種の障害からデータベースを守る機能.
- データベース管理システム (Database Management System)
データベースを管理し,利用に供するためのソフトウェアのこと. データベースに関する下記の機能を持つのが普通である.
- データベース定義
所定のデータモデルに準拠する形で,データベースのデータ構造と一貫性制約を記述できる機能.データ構造や一貫性制約はデータベースごとに記述できることに留意せよ.
- データベース操作
データモデルが定める演算に準拠する形で,データベース内から必要なデータを取り出したり,演算を行ったり,データベースの変更を行う機能
- 問い合わせ最適化
データベースへの問い合わせを最適化する機能
- 大量のデータを効率よくアクセスできる機能
データモデルが定める演算を高速に処理するための索引など.
- 一貫性の維持
- アクセス権限と機密保護
- トランザクション
トランザクションに関する機能としては下記の機能がある.
- データベースを操作するプログラムの側の異常に起因して,データベースの一貫性が失われることがないようにするための機能
- データベースを,各種のエンドユーザや,各種のアプリケーションプログラムが同時アクセス(=読み出し,書き込み)するような状況で, データの同時アクセスに起因して,データベースの一貫性が失われたり,アプリケーションの処理結果がおかしくなるようなことがないようにするための機能
- データベースに格納されたデータが,意図せず消失してしまうことを防ぐ機能
- データベース定義
- 組み込み型のデータベース管理システム
一般のデータベース管理システムは,単独のプロセスとして動き,他の複数のプロセス(自サイトや遠隔サイト)と通信が行われる.つまり,データベースが同時アクセスされる.一方で,組み込み型のデータベース管理システムは,アプリケーションプログラムの中に組み込まれており, 独立したプロセスではない.また組み込み型のデータベース管理システムには,同時アクセスに関する機能がない,アクセス権限と機密保護の機能が無い(そもそも,他のアプリケーションプログラム等がデータベースにアクセスできないので)など,機能が限定されているのが普通である.その分軽量である.
- データモデル (data model)
データモデルとは,実世界をデータベースとして記述するための共通の枠組みのこと. 「枠組み」と言っているのは,データベースを利用する,各種のエンドユーザや,各種のアプリケーションプログラムはデータモデルに従うため。
データモデルには,リレーショナルデータモデルなどいくつかの種類があるが,どのデータモデルも次の 3要素からなる(と言ってよい).
- データベースのデータ構造を記述するための約束事(規約)
- その規約に基づいて記述されたデータに対して,どのような演算が可能を定めたデータ操作の体系
- 一貫性制約を記述するための約束事(規約)
言い換えると,データベースのデータ構造や一貫性制約は,データモデルが定める規約を守っている形で記述されている.さらに, データベースを利用する,各種のエンドユーザや,各種のアプリケーションプログラムは,データモデルの定めに従って,データベースを利用するということになる.
- データモデリング
概念モデルや論理モデルを記述する行為のこと. 実世界のデータベース化は,概念モデル,論理モデルという2段階で行われるのがふつうである
- 論理モデル
論理モデルには,リレーショナルデータモデル,ネットワークデータモデル,ハイアラキカルデータモデル(階層データモデルともいう),オブジェクト指向モデルなどの種類がある.
データベース管理システムの種類によって,論理モデルの種類が異なる.実世界の概念モデル(下記)がすでに設計済みであれば,概念モデルを変換して,論理モデルをある程度導出することができる.
- 概念モデル
データベース化の対象となる実世界について,そのデータ構造と一貫性制約を記述したもの.概念モデルでは,特定の論理モデルを仮定しないし,特定のデータベース管理システムを仮定しない.
- 概念モデルからの論理モデルの導出
概念モデルは,必ずしも,データベース管理システムでそのまま管理可能な表現にはなっていない.従って,ふつうは,概念モデルを,データベース管理システムで管理可能な表現である論理モデルに変換することが必要になる.
- 実体関連モデル
実体関連モデルは,概念モデルを記述するための枠組み.実世界を実体型と関連型で記述し,実体型と関連型に属性を定める.さらに,主キーに関する一貫性制約などを定める.
- 実体
実世界で存在を認識できる対象
- 実体型
同一種類の実体を集めた実体集合 (集合のことなので,個々の「実体」と「実体型)は異なる)
- 関連
2つ以上の実体型同士に属する実体同士の相互関係.関連は2項または3項以上の相互関係になる(3つ以上の実体型が互いに関連していることがありえるので)
- 関連型
関連の集まりで,同一種類のもの.
- 属性
実体型や関連型に付随する各種の性質を記述するためのものを「属性」という.
- 実体関連モデルでのキー(「候補キー」ともいう)
実体関連モデルで「キー」というときは,実体型の属性のうち,実体を唯一に識別するのに使える属性あるいは属性集合のうち極小なもの.
- 実体関連モデルでの主キー
実体関連モデルにおいて,ある1個の実体型に対して,キーは複数種類ありえる.その中でデータベースの管理上最も適当と思われるものを,実体関連モデルの設計時に選んだものを主キーとする. ある1個の実体型に対して「キー」が1種類しかないときは,それが主キーになる.
- 弱実体型
ある実体型が,単独では主キーを持てないとき,弱実体型という.(主キーを持つ実体型のことを,弱実体型と区別したいときは「通常実体型」のようにいう). ※ 「Aさんの持っているデータベースの教科書」で,教科書に自分の氏名を書いていないとき,「教科書」という実体型は,弱実体型になるだろう.
- 実体関連図(「実体—関連図」とも呼ぶ)
実体関連モデルで記述した概念モデルを,図として描くための記法. 実体型が四角.関連型がひし形.属性が楕円.主キーにはアンダーラインを引く.弱実体型は二重の四角になる.実体型を関連型を結ぶ線分に,1,N,Mを付け,1対1対応,1対多対応,多対多対応を示す.
- 実体関連モデルにおける実世界記述の曖昧性
実世界を実体関連モデルで記述したとき,実質的な意味が同じであるのに,表現が異なる複数の実体関連モデル設計ができ,「どれが正解だ」とは決めることができないこと.
リレーショナルデータベース
- データ共有における問題 (Problems in data sharing)
- データはコード化されている.
(Data is encoded in data files.) - 他のユーザが、コード化されたデータファイルの中身を理解できるか?
(Other users can understand the data files ? )
- データはコード化されている.
- リレーショナルデータベース (Relational Database)
リレーショナルデータベースでは、次に挙げる事項が標準化されている (Relational Database is a standard of the followings)
- データフォーマット.つまり、データのコード化
(data format. i.e. the way to encode data) - 演算の体型
(data operations) - データ型の記述法
(the way to describe data types) - 一貫性制約の記述法
(the way to describe constraints)
- データフォーマット.つまり、データのコード化
テーブルの記述
リレーショナルデータベースは、テーブルの集まり. (a relational database is a set of tables)
テーブルのそれぞれの列は属性である。
あるテーブルが、属性名1,属性名2,・・・をこの順で持つことを、「テーブル名(属性名1,属性名2,…)」のように記述する
- product(id, product_name, type, cost, created_at)
- score(name, score, student_name, created_at, updated_at)
データ型の記述法 (the way to describe data types), 制約の記述法 (the way to describe constraints)
データ型と制約の例
- データ型: integer, real, text, datetime など
- 制約: primary key, not nulll, unique など
データベースブラウザ
データベースブラウザは,データベース内のテーブルを確認,編集したり,SQLの編集,実行が簡単にできるソフトウェア.
リレーショナルデータベースと応用
データの例
地図(ベクトル形式の地図、DEM)
Point Cloud, ポリゴン
トレンド(trend)と外れ値(outlier)
まとめ
- リレーショナルデータベース (Relational Database)
- データ型の記述、制約の記述 (Describing data types and constraints)
- データベースブラウザ (Database browser)
- リレーショナルデータベースで、種々のデータを扱うことができる (Relational Database can handle various type of data)