資料正規化的重要性

建立 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
);
  • approvedNULL => applicant
  • approvedtrue => borrower
  • approvedfalse => 申請遭拒
建立 PostgreSQL 資料庫

為什麼要正規化資料?

  • 降低資料重複
  • 提高資料一致性
  • 改善資料組織
建立 PostgreSQL 資料庫

一起來練習吧!

建立 PostgreSQL 資料庫

Preparing Video For Download...