
1.データベースとは
- 構造化されたデータの集まり
- 必要に応じてデータを取得、更新、削除できる
- 例)スーパーの購入履歴に関するデータベース
購入ID | 購入日 | 購入者名 | 購入者連絡先 | 購入品目 | カテゴリ | 単価 | 数量 | 合計金額 | 支払い方法 |
---|---|---|---|---|---|---|---|---|---|
1 | 2025-06-01 | 山田太郎 | yamada@data.com | ボールペン | 文房具 | 150 | 2 | 300 | クレジットカード |
2 | 2025-06-01 | 山田太郎 | yamada@data.com | 洗剤 | 掃除用品 | 300 | 1 | 300 | クレジットカード |
3 | 2025-06-02 | 佐藤花子 | sato@data.com | 牛肉 | 食品 | 1000 | 1 | 1000 | 現金 |
4 | 2025-06-03 | 山田太郎 | yamada@data.com | カップ麺 | 食品 | 200 | 3 | 600 | クレジットカード |
5 | 2025-06-04 | 鈴木一郎 | suzuki@data.com | 傘 | 生活用品 | 700 | 1 | 700 | PayPay |
6 | 2025-06-04 | 鈴木一郎 | suzuki@data.com | スケッチブック | 文房具 | 800 | 1 | 800 | PayPay |
1-1.データベースに関する基礎用語
- テーブル(Table):表のこと。購入履歴テーブル。
- カラム(Column):列のこと。購入日、購入品目がカラムに該当する。フィールド、属性ともいう。
- レコード(Record):行のこと。カラムの情報を揃えたデータの一群。タプルともいう。
1-2.データを単一のテーブルで管理することの問題点
- 冗長性の増加:同じデータを何度も保存する必要がある
- ディスク容量の無駄遣い、入力の手間
- 整合性の低下:変更があったときに関連する箇所を全て変更する必要がある
- データ操作ミスの誘発、入力の手間
- 検索・分析が困難:情報を抽出する際に不要なデータを一緒に取得してしまう
- 処理の膨大化、クエリの複雑化
2.リレーショナルデータベース(RDB)とは
- 複数のテーブルが互いに関連し合うデータベース
- データは意味のある単位でテーブルに分割される
2-1.RDBを採用することのメリット
- 冗長性の排除:同じ情報を複数の場所に重複して持たない
- 整合性の維持:データの変更があったときに、関連するデータの一貫性を保ちやすい
- 柔軟なデータ検索:関連するテーブルを結合することで複雑な条件でのデータ抽出が容易になる
2-2.キー
- データベースのテーブル内で特定の役割を持つカラム
代表的なキーの種類
■ 主キー:レコードを識別するキー
- 主キーが満たす必要のある条件
- 一意制約:重複する値を格納できない
- 非NULL制約:NULL(値がない状態)を格納できない
- スーパーの購入履歴の例だと購入IDが主キーとなり得る
■ 複合キー:複数のカラムの組み合わせによってレコードを識別するキー
- 例)学生の受講履歴テーブル
- 学生IDと講座IDでレコードを識別できる
学生ID | 講座ID | 受講日 | 成績 |
---|---|---|---|
S001 | C101 | 2025-04-01 | A |
S001 | C102 | 2025-04-10 | B |
S002 | C101 | 2025-04-05 | C |
S003 | C101 | 2025-05-01 | B |
■外部キー:テーブル間の関連を定義するキー
- 例)学生テーブル
- 受講履歴テーブルの学生IDは学生テーブルのIDを参照しており外部キーとなる
- 基本的には外部キーは参照先のテーブルの主キーと一致させる
学生ID | 学生名 | 生年月日 | 連絡先 |
---|---|---|---|
S001 | 山田 太郎 | 2005-01-15 | yamada@data.com |
S002 | 田中 花子 | 2004-07-22 | tanaka@data.com |
S003 | 佐藤 健太 | 2006-03-08 | sato@data.com |
2-2.正規化
- データベースのテーブルをより良い構造にするために分割すること
- データベースにおける冗長性の排除、整合性の保持、更新異常の防止を目的とした手段
- 正規化には段階があり、一般的には第3正規形(3NF)まで正規化されていれば良いとされている
2-2-1.第1正規形(1NF)
1NFの条件
- テーブル内の各セルが単一の値を持つ(リスト形式などになっていない)
- レコードを一意に識別できるカラム(主キー)が存在している
1NF化の例
- 1NFを満たしていないテーブル
- 注文商品が複数入っているセルがある
- 主キーとなり得るカラムがない
顧客ID | 顧客名 | 注文日 | 注文商品 | 数量 | 単価 |
---|---|---|---|---|---|
C_001 | 山田太郎 | 2025-05-20 | りんご, みかん | 2, 1 | 150, 100 |
C_002 | 佐藤花子 | 2025-05-21 | バナナ | 3 | 80 |
C_001 | 山田太郎 | 2025-05-22 | ぶどう, いちご | 1, 2 | 500, 300 |
- 1NFを満たしたテーブル
- 複数の値を持つセルがなくなった
- 注文IDと注文商品で複合キー(複合主キー)となる
注文ID | 顧客ID | 顧客名 | 注文日 | 注文商品 | 数量 | 単価 |
---|---|---|---|---|---|---|
O_001 | C_001 | 山田太郎 | 2025-05-20 | りんご | 2 | 150 |
O_001 | C_001 | 山田太郎 | 2025-05-20 | みかん | 1 | 100 |
O_002 | C_002 | 佐藤花子 | 2025-05-21 | バナナ | 3 | 80 |
O_003 | C_001 | 山田太郎 | 2025-05-22 | ぶどう | 1 | 500 |
O_003 | C_001 | 山田太郎 | 2025-05-22 | いちご | 2 | 300 |
2-2-2.第2正規形(2NF)
2NFの条件
- 1NFの条件を満たす
- 部分関数従属の排除
関数従属について
- 関数従属:あるカラムAの値が決まれば別のカラムBの値が決まる状態のこと
- たとえば、学生テーブルにおいて、学生名がわかれば生年月日がわかる
- 部分関数従属:複合主キーにおいて、キーでないカラムが主キーの一部にのみ関数従属している状態のこと
- たとえば、1NFテーブル(注文IDと注文商品が複合キー)において、
- 注文IDがわかれば顧客名がわかる
- 注文IDがわかれば注文日がわかる
- 注文商品がわかれば単価がわかる
- たとえば、1NFテーブル(注文IDと注文商品が複合キー)において、
2NF化の例(1NFテーブルの変換)
- 注文テーブル(主キーは注文ID)
注文ID | 顧客ID | 顧客名 | 注文日 |
---|---|---|---|
O_001 | C_001 | 山田太郎 | 2025-05-20 |
O_002 | C_002 | 佐藤花子 | 2025-05-21 |
O_003 | C_001 | 山田太郎 | 2025-05-22 |
- 商品テーブル(主キーは注文商品)
注文商品 | 単価 |
---|---|
りんご | 150 |
みかん | 100 |
バナナ | 80 |
ぶどう | 500 |
いちご | 300 |
- 注文詳細テーブル(主キーは注文IDと注文商品の複合キー)
注文ID | 注文商品 | 数量 |
---|---|---|
O_001 | りんご | 2 |
O_001 | みかん | 1 |
O_002 | バナナ | 3 |
O_003 | ぶどう | 1 |
O_003 | いちご | 2 |
2-2-3.第3正規形(3NF)
3NFの条件
- 2NFを満たす
- 推移的関数従属の排除
推移的関数従属とは
- あるテーブルにおいて、カラムA, B, Cが存在し、Aの値が決まればBの値が決まる、かつBの値が決まればCの値が決まる状態のこと
- AとBの間、BとCの間の両方に関数従属が成り立つときAとCの間に推移的関数従属が成り立つ
3NF化の例
- 注文テーブルにおいて、
- 注文IDが決まれば顧客IDが決まる
- 顧客IDが決まれば顧客名が決まる
- 修正後の注文テーブル
注文ID | 顧客ID | 注文日 |
---|---|---|
O_001 | C_001 | 2025-05-20 |
O_002 | C_002 | 2025-05-21 |
O_003 | C_001 | 2025-05-22 |
- 顧客テーブル
顧客ID | 顧客名 |
---|---|
C_001 | 山田太郎 |
C_002 | 佐藤花子 |
3.まとめ
- 複数のテーブルが関係しあっているデータベースをリレーショナルデータベース(RDB)という
- RDBにおいて、特別な役割を果たすカラムのことをキーという
- RDBをうまく使いこなすためにはテーブルを正しく分割する正規化が重要
4.参考
Qiita


分かりやすく正規化について理解しよう (データベース) - Qiita
データベースの正規化についてわかりやすく理解しよう データベースの正規化とは?? データベースの正規化とは、データの整合性を確保するために必要な手法です。データの...
あわせて読みたい