July 23, 2023

Viiisit SQL!

#sql

before_action :review

What is Active Record?

Active Record 是一個設計模式,也是 Ruby on Rails 中的一個核心概念。
用於處理資料庫和應用程式之間的 ORM(Object-Relational Mapping)模式。
Active Record 的設計目的是在程式碼中實現對資料庫記錄的操作。


SQL

回歸到本次主題 - SQL,之前已經理解 Rails 裡 Model 與 Migration 的關係,
這次透過練習 SQL 語法來回顧,Rails 的 Migration 檔案是如何轉換成對應資料庫的 SQL 語法,執行資料庫結構的變更!

What is SQL?

SQL(Structured Query Language)是一種專門設計用於資料庫操作的語言,
使用簡單的指令和語法來與資料庫進行交互。
包括查詢資料、新增、更新和刪除記錄,以及創建和管理資料庫結構等。
常見的資料庫如 MySQL、PostgreSQL、SQLite、Oracle 等。

SQL 語法主要包含:


char vs varchar

兩者在效能上的差異:空間使用查詢速度

Brief Summary

當資料欄位的長度固定且不會經常變動時,使用 char,因為它的查詢速度通常較快。
而當資料欄位的長度不固定或可能變動時,使用 varchar 可以節省儲存空間並避免浪費。
選擇使用 char 還是 varchar 取決於資料的特性和應用需求。


ORM 方式 vs SQL 方式

在 Rails 中,可以使用 Migration 來建立資料庫的資料表,
透過 Migration 使用 ActiveRecord 的方式來定義資料表的欄位,
而 ActiveRecord 會將這些定義轉換成對應的 SQL 語法,進行資料庫的建立。

以下使用 ORM 和 SQL 的方式來建立資料表的範例:

如果想限制 title 欄位的長度為 10,可以使用以下方式:

Brief Summary

ORM 的方式使用 ActiveRecord 提供的方法來定義資料表的欄位,並由 ActiveRecord 轉換成相應的 SQL 語法。
而直接使用 SQL 的方式則直接使用原生的 SQL 語法來定義資料表的欄位。
使用 ORM 的方式在 Rails 中更容易使用 Ruby 語法來定義資料表,而不需要使用 SQL 語法。

Remark:
關鍵字寫大寫,易讀性高!
INT 跟 INTEGER 是一樣的,只是因為不同時代留下來的渣渣

練習 SQL 語法!

Remark:
每段最後同時寫上呼應的 Rails 語法,底下的 Hero 是 Model 喔!

ERD - Entity Relationship Diagram 實體關係圖

一種用來描述資料庫中資料實體和它們之間關係的視覺化工具。

1
2
3
4
5
6
7
SELECT *
FROM monsters
WHERE kill_by = (
SELECT id
FROM heroes
WHERE name = '埼玉'
)
1
2
3
4
5
6
7
SELECT *
FROM monsters
WHERE kill_by IN (
SELECT id
FROM heroes
WHERE name IN ('埼玉', '傑諾斯')
)

after_action :與 excel 的差別

資料庫和 Excel 是兩種不同的資料管理工具,在設計和使用上有很多差異:

Brief Summary

資料庫適用於大型結構化資料的管理和處理,並且支援多用戶存取和複雜的查詢需求。
Excel 則適合用於較小的資料集,用於個人或小型組織的資料管理和分析。


Summary

透過以上的說明,可以了解到資料庫提供了很多有效的方法來儲存、管理和查詢資料,確保資料的安全、完整性和一致性,並且擁有大量處理資料的能力也以 Excel 來比較之間的差異,之後要不停回顧與更新,這樣才會抓牢 SQL 基礎知識,不能忘記!


參考資料:
RailsGuides