实体-关系(ER)模型

Snowflake 中的数据建模入门

Nuno Rocha

Director of Engineering

实体-关系建模简介

  • 实体-关系(ER)模型:用实体、属性和关系组织规范化数据

要建模的学院主题实体

Snowflake 中的数据建模入门

实体-关系模型示例

学院主题实体交互

Snowflake 中的数据建模入门

为何选择 ER 模型

  • 清晰
    • 以贴近现实的方式简化业务关系
  • 组织
    • 将数据分解为相关实体,便于管理
  • 灵活
    • 可随时间演进与扩展
Snowflake 中的数据建模入门

构建 ER 模型

学院主题模型加上选课实体

Snowflake 中的数据建模入门

构建 ER 模型

  • 在现有实体间添加关系:
ALTER TABLE classes
ADD FOREIGN KEY (school_id) REFERENCES schools(school_id);

学院主题模型,连接 classes 与 schools 实体

Snowflake 中的数据建模入门

构建 ER 模型

学院主题模型,新实体 enrollments

Snowflake 中的数据建模入门

构建 ER 模型

CREATE OR REPLACE TABLE enrollments (
      -- Create a new entity with a unique identifier
      enrollment_id NUMBER(10,0) PRIMARY KEY

-- Add the entity's attributes year NUMBER(4,0), semester VARCHAR(255)
-- Add relationships to other entities FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
Snowflake 中的数据建模入门

构建 ER 模型

最终学院 ER 模型

Snowflake 中的数据建模入门

从 ER 模型检索数据

在理学院查询 2023 年学生姓名与所选课程

Snowflake 中的数据建模入门

从 ER 模型检索数据

SELECT students.name  
FROM students;

查询学生姓名的 ER 模型

Snowflake 中的数据建模入门

从 ER 模型检索数据

SELECT students.name
FROM students
    JOIN enrollments 
    ON students.student_id = enrollments.student_id;

查询学生与选课的 ER 模型

Snowflake 中的数据建模入门

从 ER 模型检索数据

SELECT students.name
FROM students
    JOIN enrollments 
    ON students.student_id = enrollments.student_id
WHERE enrollments.year = '2023';

查询 2023 年选课的 ER 模型

Snowflake 中的数据建模入门

从 ER 模型检索数据

SELECT students.name, 
    classes.class_name
FROM students
    JOIN enrollments 
    ON students.student_id = enrollments.student_id
    JOIN classes 
    ON enrollments.class_id = classes.class_id
WHERE enrollments.year = '2023';

查询课程名称的 ER 模型

Snowflake 中的数据建模入门

从 ER 模型检索数据

SELECT students.name, 
    classes.class_name
FROM students
    JOIN enrollments 
    ON students.student_id = enrollments.student_id
    JOIN classes 
    ON enrollments.class_id = classes.class_id
    JOIN schools 
    ON classes.department_id = schools.school_id
WHERE enrollments.year = '2023'
    AND schools.school_name = 'Science';
Snowflake 中的数据建模入门

从 ER 模型检索数据

  • JOIN ON:按关联列合并表行的 SQL 子句。

查询理学院的 ER 模型

Snowflake 中的数据建模入门

术语与功能概览

  • 实体-关系(ER)模型:用实体和关系组织规范化数据。
  • SELECT FROM:从表中获取列的 SQL 命令。
  • JOIN ON:按关联列合并表行的 SQL 子句。
  • WHERE:按条件筛选记录。
  • AND:与 WHERE 搭配用于合并多个条件的逻辑运算符。
-- 按条件从关联实体查询数据
SELECT column_name
FROM table_name
    JOIN other_table ON table_name.FK = other_table.PK
WHERE column_name  condition  value
    AND column_name  condition  value;
Snowflake 中的数据建模入门

让我们来练习!

Snowflake 中的数据建模入门

Preparing Video For Download...