数据规范化的重要性

创建 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 => 申请人
  • approvedtrue => 借款人
  • approvedfalse => 申请被拒
创建 PostgreSQL 数据库

为何进行数据规范化?

  • 减少数据重复
  • 提高数据一致性
  • 改善数据组织
创建 PostgreSQL 数据库

Vamos praticar!

创建 PostgreSQL 数据库

Preparing Video For Download...