データベース方式

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

データベース管理システム(DBMS: Database Management System)とは、データベースの維持・管理を行うソフトウェアのことである。複数のユーザが同時にデータを更新・検索しても、一貫して効率よく処理できるように管理する。

関係モデル(リレーショナルモデル)に基づいたデータベース管理システムをリレーショナルデータベース管理システム(RDBMS: Relational Database Management System)という。

代表的なデータベース管理システム(DBMS)の一覧
DBMS 説明
Apache Cassandra 分散Key-Value Store型のデータベース管理システム
Apache Derby Apacheソフトウェア財団が開発しているJavaで実装されたRDBMS
H2 Database オープンソースのRDBMS
Microsoft SQL Server マイクロソフトが開発・販売しているRDBMS
MySQL オラクルが開発しているオープンソースのRDBMS
Oracle Database オラクルが開発・販売しているRDBMS
SAP HANA SAPが開発・販売するインメモリーデータベース
PostgreSQL オープンソースのオブジェクト関係データベース管理システム(ORDBMS)

データベース設計

データの正規化

第1正規化

第1正規化では、導出性属性を削除する。

他の属性から導き出せることを導出性という。たとえば、「単価」、「数量」、「金額」という3つの属性を持つ以下のようなテーブルがあったとする。

売上テーブル
顧客ID 顧客名 商品ID 商品名 種別ID 種別名 単価 数量 金額
1 矢島商店 1 ボールペン 1 事務用品 100 5 500
2 鈴木商会 2 OA用紙 1 事務用品 200 10 2000
1 矢島商店 3 トイレットペーパー 2 日用品 200 5 1000
2 鈴木商会 3 トイレットペーパー 2 日用品 200 10 2000

金額は「単価×数量」の式から導き出せるので、導出性属性であり、削除する。

売上テーブル
顧客ID 顧客名 商品ID 商品名 種別ID 種別名 単価 数量
1 矢島商店 1 ボールペン 1 事務用品 100 5
2 鈴木商会 2 OA用紙 1 事務用品 200 10
1 矢島商店 3 トイレットペーパー 2 日用品 200 5
2 鈴木商会 3 トイレットペーパー 2 日用品 200 10
第2正規化

第2正規化では、部分従属する属性を他のテーブルに分離する。

一方の値が決まると、他の項目も一意に決まる関係を関数従属性という。関数従属性のうち、すべての主キーの組み合わせから値が決まる関係を完全従属といい、主キーの一部で値が決まる関係を部分従属という。

第1正規形の売上テーブルでは、顧客IDと商品IDの2つが主キーである。つまり顧客IDと商品IDの2つでレコードを特定することができる。

売上テーブル
顧客ID 顧客名 商品ID 商品名 種別ID 種別名 単価 数量
1 矢島商店 1 ボールペン 1 事務用品 100 5
2 鈴木商会 2 OA用紙 1 事務用品 200 10
1 矢島商店 3 トイレットペーパー 2 日用品 200 5
2 鈴木商会 3 トイレットペーパー 2 日用品 200 10

顧客IDにより顧客名は一意に決まる(もうひとつの主キーである商品IDは無関係)ので、部分従属であり、他のテーブルに分離する。

顧客テーブル
顧客ID 顧客名
1 矢島商店
2 鈴木商会

同様に、商品IDにより商品名、種別ID、種別名、単価は一意に決まるので、部分従属であり、他のテーブルに分離する。

商品テーブル
商品ID 商品名 種別ID 種別名 単価
1 ボールペン 1 事務用品 100
2 OA用紙 1 事務用品 200
3 トイレットペーパー 2 日用品 200

顧客テーブルと商品テーブルを分離した後の売上テーブルは次のようになる。

売上テーブル
顧客ID 商品ID 数量
1 1 5
2 2 10
1 3 5
2 3 10
第3正規化

第3正規化では、テーブルの中にある推移従属関係属性を他のテーブルに分離して、すべての属性が主キーに対して完全従属であるテーブルにする。主キー以外の属性に従属する関係を推移従属関係という。

