# 關系數據庫
> 原文:[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