October 11, 2023

Viiisit [Database] - 資料庫是什麼?

#database

在之前透過 Active Record Query 去探索在 Rails 裡是如何對資料庫找資料的,想想發現對於資料庫的基本觀念似乎還沒有講述,今天來點資料庫吧!

資料庫是什麼?

簡單來說,資料庫是用於有效地存儲、檢索和管理所有資料!
平時在詳列出自己的購物清單明細,其實這樣列點式出來就很像一個小型的資料庫,
一張紙上列出一筆筆購物項目,可以新增修改刪除。
而在電腦上的資料庫就是儲存在電腦系統上的資料資訊集合,例如書店的庫存資訊。

在資料庫中,資訊被組織成表格,每個表格包含一組列和行,每列表示一種類型的資料,每行包含一條特定的數據記錄。

隨著資料越來越龐大,想要讓資料保持井然有序、易於存取且安全無虞變得更為困難。
為了解決這些問題,就有了現在常聽到的資料庫管理系統 (DBMS)。而資料庫管理系統又是什麼?

資料庫系統是什麼?

想要有效率地使用與管理資料,能方便、有效使用資料庫的軟體,
就是資料庫管理系統 (Database Management System,簡稱 DBMS)。
資料庫管理系統能幫我們與資料庫做溝通,
其中包括關聯型資料庫管理系統(RDBMS)以及非關聯型資料庫 (NoSQL)

為什麼非關聯型資料庫稱為 NoSQL?
在關聯型資料庫管理系統 (RDBMS) 裡,通常使用結構化查詢語言,也就是 SQL 語法來管理和檢索資料;而非關聯型資料庫 (NoSQL) 通常不使用 SQL,而是使用不同的方法來存儲和檢索資料!

如何設計資料庫?

在建立資料庫時,需要先針對需求以及規格去思考要建立哪些資料表以及資料表中所包含的資料型態,
甚至還有資料與資料之間的關聯,今天就來淺談這幾點吧!Let’s go!

設計資料表

主鍵 PK vs 外鍵 FK

主鍵用來唯一識別一個資料表中的每一筆資料,而外鍵用來建立資料表之間的關聯,確保資料的一致性。主鍵和外鍵在資料庫設計和資料表之間的連接中扮演著重要角色。

資料型態

在建立資料表之前,我們要先來看看有哪些資料型態:

  1. 整數 (INTEGER):

    • 整數資料型態用於存儲不帶小數點的數值,用於存儲年齡、計數等。
  2. 小數 (DECIMAL/NUMERIC, FLOAT, DOUBLE):

    • 這些資料型態用於存儲帶有小數點的數值,用於存儲價格、百分比等。
  3. 字符 (CHAR, VARCHAR, TEXT):

    • 用於存儲文字,像是名稱、地址、評論等。
    • CHAR 是固定長度的字符,而 VARCHAR 是可變長度的字符。
    • CHAR vs VARCHAR 可以參閱:Viiisit SQL!
  4. 日期和時間 (DATE, TIME, DATETIME, TIMESTAMP):

    • 這些資料型態用於存儲日期和時間。
  5. 布林 (BOOLEAN):

    • 用於存儲真或假值,用於表示狀態、開關等。
  6. 枚舉 (ENUM):

    • 這種資料型態允許在一組預定義的值中選擇一個,用於表示選項,例如產品類型(例如 “小型”、”中型”、”大型”)。
  7. 二進制 (BINARY, BLOB):

    • 用於存儲二進制數據,例如圖像、音頻、文件,用於存儲用戶上傳的圖像或文件。

建立資料表:

1
2
3
4
5
6
7
8
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Customername VARCHAR(50) NOT NULL,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Email VARCHAR(100) UNIQUE,
RegistrationDate DATE
);
1
2
3
4
5
6
7
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
TotalAmount DECIMAL(10, 2),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
1
2
3
4
5
6
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100) NOT NULL,
Price DECIMAL(10, 2),
Category VARCHAR(50)
);

SQL 的基礎語法

上面我們看到了在建立資料表時,使用的 SQL 語法,
接著淺談一下,在 SQL 裡的基礎語法有哪些吧!

練習 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 ('埼玉', '傑諾斯')
)

思考一下:資料庫與 excel 的差別

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

Brief Summary

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

今天就到這,我們下篇見!