Computer Science Class Note : 關聯式資料庫和 SQL

Presenter : ihower

前言 & 關連式資料庫

  • 離線或本地快取,APP會需要使用資料庫
  • 資料持久化不能只存記憶體,不靠網路儲存的話
  • 資料庫與excel的差別:Data Type每個 Column 會定義格式
  • 資料驗證,實務上常做在appliaction端,因為會DB language的人少 & 彈性化考量
  • 關連式資料庫(RDBMS)的ACID特性: e.x., Atomicity (transaction交易一起成功一起失敗)
  • v.s 分散式資料庫(用於流量大,需效能好,非transaction特性)
  • sqlite3 用於單機、APP、嵌入式,輕量級
  • MySQL用於網路(多用戶存取)、效能好
  • PostgreSQL物件導向式,用於報表 or 分析

SQL

  • 分成DDL & DML兩種
  • Definition & Manipulation
  • 建立、刪除和更名 Database & CRUD
  • Queries 要小心 case insensitive 不同資料庫預設不同(分辨大小寫)
  • 條件查詢需要注意有沒有索引 Index (B-tree, O(n) -> O(logn)),模糊搜尋需要用另外的 Full-Text Searching 引擎
  • 物件關聯對映(ORM),好處是方便,缺點是多了一層ORM,抽象洩漏法則,可能會出現漏洞而出錯

Database Schema Design

  • Table設計法則:資料庫正規化(Normalization)
  • 讓資料不重複&高度一致性(增加修改資料效率)
    • 一階: 移除重複語意的 columns
    • 二階: 移除重複語意的 row
    • 三階: 移除不依賴 primary key 的資料(選擇Primary key,e.x, UUID)
  • ETL:分成正規化資料庫(有拆表)與分析資料庫(沒拆表)
  • 關聯設計:通常我們不會笨笨地一階兩階..這樣來正規化,可用一種描述關聯的標準圖表(ER-diagram, 介於二、三階之間)
  • 有時候會為了快取,而特意去正規化

Migrations

  • Schema Migration & Data Migration

*N+1 queries 是資料庫效能頭號殺手: 網站效能

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s