第三范式

创建 PostgreSQL 数据库

Darryl Reeves

Industry Assistant Professor, New York University

第三范式的定义

要求

  • 满足 2NF
  • 不存在"传递依赖"
    • 即所有非键列只依赖 PRIMARY KEY
创建 PostgreSQL 数据库

传递依赖

  • 涉及表中的 3 列
  • 列 X、Y、Z
  • 列 X -> 列 Y
  • 列 Y -> 列 Z
  • 列 X -> 列 Z
创建 PostgreSQL 数据库

示例:课程与教室分配

id name teacher num
157 Algebra Maggie Winters 244
162 Physics Maggie Winters 244
321 Spanish I Jeremy Smith 309
497 History I Sarah Williams 313
613 Spanish II Jeremy Smith 309
  • 课程名 -> 教师
  • 教师 -> 教室号
  • 课程名 -> 教室号
创建 PostgreSQL 数据库

示例:课程与教室分配

id name teacher num
157 Algebra Maggie Winters 244
162 Physics Maggie Winters 244
321 Spanish I Jeremy Smith 309
497 History I Sarah Williams 313
613 Spanish II Jeremy Smith 309
  • 课程名 -> 教师
  • 教师 -> 教室号
  • 课程名 -> 教室号
           (传递依赖)
创建 PostgreSQL 数据库

示例:课程与教室分配

id name teacher num
157 Algebra Maggie Winters 244
162 Physics Maggie Winters 244
321 Spanish I Jeremy Smith 309
497 History I Sarah Williams 313
613 Spanish II Jeremy Smith 309
  1. 更新教室号
创建 PostgreSQL 数据库

示例:课程与教室分配

id name teacher num
157 Algebra Maggie Winters 244
162 Physics Maggie Winters 244
321 Spanish I Jeremy Smith 309
497 History I Sarah Williams 313
613 Spanish II Jeremy Smith 309
  1. 更新教室号
  2. 新增教师
创建 PostgreSQL 数据库

示例:课程与教室分配

id name teacher num
157 Algebra Maggie Winters 244
162 Physics Maggie Winters 244
321 Spanish I Jeremy Smith 309
497 History I Sarah Williams 313
613 Spanish II Jeremy Smith 309
  1. 更新教室号
  2. 新增教师
  3. 删除某教师的全部课程
创建 PostgreSQL 数据库

示例:课程与教室分配

如何调整数据结构以避免这些潜在问题?

创建 PostgreSQL 数据库

示例:课程与教室分配

teacher

id name room_num
1 Maggie Winters 244
2 Jeremy Smith 309
3 Sarah Williams 313
创建 PostgreSQL 数据库

示例:课程与教室分配

teacher

id name room_num
1 Maggie Winters 244
2 Jeremy Smith 309
3 Sarah Williams 313

course_assignment

id name teacher_id
157 Algebra 1
162 Physics 1
321 Spanish I 2
497 History I 3
613 Spanish II 2
创建 PostgreSQL 数据库

Vamos praticar!

创建 PostgreSQL 数据库

Preparing Video For Download...