iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

Python資料分析學習地圖系列 第 9

Day 09 : 資料庫 Postgres

接著進入一個全新的篇章,介紹一下資料庫。其中資料分析基礎能力之一是可以從資料庫拿取資料,因此我們需要認識資料庫是什麼東東XD 這次我們介紹的資料庫是 Postgres 哦!

資料庫介紹

資料庫可以想成資料的檔案抽屜,我們可以對這些資料有:

  • 新增(CREATE)
  • 查詢(READ)
  • 更新(UPDATE)
  • 刪除(DELETE)
    以上取第一個字母簡稱為 CRUD

資料庫大致上可以分為兩種類型:

  • 關聯式資料庫(Relational Database Management System,縮寫為 RDBMS)
    關聯式資料庫,是由資料表(Table)、紀錄(Record)、欄位(Field)以及資料(Data)所構成的。資料表示資料存在資料庫的形式,一筆一筆橫向的資料的是記錄,直向表示一筆資料的不同屬性,稱為是欄位。

    • 市面上有許多關聯式資料庫(Related database),常見的有:
      • Sqlite
      • MySQL
      • PostgreSQL
      • Oracle Database
      • DB2
  • 非關係型資料庫(Not Only SQL,縮寫為 NoSQL)
    關聯式資料庫非常普及,但這不是唯一存取資料的方式。不是以 SQL 的這種表格方式檢索資料庫,統稱為 NoSQL 資料庫。

    • Key-Value Database:利用鍵值的格式儲存資料,取代原本關聯式資料庫中常用的固定欄位。相比之下,比關連式資料庫有更彈性的架構。
    • Document Database:文件資料庫主要是用來儲存非結構性的文件,不像一般表格那樣有固定的欄位,每個欄位有特定資料類型和大小。
    • Graph Database:這不是專門用來處理圖片的資料庫,而是指運用圖學架構來儲存節點間關係資料架構。
      常見的非關聯式資料庫有:Redis、MongoDB。
  • 資料庫的排名

  • 參考資料

Postgres

PostgreSQL 是美國加州伯克萊大學資訊科學系基於 POSTGRES 4.2 所研發的物件關聯式資料庫管理系統(ORDBMS, Object-Relational Database Management System)。POSTGRES 中的許多重要概念成為日後一些商用資料庫系統重要的一部份。

PostgreSQL 由伯克萊大學公開其原始碼所誕生,它支援了大多數的標準 SQL 語法,並提供許多先進的功能:

  • 複雜查詢(complex queries)
  • 外部索引鍵(foreign keys)
  • 觸發器(triggers)
  • 可更新檢查表(updatable views)
  • 事務完整性(transactional integrity)
  • 多版本併行控制(multiversion concurrency control)

同時,PostgreSQL 也支援讓使用者能以自己的方式進行擴充。比如透過新增:

  • 資料型別(data types)
  • 函數(functions)
  • 操作(operators)
  • 聚合函數(aggregate functions)
  • 索引方法(index methods)
  • 過程式語言(procedural languages)

並且基於自由許可證,任何人都能夠以任何目的,免費地使用、修改、與散布 PostgreSQL,不論是個人使用、商業用途還是學術研究。
參考來源

安裝教學

可以自動動手在電腦裝裝看 postgres
安裝網址
新手教學

SQL 語法

DDL(Data Definition Language)

  • CREATE 建立資料庫/資料表
  • DROP 刪除資料庫/資料表
  • ALTER 修改資料表結構

DML(Data Manipulation Language)

  • INSERT 插入資料
  • SELECT 查詢資料
  • UPDATE 更新資料
  • DELETE 刪除資料

DCL(Data Control Language)

  • GRANT 授權使用者
  • REVOKE 取消使用者權限

TCL(Transaction Control Language)

  • COMMIT 將操作更新到資料庫
  • ROLLBACK 取消對資料庫的操作

SQL 資料類型

  • 整數類型
    • integer,4字節
    • smallint,2字節,更節省磁盤空間
    • bigint,8字節,能夠存儲的數字範圍更大
  • 任意精度類型
    • NUMERIC(precision, scale)
      佔用存儲空間可變,NUMERIC 類型適用於要求合理的場景,例如金融領域。對 NUMERIC 類型的計算,如加、減、乘是合理的,但可能程度的上升帶來的速度的下降,比 INTEGER 類型和 FLOAT 類型,NUMERIC 類型的計算速度非常緩慢。
    • precision: 精度,可以存的總位數
    • scale: 精確,小數點後的位數
  • 浮點數類型
    • float4,單精度,4字節
    • float8,雙精度,8字節
  • 字符類型
    • varchar(n), 有長度限制的字符串
    • char(n),定長字符串,長度不足則向後填充空白字符
    • text,不限長度
  • 日期/時間類型
    • timestamp
    • date
    • time
    • interval
Type Name Memory Length Descriptione Range
number decimal 可變長 指定的精度,精確 小數點前131072 位 ~ 小數點後16383 位
number numeric 可變長 指定的精度,精確 小數點前131072 位 ~ 小數點後16383 位
number real 4 可變精度,不精確 6 位十進制數字精度
number integer 4 常用的整數 -2147483648 ~+2147483647
number smallint 2 小範圍整數 -32768 ~ +32767
number bigint 8 大範圍整數 -9223372036854775808 ~ +9223372036854775807
character character varying(n), varchar(n) 變動長度,有長度限制
character character(n), char(n) 固定長度,不足補空白
character text 變長,無長度限制
time timestamp 8 日期和時間,有時區 4713BC ~ 294276AD
time timestamp 8 日期和時間,無時區 4713BC ~ 294276AD
time date 4 只用於日期 4713BC ~ 5874897AD
time time 8 日期和時間,無時區 00:00:00 ~ 24:00:00
time time 12 日期和時間,有時區 00:00:00+1459 ~ 24:00:00-1459
time interval 16 日期和時間,有時區 -178000000 years ~ +178000000 years
boolean boolean 1 true/false 第三種"unknown"(未知)狀態,用NULL 表示。

資料庫階層

  • database : 資料庫
  • schmeas : 綱要
  • table : 表格

想像一個資料庫是一個大型的倉庫(資料庫),倉庫裡面有房間(綱要),每個房間有不同的主人(權限)
而每個房間又可以擺設不同的物品,例如床、衣櫃等等,對照是我們說的表格
倉庫的主人,就是系統管理員,對於每個物品有所有的管理權,可以說是 super user

產 SCHEMA

CREATE SCHEMA myschema

產 TABLE

CREATE TABLE IF NOT EXISTS myschema.train(
    customer_id character varying(100) PRIMARY KEY,
    sex character varying(1) NOT NULL,
    height numeric(5,2) NOT NULL,
    weight numeric(5,2) NOT NULL
);


上一篇
Day 08 : 資料視覺化 Seaborn
下一篇
Day 10 : Postgres 操作
系列文
Python資料分析學習地圖30

尚未有邦友留言

立即登入留言