Bài 1: Tổng quan về SQLite – Cơ sở dữ liệu nhỏ gọn nhưng mạnh mẽ
I. Mục đích (Objectives)
Sau khi hoàn thành bài viết này, người đọc sẽ:
- Hiểu được khái niệm SQLite là gì và sự khác biệt cơ bản giữa nó với các hệ quản trị cơ sở dữ liệu (RDBMS) truyền thống như MySQL hay SQL Server.
- Nắm được kiến trúc Serverless (không máy chủ) của SQLite.
- Phân tích được ưu/nhược điểm để biết khi nào nên chọn SQLite cho dự án phần mềm.
- Hiểu khái niệm ACID và cách SQLite tuân thủ nó (kiến thức nền tảng cho môn Công nghệ phần mềm).
II. Yêu cầu (Prerequisites)
- Người đọc có kiến thức tin học cơ bản.
- Hiểu sơ lược về khái niệm “Dữ liệu” (Data) và “Lưu trữ” (Storage).
- Chưa cần cài đặt phần mềm chuyên sâu ở bài này.
III. Nội dung chi tiết (Detailed Content)
1. SQLite là gì?
SQLite là một hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở. Tuy nhiên, khác với các “gã khổng lồ” như Oracle, MySQL hay PostgreSQL hoạt động theo mô hình Client-Server, SQLite là một thư viện phần mềm nhúng (Embedded Database).
- Client-Server (MySQL, SQL Server): Bạn cần cài một phần mềm máy chủ (Server) chạy ngầm, sau đó dùng ứng dụng (Client) để kết nối đến nó qua mạng hoặc localhost.
- Embedded (SQLite): SQLite là một phần của chính ứng dụng. Nó không có tiến trình máy chủ riêng biệt. Dữ liệu được đọc/ghi trực tiếp từ một file duy nhất trên đĩa cứng.
Tóm lại: SQLite không phải là một công cụ bạn cài đặt và chạy; nó là một thư viện bạn tích hợp vào chương trình của mình.
2. Kiến trúc đặc biệt của SQLite
Điểm “ăn tiền” nhất của SQLite gói gọn trong cụm từ: Zero Configuration (Không cần cấu hình).
- File-based: Toàn bộ CSDL (bảng, chỉ mục, dữ liệu, view) đều nằm trong 1 file duy nhất (thường có đuôi .db, .sqlite, hoặc .sqlite3).
- Serverless: Không cần khởi động service, không cần mở port, không cần tạo user/password phức tạp để quản lý quyền truy cập server.
- Cross-platform: Bạn có thể copy file .db tạo trên Windows sang Linux, macOS, Android hay iOS và nó vẫn hoạt động bình thường mà không cần chuyển đổi.
3. Tại sao dân Công nghệ phần mềm lại cần SQLite?
Trong môn Công nghệ phần mềm, chúng ta thường nói về việc lựa chọn công nghệ phù hợp với yêu cầu (Requirement Analysis).
Ưu điểm:
- Gọn nhẹ: Kích thước thư viện rất nhỏ (vài trăm KB).
- Tin cậy (ACID Compliant): Mặc dù nhỏ, SQLite tuân thủ đầy đủ chuẩn ACID (Atomicity, Consistency, Isolation, Durability), đảm bảo dữ liệu an toàn ngay cả khi mất điện hoặc lỗi hệ thống.
- Phổ biến: Hầu hết các ngôn ngữ lập trình (Python, C#, Java, PHP,…) đều hỗ trợ SQLite mặc định hoặc qua thư viện rất dễ cài.
- Ứng dụng Mobile: Đây là lựa chọn số 1 cho lưu trữ cục bộ trên Android và iOS.
Nhược điểm (Khi nào KHÔNG nên dùng):
- Concurrency (Đồng thời): SQLite chỉ cho phép 1 người ghi (write) tại một thời điểm. Nếu website của bạn có hàng nghìn người cùng post bài một lúc, SQLite sẽ bị nghẽn (lock database).
- Bảo mật: Vì là file, ai truy cập được vào file hệ thống đều có thể copy database về. Nó dựa vào bảo mật của hệ điều hành (File System Permission).
4. Ví dụ minh họa và Giải thích code
Dù SQLite khác biệt về kiến trúc, nhưng ngôn ngữ truy vấn nó sử dụng vẫn là SQL chuẩn. Dưới đây là ví dụ so sánh tư duy kết nối.
Ví dụ 1: Tư duy kết nối (Pseudo-code)
Với MySQL (Phức tạp):
Server = "192.168.1.10";
Port = 3306;
User = "admin"; // thường là root
Password = "secret_password"; // nhập password tương ứng với username
Database = "SchoolDB"; // nhập tên cơ sở dữ liệu
Connect(Server, Port, User, Password, Database); // kết nối với cơ sở dữ liệu
// Phải lo lắng về việc rớt mạng, sai pass, server chưa start...
Với SQLite (Đơn giản)
File = "C:\Data\SchoolDB.db";
Connect(File);
// Chỉ cần file tồn tại và có quyền đọc ghi file là xong.
Ví dụ 2: Tạo bảng và Thêm dữ liệu trong SQLite
Đây là đoạn code SQL thực tế có thể chạy trên SQLite.
-- 1. Tạo bảng SinhVien
CREATE TABLE SinhVien (
MaSV INTEGER PRIMARY KEY, -- SQLite dùng INTEGER thay vì INT cho khóa chính tự tăng
HoTen TEXT NOT NULL, -- SQLite dùng TEXT cho chuỗi (không phải VARCHAR)
Lop TEXT,
DiemTrungBinh REAL -- REAL tương ứng với số thực (Float/Double)
);
-- 2. Thêm dữ liệu
INSERT INTO SinhVien (HoTen, Lop, DiemTrungBinh)
VALUES ('Nguyen Van A', '12A1', 8.5);
INSERT INTO SinhVien (HoTen, Lop, DiemTrungBinh)
VALUES ('Tran Thi B', '12A2', 9.0);
-- 3. Truy vấn kiểm tra
SELECT * FROM SinhVien WHERE DiemTrungBinh > 8.0;
Giải thích:
- INTEGER PRIMARY KEY: Trong SQLite, cột này sẽ tự động trở thành AUTOINCREMENT (tự động tăng 1, 2, 3…) mà không cần khai báo thêm từ khóa đặc biệt nào, miễn là bạn để trống nó khi INSERT.
- Kiểu dữ liệu: SQLite sử dụng hệ thống kiểu dữ liệu động (Dynamic Typing), nhưng chủ yếu xoay quanh: NULL, INTEGER, REAL, TEXT, BLOB. Nó đơn giản hơn rất nhiều so với hàng chục kiểu của MySQL.
IV. Tổng kết (Summary)
SQLite là một giải pháp cơ sở dữ liệu tuyệt vời cho:
- Học tập & Giảng dạy: Dễ tiếp cận, không cài đặt rườm rà.
- Ứng dụng nhỏ & vừa: Website cá nhân, tool quản lý nội bộ.
- Ứng dụng Mobile: Lưu trữ dữ liệu trên điện thoại.
- Prototyping: Làm bản mẫu nhanh trước khi chuyển sang hệ thống lớn hơn.
SQLite không thay thế hoàn toàn MySQL hay Oracle, nhưng nó là mảnh ghép không thể thiếu trong hệ sinh thái phát triển phần mềm hiện đại.
Trong bài tiếp theo, chúng ta sẽ bắt tay vào thực hành: “Cài đặt công cụ và Làm quen với DB Browser for SQLite” – một công cụ trực quan giúp bạn quản lý file database dễ như quản lý file Excel. Hãy đón xem nhé!