第2正規形の商品テーブルのうち、種別名は主キーである商品IDではなく、種別IDに従属する。

商品テーブル
商品ID 商品名 種別ID 種別名 単価
1 ボールペン 1 事務用品 100
2 OA用紙 1 事務用品 200
3 トイレットペーパー 2 日用品 200

種別名は推移従属関係であるため、別のテーブルに分離する。

種別テーブル
種別ID 種別名
1 事務用品
2 日用品

種別テーブルを分離した商品テーブルはつぎのようになる。

商品テーブル
商品ID 商品名 種別ID 単価
1 ボールペン 1 100
2 OA用紙 1 200
3 トイレットペーパー 2 200

したがって、第3正規形のデータは次のとおりとなる。

売上テーブル
顧客ID 商品ID 数量
1 1 5
2 2 10
1 3 5
2 3 10
顧客テーブル
顧客ID 顧客名
1 矢島商店
2 鈴木商会
商品テーブル
商品ID 商品名 種別ID 単価
1 ボールペン 1 100
2 OA用紙 1 200
3 トイレットペーパー 2 200
種別テーブル
種別ID 種別名
1 事務用品
2 日用品

トランザクション処理

ロールバックとは、トランザクション開始直前の状態にまでデータを復旧させることである。データの復旧には更新前ジャーナルを用いる。

ロールフォワードとは、ディスク装置の障害などで破壊されたデータベースを障害発生の直前に復元することである。復元には更新後ジャーナルを用いる。

並行性制御 (Concurrency Control)

並行性制御は悲観的ロックと楽観的ロックの2つに大別される。

悲観的ロック (Pessimistic Locking)は、トランザクション処理の最初でロックを獲得し、トランザクションがコミットあるいはロールバックされるまでロックを保持する。他のトランザクションからこのデータへのアクセスは、ロックが解放されるまで待たされる。

楽観的ロック (Optimistic Locking)は、データベース読み取り処理の直前にロックを獲得し、操作終了後、直ちにロックを解放する。データの更新時には、データベース更新処理の直前にロックを獲得し、トランザクション終了まで保持される。

分離レベル/隔離レベル (Isolation Level)

トランザクションの分離レベル(隔離レベル)は次の4つに分けられる。

分離レベル
分離レベル Dirty Read Non Repeatable Read Phantom Read
READ UNCOMMITTED 発生する 発生する 発生する
READ COMMITTED 発生しない 発生する 発生する
REPEATABLE READ 発生しない 発生しない 発生する
SERIALIZABLE 発生しない 発生しない 発生しない

大抵のデータベースでは、デフォルトの分離レベルはREAD COMMITTEDである。

Dirty Readでは、あるトランザクションが更新したコミットされていないレコードを他のトランザクションが読める。つまり、トランザクションが分離されていない。

Non Repeatable Readでは、あるトランザクションが同じレコードを何度も読み込む場合、そのレコードを他のトランザクションが更新を行ってコミットすると、読み取りタイミングによってレコードの値が異なる。

Phantom Readでは、あるトランザクションがデータを何度も読み込む場合、他のトランザクションがデータを挿入すると、読み取りタイミングによって結果が異なる。

データベース応用

クレンジングとは、同じ意味を持つ言葉をまとめたり、不要なデータを削除して統合することである。

スライスとは、ある視点から情報を切り取って見ることである(薄切りの意から)。

ダイスとは、データをさまざまな視点から集計および分析することである(サイコロ切りの意から)。

スライス&ダイスとは、ある時点のデータを切り出し、いろいろと視点を変えながら分析を行うことである。

ETL

ETL (Extract, transform, load)とは、データソースのシステムからデータを抽出及び変換して、データウェアハウスにロードする処理のことである。変換はETLツールで行う。

ELT

ビッグデータの場合、データを変換してからロードするETLが適切でないことがある。この場合、データを抽出及びロードしてから変換するELT (Extract, load, transform)が採用される。変換はデータベースで行う。

スポンサーリンク