データ正規化の重要性

PostgreSQL データベースの作成

Darryl Reeves

Industry Assistant Professor, New York University

例1: 冗長データ

  • データの重複は問題になり得る
CREATE TABLE loan (
    borrower_id INTEGER REFERENCES borrower(id),
    bank_name VARCHAR(50) DEFAULT NULL,
    ...
);
CREATE TABLE bank ( 
    id SERIAL PRIMARY KEY, 
    name VARCHAR(50) DEFAULT NULL, 
    ... 
);
PostgreSQL データベースの作成

例1: 冗長データ

CREATE TABLE loan (
    borrower_id INTEGER REFERENCES borrower(id),
    bank_name VARCHAR(50) DEFAULT NULL,
    ...
);
CREATE TABLE bank ( 
    id SERIAL PRIMARY KEY, 
    name VARCHAR(50) DEFAULT NULL, 
    ... 
);
  • 課題1: 銀行が違うのに同名
  • 課題2: 銀行名の変更
PostgreSQL データベースの作成

例1: 冗長データ

CREATE TABLE loan (
    borrower_id INTEGER REFERENCES borrower(id),
    bank_id INTEGER REFERENCES bank(id),
    ...
);
  • 同名でも銀行は別IDで管理
  • 銀行名の更新はbankテーブルのみ影響
PostgreSQL データベースの作成

例2: レコードの統合

applicant

id name
1 Jane Simmmons
2 Rick Demps
3 Pam Jones

borrower

id name
1 Jack Smith
2 Sara Williams
3 Jennifer Valdez
PostgreSQL データベースの作成

例2: レコードの統合

applicant

id name
1 Jane Simmmons
2 Rick Demps
3 Pam Jones

borrower

id name
1 Jack Smith
2 Sara Williams
3 Jennifer Valdez
4 Pam Jones
PostgreSQL データベースの作成

例2: レコードの統合

applicant

id name
1 Jane Simmmons
2 Rick Demps
3 Pam Jones

borrower

id name
1 Jack Smith
2 Sara Williams
3 Jennifer Valdez
PostgreSQL データベースの作成

例2: レコードの統合

applicant

id name
1 Jane Simmmons
2 Rick Demps

borrower

id name
1 Jack Smith
2 Sara Williams
3 Jennifer Valdez
4 Pam Jones
PostgreSQL データベースの作成

例2: レコードの統合

CREATE TABLE borrower (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);
PostgreSQL データベースの作成

例2: レコードの統合

CREATE TABLE borrower (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    approved BOOLEAN DEFAULT NULL
);
  • approved が NULL => applicant
  • approved が true => borrower
  • approved が false => 申請却下
PostgreSQL データベースの作成

なぜ正規化するのか

  • データ重複を削減
  • 一貫性を向上
  • 構造を改善
PostgreSQL データベースの作成

練習しましょう!

PostgreSQL データベースの作成

Preparing Video For Download...