データ構造とテーブル定義
データを集めたら、次は「そのデータがどんな形をしているか」を正しく見極める必要があります。このページでは、構造化データと非構造化データの判断、ER図の読み方とテーブル間のリレーションシップの理解、正規化手法(第一正規化〜第三正規化)という、データベース設計の基本を整理します。
「テーブル」「正規化」という言葉は無機質に聞こえますが、実は「Excel表をどう整理すれば使いやすくなるか」というごく身近な話です。表計算に慣れている方ほど、すんなり理解できる分野です。
1. 構造化データと非構造化データを見分ける
収集したデータを扱う最初の一歩は、そのデータが構造化データ※1なのか非構造化データ※2なのかを判断することです。構造化データとは、行と列が整った表形式で管理できるデータのことで、顧客データ・商品データ・在庫データなど、Excelやデータベースの表にそのまま収まる情報を指します。
一方、非構造化データとは、あらかじめ決まった形式を持たないデータのことです。雑多なテキスト(自由記述のアンケート回答など)、音声、画像、動画がこれにあたります。表の1マスに収まらない、あるいは表として整理すること自体が難しいデータだとイメージすると理解しやすいでしょう。両者の中間として、JSONやXMLのようにある程度の規則性は持つものの、行・列に固定できない半構造化データ※3という区分もあります。
| 分類 | 特徴 | 具体例 |
|---|---|---|
| 構造化データ | 行・列の表形式で管理できる | 顧客データ、商品データ、在庫データ、売上台帳 |
| 半構造化データ | ある程度の規則はあるが表形式に固定できない | JSON、XML、ログファイル |
| 非構造化データ | 決まった形式を持たない | 自由記述テキスト、音声、画像、動画 |
- 会員名簿の「氏名・年齢・購入回数」の一覧 → 構造化データ(表にきれいに収まる)
- アンケートの「ご自由にご意見をお書きください」欄の回答文 → 非構造化データ(定型化されていない自然文)
- ECサイトの商品レビューに添付された写真 → 非構造化データ(画像)
- コールセンターの通話録音データ → 非構造化データ(音声)
判断に迷ったら、「Excelの1つのセルに、そのまま意味のある値として収まるか」を基準にしてみましょう。収まるなら構造化データ、収まらない・無理に収めると情報が失われるなら非構造化データです。
この「構造化か非構造化か」の判断は、DS検定でも頻出のテーマだよ。第7章で学んだ画像・音声・自然言語処理の話も、ぜんぶ「非構造化データ」の扱いの話だったんだよね。
2. ER図を読んでテーブル間のリレーションシップを理解する
構造化データは通常、1つの表(テーブル)だけで完結せず、複数のテーブルが互いに関連しあって1つのデータベースを構成します。たとえば「顧客テーブル」と「注文テーブル」は別々の表ですが、「どの顧客が、どの注文をしたか」という関係でつながっています。このテーブル同士のつながり方(関係性)を図で表したものがER図※4(Entity-Relationship Diagram、実体関連図)です。
ER図では、テーブル(エンティティ)を四角形で、テーブル間の関係性(リレーションシップ)を線で表します。代表的な関係性には、1対多※6(1人の顧客が複数の注文を持てる、など)や多対多※7(1つの注文に複数の商品が含まれ、1つの商品が複数の注文に登場する、など)があります。ER図を正しく読めるようになると、「このデータはどのテーブルとどのテーブルを組み合わせれば取得できるか」がイメージできるようになります。
- 「顧客テーブル」と「注文テーブル」は1対多 ― 1人の顧客が何度も注文できるため
- 「注文テーブル」と「商品テーブル」は多対多 ― 1回の注文で複数の商品を買え、1つの商品は複数の注文に登場するため
- 多対多の関係は、そのままでは表現しにくいため、間に「注文明細テーブル」という中間テーブルを置いて1対多×2つに分解する
多対多の関係は、実務上そのまま1つの表にはできません。間に「中間テーブル」を挟んで1対多の関係を2つ作るのがデータベース設計の定石です。ER図でこの中間テーブルを見つけられるようになりましょう。
ER図は「家系図」みたいなものだと思うとわかりやすいよ。誰と誰がどうつながっているかを線で追いかけていく感覚で読んでみて!
3. テーブルを正規化する ― 第一正規化から第三正規化まで
テーブルを設計するとき、データの重複や更新時の矛盾を防ぐために行う整理の手順を正規化※5と呼びます。正規化には段階があり、DS検定では第一正規化・第二正規化・第三正規化の考え方を理解しておく必要があります。
第一正規化は、1つのセルに複数の値を詰め込まないようにする整理です。たとえば「購入商品」の列に「りんご、みかん、バナナ」とまとめて書いてしまうと、集計や検索がとても面倒になります。これを1商品1行になるよう分割するのが第一正規化です。
第二正規化は、複数の項目を組み合わせて主キーにしているテーブルで、主キー(その行を一意に特定する項目)の一部だけに依存する項目を、別テーブルに切り出す整理です。たとえば「注文明細テーブル」の主キーが「注文ID+商品ID」の組み合わせだとして、そこに「商品名」を持たせていると、商品名は主キーのうち「商品ID」だけで決まってしまいます。この状態で同じ商品が何度も登場するたびに商品名を書く必要があり、商品名を変更したいときにすべての行を直す羽目になります。商品に関する情報は「商品テーブル」に切り出し、注文明細には「商品ID」だけを持たせるようにします。
第三正規化は、主キーに直接関係のない項目同士の依存関係(間接的な依存)を取り除く整理です。たとえば「顧客テーブル」に「郵便番号」と「都道府県」を両方持たせていると、郵便番号が決まれば都道府県も決まるという間接的な依存が生まれます。この場合、都道府県の情報は別テーブルに切り出すか、参照する形にして重複を避けます。
| 段階 | 整理する内容 | 目的 |
|---|---|---|
| 第一正規化 | 1セル1値にする(繰り返し項目を分割する) | 集計・検索をしやすくする |
| 第二正規化 | 主キーの一部にしか依存しない項目を別テーブルへ | 更新時の不整合(同じ情報の書き換え漏れ)を防ぐ |
| 第三正規化 | 主キーに直接関係ない項目間の依存を除く | データの重複と矛盾をさらに減らす |
- 正規化前:「注文テーブル」に顧客名・住所・商品名・単価をすべて1行にまとめて記録している
- 正規化後:「顧客テーブル」「商品テーブル」「注文テーブル」「注文明細テーブル」に分割し、それぞれIDで参照する
- 効果:顧客の住所が変わっても顧客テーブルの1行を直すだけで済み、過去の注文データに矛盾が生じない
正規化の目的は「表を細かく分けること」自体ではなく、同じ情報を複数箇所に重複して持たないようにし、更新時の矛盾を防ぐことにあります。分割すること自体を目的化しないよう注意しましょう。
正規化は「1セル1値→部分的な依存を分離→間接的な依存も分離」の3段階、って覚えておくと試験でも整理しやすいよ!
まとめ
このレッスンでは、データを整理するための基本的な考え方を見てきました。最後に振り返っておきましょう。
- 構造化/非構造化データの判断 ― 表形式に収まるかどうかで、構造化・半構造化・非構造化データを判断できる
- ER図の読み方 ― ER図を読んでテーブル間のリレーションシップ(1対多・多対多など)を理解できる
- 正規化 ― 第一正規化〜第三正規化を用いて、データの重複や更新時の矛盾を防ぐテーブル設計ができる
次のレッスンでは、こうして整理したデータをどこに、どのように蓄積するか、DWHやクラウドストレージ、分散処理技術といった「データ蓄積とクラウド」を扱います。
- 構造化データ … 行と列が整った表形式で管理できるデータのこと。顧客データや商品データなどが該当する。↩
- 非構造化データ … あらかじめ決まった形式を持たないデータのこと。自由記述テキスト、音声、画像、動画などが該当する。↩
- 半構造化データ … ある程度の規則性は持つが、行・列の表形式には固定できないデータのこと。JSONやXMLなどが該当する。↩
- ER図(Entity-Relationship Diagram) … テーブル(実体)同士の関係性を図で表したもの。データベース設計でテーブル間のつながりを把握するために使う。↩
- 正規化 … データの重複や更新時の矛盾を防ぐために、テーブルの構造を段階的に整理する手法のこと。第一正規化〜第三正規化などの段階がある。↩
- 1対多 … 一方のテーブルの1件に対し、もう一方のテーブルの複数件が対応する関係のこと。「1人の顧客が複数回注文する」などが例。↩
- 多対多 … 両方のテーブルにおいて、互いに複数件が対応し合う関係のこと。実際のテーブル設計では中間テーブルを挟んで1対多×2つに分解する。↩