はじめに
普段の業務に「エクセルを使いVLOOKUPで値を抽出して、COUNTIFで数えて、視覚化して…」という作業していませんか!?
その作業、リレーショナルデータベースを使えば一瞬で終わるかもしれません!
今回はデータ分析人材には必須スキルとも言えるリレーショナルデータベース(RDB)の構造を解説したいと思います。
リレーショナルデータベース(RDB)とは
リレーショナルデータベース(RDB)とは複数のテーブルを「関係(リレーション)」という概念でつなげ、データの抽出や結合をらくらく行えるデータベース(DB)の事です。エクセルのテーブルがいくつも重なり合っているというイメージを持っていただければイメージしやすいかもです。一般的にデータベースといえばこのRDBを指し、右下の図の様にホットケーキを重ねた様な描画をされます。
用語集
- Entity(実体): 実体、DBの全体
- Attribute(属性): データの属性、列で表される
- Record(レコード):1行のデータ
-
Table(テーブル):テーブル、AttributeとRecordの集合。原則1テーブル1テーマ。
-例)部署テーブルには部署以外のデータ(課長の電話番号、部長の入社歴等)は入れない
「key」という概念
DBはkeyという概念でテーブルとテーブルの間に関係を生み出します。その名の通り、RDBの鍵「key」という概念について説明します。
2種類の「key」
- Primary Key:テーブルにおいて、1レコード毎に振り分けられるユニークなID
- Foreign Key:外部のテーブルとの関係をつなげる為のキー
例えば、部署テーブルにおいて、部署IDがPrimary Keyであり、社員テーブルにおける部署IDがForegin Keyとされます。
この場合、部署テーブルの部署IDと社員テーブルの部署IDの関係性は「One to Many」と呼ばれ、鳥の足のような記号で表します。(部署テーブルの部署IDはユニークであり重複しませんが、社員テーブルにおいては重複が発生するためです。)
「ちょっとちょっと!これじゃあエクセルのVLOOKUPでできちゃうじゃん!」と思っている方、安心してください。RDBは正規化という手法を取り入れる事でデータ作業効率が格段によくなるのです!
Normalization(正規化)
引き続き社員情報DBを使いましょう。例えば、1人の社員が2つ以上の部署に所属しているとき、みなさんはどの様にデータを組みますか?
良いデータベースの定義を意識して、考えていきましょう。
1つのカラムに複数の部署IDを入れる
これは直感的に「あかんやろ、、」と思う人もいるのではないでしょうか。良いデータベースは1つのセル(マス)に1つのデータしか入れてはいけません。さらに、これをするとふたつのテーブルの関係(リレーション)が壊れてしまいます。
社員テーブルの部署IDカラムを増やす
一見すると、これで良いかと思われがちなのですが、データベースの世界では空欄のセルは良しとされません。また、とても忙しい社員1人が10部署を兼務するとなると、社員テーブのカラムの数がその分伸びてしまいます。
社員テーブルの行を増やす
これは、社員テーブルにおいてのIDが重複してしまうので、Primary Keyの原則に反してしまします。
上記の問題を全て解決してくれるのがAssociative Table(連想テーブル)というものです!
Associative Table(連想テーブル)
Associative Table(連想テーブル)とは、2つのテーブルのPrimary Keyを参照し、重複や欠落が発生している両テーブルの関係を崩す事なく、マッピング(表現)してくれるテーブルです。これはMapping Tableまた、Junction Tableなどとも呼ばれます。このテーブルをテーブルとテーブルの間に置くことで、テーブルの原則、keyの原則、正規化の原則を全て守る事ができます。
おわりに
リレーショナルデータベース(RDB)は様々な原則の本整理されたデータで、データを綺麗に長期間保存する事を可能にします。直には実装編という事で、SQL(Structured Query Language) というRDBを自由自在に操れるプログラミング言語を使い、なぜRDBが作業効率を200倍にしてくれるのかという所を見ていきます。
次回↓
関連記事はこちら