# 关系数据库
> 原文:[Relational Databases](https://www.bookbookmark.ds100.org/ch/09/sql_rdbms.html)
>
> 校验:[Kitty Du](https://github.com/miaoxiaozui2017)
>
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
```python
# HIDDEN
# Clear previously defined variables
%reset -f
# Set directory for data loading to work properly
import os
os.chdir(os.path.expanduser('~/notebooks/09'))
```
**数据库**是有组织的数据集合。过去,数据存储在专门为特定任务设计的数据结构中。例如,航空公司记录航班预定的格式可能不同于银行管理账户分类账的格式。1969 年,Ted Codd 将关系模型作为一种存储数据的通用方法引入。数据存储在被称为**关系(relations)** 的二维表中,由每行中的单个观察值(通常称为**元组(tuples)** )组成。每个元组都是一个结构化数据项,表示某些**属性(attributes)**(列) 之间的关系。关系的每个属性都有一个名称和数据类型。
考虑下面的`purchases`关系:
<header style="text-align:center">**purchases**</header>
| **name** | **product** | **retailer** | **data purchased** |
| --: | --: | --: | --:|
| Samantha | iPod | Best Buy | June 3,2016 |
| Timothy | Chromebook | Amazon | July 8,2016 |
| Jason | Surface Pro | Target | October 2,2016 |
在`purchases`中,每个元组表示`name`、`product`、`retailer`和`date purchased`属性之间的关系。
关系的 *模式(schema)* 包含其列名、数据类型和约束。例如,`purchases`表的模式说明列是`name`、`product`、`retailer`和`date purchased`;它还说明每个列都包含文本。
以下`prices`关系显示了一些零售商店中某些小物件的价格:
<header style="text-align:center">**prices**</header>
| **retailer** | **product** | **price** |
| --: | --: | --: |
| Best Buy | Galaxy S9 | 719.00 |
| Best Buy | iPod | 200.00 |
| Amazon | iPad | 450.00 |
| Amazon | Battery pack | 24.87 |
| Amazon | Chromebook | 249.99 |
| Target | iPod | 215.00 |
| Target | Surface Pro | 799.00 |
| Target | Google Pixel 2 | 659.00 |
| Walmart | Chromebook | 238.79 |
然后,我们可以同时参考这两个表来确定 Samantha、Timothy 和 Jason 为各自的小物件支付了多少钱(假设每家店的价格随时间保持不变)。这两个表一起构成了一个**关系数据库(relational database)** ,它是一个或多个关系的集合。整个数据库的模式是数据库中各个关系的模式集。
## 关系数据库管理系统[](#Relational-Database-Management-Systems)
关系数据库可以简单地描述为一组包含单个数据项行的表。关系数据库管理系统(RDBMSs)提供了到关系数据库的接口。[Oracle](https://www.wikiwand.com/en/Oracle_Database)、[MySQL](https://www.wikiwand.com/en/MySQL)和[PostgreSQL](https://www.wikiwand.com/en/PostgreSQL)是目前实践中最常用的三种 RDBMS。
关系数据库管理系统使用户能够添加、编辑和删除数据库中的数据。与使用文本文件集合存储数据相比,这些系统提供了几个关键好处,包括:
1. 可靠的数据存储:RDBMS 保护数据不受系统故障或崩溃的影响。
2. 性能:RDBMS 通常比文本文件更高效地存储数据,并且拥有完善的查询数据的算法。
3. 数据管理:RDBMSS 实现访问控制,防止未经授权的用户访问敏感数据集。
4. 数据一致性:RDBMSS 可以对输入的数据施加约束,例如,列`GPA`只包含介于 0.0 和 4.0 之间的浮点数。
为了处理存储在 RDBMS 中的数据,我们使用 SQL 编程语言。
## RDBMS 与 pandas 的对比[](#RDBMS-vs-pandas)
RDBMS 和 `pandas` Python 包有何区别?首先,`pandas`不关心数据存储。虽然 数据帧(DataFrame) 可以从多种数据格式中读写,但 `pandas` 并不像 RDBMS 那样规定数据实际存储在底层计算机上的方式。其次,`pandas` 主要提供操作数据的方法,而 RDBMS 同时处理数据存储和数据操作,使它们更适合于较大的数据集。一个典型的经验法则是对大于几 GB 的数据集使用 RDBMS。最后,`pandas` 需要了解 Python 才能使用,而 RDBMS 需要了解 SQL。由于 SQL 比 Python 学习起来简单,RDBMS 允许用户使用较少的技术就能存储和查询数据,这是一个方便的特性。
- 一、数据科学的生命周期
- 二、数据生成
- 三、处理表格数据
- 四、数据清理
- 五、探索性数据分析
- 六、数据可视化
- Web 技术
- 超文本传输协议
- 处理文本
- python 字符串方法
- 正则表达式
- regex 和 python
- 关系数据库和 SQL
- 关系模型
- SQL
- SQL 连接
- 建模与估计
- 模型
- 损失函数
- 绝对损失和 Huber 损失
- 梯度下降与数值优化
- 使用程序最小化损失
- 梯度下降
- 凸性
- 随机梯度下降法
- 概率与泛化
- 随机变量
- 期望和方差
- 风险
- 线性模型
- 预测小费金额
- 用梯度下降拟合线性模型
- 多元线性回归
- 最小二乘-几何透视
- 线性回归案例研究
- 特征工程
- 沃尔玛数据集
- 预测冰淇淋评级
- 偏方差权衡
- 风险和损失最小化
- 模型偏差和方差
- 交叉验证
- 正规化
- 正则化直觉
- L2 正则化:岭回归
- L1 正则化:LASSO 回归
- 分类
- 概率回归
- Logistic 模型
- Logistic 模型的损失函数
- 使用逻辑回归
- 经验概率分布的近似
- 拟合 Logistic 模型
- 评估 Logistic 模型
- 多类分类
- 统计推断
- 假设检验和置信区间
- 置换检验
- 线性回归的自举(真系数的推断)
- 学生化自举
- P-HACKING
- 向量空间回顾
- 参考表
- Pandas
- Seaborn
- Matplotlib
- Scikit Learn