大数据管理与分析(基础篇一)
一、摘要:
这个系列的文章将循序渐进,介绍数据管理和数据分析的基础知识。具体包括:1.数据库管理基础:设计、存储、更新、查询数据库;2.SQL查询语言:用SQL语言编写数据库查询;3.数据分析技术:数据分析的基本方法eg:统计分析;4.数据安全与隐私:如何确保数据安全性,遵守相关法律。
1.数据
数据是我们日常生活中遇到的各种信息,可以是数字、字符、符号等eg:1,2,3,A,B,C,@,!,#这些信息可以被储存为数字格式,用于计算和分析
2.大数据
“大数据”是指数量庞大到传统工具无法处理的数据。大数据通常具有以下特征:数据量巨大;增长迅速。
分类:
1.结构化数据:数据按预定格式存储,通常存储在关系型数据库中。eg:数据库中的表格数据。
2.非结构化数据:没有明确格式的数据。eg:文本、图片、视频。
3.半结构化数据:介于结构化数据和非结构化数据之间,数据有一定的标记或标签,可以进行部分分析。eg:JSON或XML格式的数据。
3.数据库与数据库管理系统(DBMS)
DBMS是一种软件工具,用于存储、管理、查询、更新数据库中的数据。它提供了以下功能:
数据存储:将数据保存在计算机系统中,方便访问和更新。
数据管理:保证数据的一致性、完整性和安全性。
查询处理:用户通过SQL等语言进行查询,DBMS负责解析、执行和返回查询结果。
4.数据库管理系统 vs. 文件系统
在传统的文件系统中,我们将数据存储在文件中,可能使用文本文件、Excel文件等格式。但是随着数据量增大,文件系统会面临很多问题。eg:
效率低下:每次需要处理数据时都要写新的程序,效率低。
数据冗余:多个文件中可能存储相同的数据,造成浪费。
数据一致性:没有统一管理,多个文件中的数据可能不一致。
并发访问:多个用户同时访问文件时,容易造成冲突。
数据库管理系统(DBMS)可以解决这些问题:
高效访问:DBMS提供优化的数据存储和检索方法,支持高效查询。
数据一致性:DBMS通过约束和规则确保数据的一致性。
并发访问:DBMS支持多个用户同时访问数据,并管理并发操作。
事务管理:在系统崩溃或断电后,DBMS能恢复到崩溃前的状态,确保数据的完整性。
5.为什么使用数据库管理系统(DBMS)?
使用DBMS的原因包括:
设计:设计数据结构,决定数据存储方式。
更新:增加、修改、删除数据库中的数据。
查询:通过SQL查询语言,快速获取所需数据。
管理:控制谁可以访问数据,确保数据的安全。
6.数据模型
数据模型用于描述数据及其结构。
关系模型:数据以表格(关系)的形式存储。最常用的数据库模型。
键值模型:存储键值对,常用于NoSQL数据库。
图模型:数据以图的形式存储,常用于处理社交网络数据。
文档模型:数据存储为文档形式,常见的格式如JSON、XML。
7.SQL(Structured Query Language 结构化查询语言)
SQL是与关系型数据库互动的标准语言。它用于对数据库中的数据进行查询、插入、更新、删除等操作。
二、关系型数据库
关系模型是数据库的核心思想之一,广泛应用于关系型数据库的设计和管理。
1.关系数据库的结构
关系数据库由若干个关系组成,每个关系实际上是一个数据表。一个关系由两部分构成:
<1>模式:定义了关系的名字,包括一系列属性,和每个属性/域的类型。
eg:account(account_number:string,branch_name:string,balance:real)。这里定义了账户信息的表,包含账户号、分行名、余额等属性。
<2>实例:就是关系(表)中的实际数据,表现为元组/行,属性/列。
关系的属性类型:
每个属性有一个名字,属性的域是该属性可能的值的集合。
属性的值不可再分。
空值表示数据缺失或未知。空值在许多数据库操作中需要特别处理。
2. 关系实例
关系实例是一个包含若干个元组(行)的表格。每个元组代表一条数据记录。关系中的元组是无序的,即表格中的行没有固定顺序。
3.数据库中的关系
一个数据库包含多个关系(数据表),每个关系存储不同类型的信息。
关系通过外键等机制连接,形成完整的数据库系统。
4.键
键是用来唯一标识元组的。关系中的每个元组都必须有一个或多个键来保证数据的唯一性。
超键:超键是能唯一标识表中每一条记录的属性集合,可以由一个或多个属性组成。一个超键可以
包含冗余属性,只要它能唯一地标识记录。
候选键:候选键是一个最小的超键,也就是说,候选键是能够唯一标识记录的属性集合,并且没有
冗余属性。
主键:主键是候选键中的一个选定的键,它用于实际的数据库设计中作为记录的唯一标识符。
eg:
学生表(Student)
| student_id | name | phone_number | department | |
|---|---|---|---|---|
| 1 | Alice | alice@domain.com | 1234567890 | CS |
| 2 | Bob | bob@domain.com | 9876543210 | EE |
| 3 | Charlie | charlie@domain.com | 1122334455 | CS |
在学生表中,以下都是超键:
{student_id}:student_id是唯一的,能够唯一标识每个学生。
{student_id, name}:尽管student_id已能唯一标识学生,但将name加进来也能唯一标识每一条记
录,因此它也是超键。
{email, phone_number}:email和phone_number一起也能唯一标识学生,所以它也是一个超键。
(全部超键:{student_id},{email},{phone_number},{student_id, name},{student_id,
email},{student_id, phone_number},{email, phone_number})
在学生表中,以下是候选键:
{student_id}:这是一个最小的超键,足够唯一标识学生,不包含任何冗余属性。
{email}:如果每个学生的电子邮件都是唯一的,那么email也是候选键。
(全部候选键:{student_id},{email},{phone_number})
主键是候选键中的一个,它可以是student_id、email等,但在实际使用中只会选一个。
5.外键
外键在数据库中用于建立两个表之间的关系,通过在一个表的列中引用另一个表的主键来确保数的
完整性。
eg:
学生表(Student)
| student_id | name | department |
|---|---|---|
| 1 | Alice | CS |
| 2 | Bob | EE |
| 3 | Charlie | CS |
| 4 | David | EE |
课程表(Course)
这个表包含课程的信息,包括课程的ID、课程名称以及授课教师的ID。
| course_id | course_name | instructor_id |
|---|---|---|
| 101 | Data Structures | 1 |
| 102 | Algorithms | 2 |
| 103 | Databases | 1 |
| 104 | Computer Networks | 2 |
学生选课表(Enrollment)
| student_id | course_id |
|---|---|
| 1 | 101 |
| 1 | 103 |
| 2 | 102 |
| 2 | 104 |
| 3 | 101 |
| 4 | 102 |
Enrollment 表中的 student_id 列是一个外键,它引用了 Student 表中的 student_id 列。
Enrollment 表中的 course_id 列也是外键,它引用了 Course 表中的 course_id 列。
外键约束确保我们在 Enrollment 表中插入的数据必须对应于 Student 表和 Course 表中的有效数
据。这就表示学生选修的课程和学生本身必须存在于相应的表中,否则插入将会失败。
外键约束的作用:
数据完整性:外键约束确保Enrollment表中的student_id和course_id引用的值在Student表和
Course表中是有效的,即不会插入无效的数据。
级联更新和删除:
级联删除(CASCADE DELETE):如果在Student表中删除了某个学生(例如,student_id =
1),那么在Enrollment表中,所有与该学生相关的记录也会被删除。
级联更新(CASCADE UPDATE):如果在Student表中更新了某个学生的ID(例如,student_id
= 1更新为student_id = 10),那么在Enrollment表中,所有与该学生相关的记录的student_id也
会被更新。
也可以指定禁止删除或更新(NO ACTION),这意味着如果尝试删除或更新Student表中某个已被
引用的记录,数据库将会阻止操作。
三、关系代数
关系代数是关系数据库管理系统(DBMS)用来处理和查询数据的数学工具。
1. 关系代数的作用
将用户用SQL等语言表达的查询转换成数据库能够理解和执行的操作。数据库管理系统(DBMS)
会基于关系代数对查询进行优化和计算,找出最有效的查询路径。
2. 关系代数的基本操作(6种)
每个操作都会接受一个或两个关系作为输入,返回一个新的关系作为输出。
选择(Select)σ:用于从关系中选择满足特定条件的元组(行)。
投影(Project)π:从关系中选择特定的属性(列)。
并(Union)∪:将两个关系中的元组合并,去掉重复的元素。
差(Set Difference)–:返回存在于第一个关系中但不在第二个关系中的元组。
笛卡尔积(Cartesian Product)×:将两个关系中的每一对元组进行组合。
重命名(Rename)ρ:给关系或关系中的属性重命名。
<1>选择(Selection,σ)从关系中选择满足特定条件的元组(行)。
语法:σ(predicate)(R)
predicate:一个条件,定义了需要选择的元组; R:一个关系(表)。
eg:
学生表(Student):
| student_id | name | department | age |
|---|---|---|---|
| 1 | Alice | CS | 22 |
| 2 | Bob | EE | 23 |
| 3 | Charlie | CS | 21 |
| 4 | David | EE | 24 |
选择所有年龄大于22的学生:σ(age > 22)(Student)
结果是:
| student_id | name | department | age |
|---|---|---|---|
| 2 | Bob | EE | 23 |
| 4 | David | EE | 24 |
AND 操作符:∧
AND 操作符用于组合多个条件,只有当所有条件都满足时,才会返回对应的元组。
OR 操作符:∨
OR 操作符用于连接多个条件,只要至少有一个条件为真,查询就会返回对应的元组。
NOT 操作符:¬
NOT 操作符用于取反条件,它会返回不满足条件的元组。
<2> 投影(Projection,π)从关系中选择特定的属性(列)。
语法:π(A1, A2, ..., An)(R)
A1, A2, ..., An:列出需要选择的属性(列);R:一个关系(表)。
eg:
学生表(Student):
| student_id | name | department | age |
|---|---|---|---|
| 1 | Alice | CS | 22 |
| 2 | Bob | EE | 23 |
| 3 | Charlie | CS | 21 |
| 4 | David | EE | 24 |
选择学生的名字和部门:π(name, department)(Student)
结果是:
| name | department |
|---|---|
| Alice | CS |
| Bob | EE |
| Charlie | CS |
| David | EE |
<3> 并(Union,∪)
返回两个关系中所有元组的并集,去除重复项。要求两个关系必须有相同的属性(列)。
语法: R1 ∪ R2
R1 和 R2:两个具有相同属性的关系。
eg:
学生表(Student):
| student_id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
教师表(Teacher):
| teacher_id | name |
|---|---|
| 101 | David |
| 102 | Eva |
| 103 | Alice |
查询所有人的名字(学生和教师):
π(name)(Student) ∪ π(name)(Teacher)
结果:
| name |
|---|
| Alice |
| Bob |
| Charlie |
| David |
| Eva |
4. 差:
返回一个关系中有而另一个关系中没有的元组。
语法:R1 − R2
R1 和 R2:两个具有相同属性的关系。
eg:
学生表(Student)
| student_id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
| 4 | David |
已毕业学生表(Graduated)
| student_id | name |
|---|---|
| 1 | Alice |
| 3 | Charlie |
找出所有未毕业的学生的名字和 ID:
π(student_id, name)(Student) − π(student_id, name)(Graduated)
结果:
| student_id | name |
|---|
| 2 | Bob |
| 4 | David |
5.笛卡尔积(Cartesian Product,×)
返回两个关系中的每一对元组组合。结果关系的列数是两个关系列数之和,行数是两个关系行数的乘积。
语法:R1 × R2
R1 和 R2:两个关系。
学生表(Student):
| student_id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
课程表(Course):
| course_id | course_name |
|---|---|
| 101 | Data Structures |
| 102 | Algorithms |
返回每个学生和每门课程的所有组合:
Student × Course
结果:
| student_id | name | course_id | course_name |
|---|---|---|---|
| 1 | Alice | 101 | Data Structures |
| 1 | Alice | 102 | Algorithms |
| 2 | Bob | 101 | Data Structures |
| 2 | Bob | 102 | Algorithms |
6.重命名
改变关系或属性的名称
语法:ρ X (E):将表达式 E 的结果重命名为关系名 X
ρ X (A1, A2, ..., An) (E):将表达式 E 重命名为X,各属性(列)重命名为 A1, A2, ..., An。
eg:
成绩表(Grade):
| student_id | course_id | grade |
|---|---|---|
| 1 | 101 | A |
| 2 | 102 | B |
将 Grade 关系重命名为 G。
将 student_id 列重命名为 id,将 grade 列重命名为 student_grade。
ρ G(id, course_id, student_grade) (Grade)
结果:
| id | course_id | student_grade |
|---|---|---|
| 1 | 101 | A |
| 2 | 102 | B |
更多推荐


所有评论(0)