Bài 3: Tạo Cơ sở dữ liệu và Bảng (Table) đầu tiên


I. Mục đích (Objectives)

Sau bài học này, người đọc sẽ:

  • Hiểu cấu trúc cơ bản của một Bảng (Table): Cột (Column/Field) và Dòng (Row/Record).
  • Nắm vững hệ thống kiểu dữ liệu đặc thù của SQLite (Storage Classes) – điểm khác biệt lớn so với các SQL khác.
  • Biết cách tạo bảng bằng 2 phương pháp: Dùng giao diện đồ họa (GUI) và Dùng câu lệnh SQL (CREATE TABLE).
  • Hiểu ý nghĩa các thuộc tính quan trọng: Khóa chính (PK), Tự tăng (AI), Không rỗng (Not Null).

II. Yêu cầu (Prerequisites)

III. Nội dung chi tiết (Detailed Content)

1. Lý thuyết: Cấu trúc dữ liệu và Kiểu dữ liệu trong SQLite

Trước khi bấm chuột, chúng ta cần tư duy đúng. Hãy tưởng tượng File Database là một “ngôi nhà”, thì Table (Bảng) chính là các “căn phòng” chứa đồ đạc được sắp xếp ngăn nắp.
a. Các kiểu dữ liệu cốt lõi (Storage Classes)
Khác với MySQL hay SQL Server có hàng tá kiểu dữ liệu (VARCHAR, CHAR, TINYINT, BIGINT, DATETIME…), SQLite tối giản hóa mọi thứ về 5 nhóm chính (“Storage Classes”). Đây là điều người mới học cần ghi nhớ kỹ:

Kiểu dữ liệu Mô tả Ví dụ
NULL Giá trị rỗng (không có dữ liệu).
INTEGER Số nguyên (có dấu). Dùng cho ID, số lượng, tuổi. 1
100
-5
REAL Số thực (dấu phẩy động). Dùng cho điểm số, giá tiền lẻ. 8.5
10000.50
TEXT Chuỗi ký tự. Dùng cho tên, địa chỉ, ngày tháng (SQLite lưu ngày tháng dạng chuỗi ISO8601). ‘Nguyen Van A’
‘2023-12-20’
BLOB Dữ liệu nhị phân thô. Dùng lưu ảnh, file âm thanh trực tiếp (ít dùng cho người mới).

Lưu ý cho lập trình viên: SQLite sử dụng cơ chế “Dynamic Typing”. Nghĩa là bạn khai báo cột là INTEGER nhưng cố tình lưu chữ “Hello” vào, SQLite vẫn chấp nhận (trừ khi bật chế độ Strict). Tuy nhiên, để đảm bảo tính toàn vẹn dữ liệu, chúng ta nên tuân thủ đúng kiểu đã định nghĩa.

2. Thực hành Phương pháp 1: Tạo bảng bằng giao diện (Dành cho người mới)

Cách này trực quan, nhanh và hạn chế lỗi cú pháp. Chúng ta sẽ tạo bảng HocSinh.

  • Bước 1: Mở file QuanLyLopHoc.db bằng DB Browser for SQLite.
  • Bước 2: Nhấn nút Create Table trên thanh công cụ.
  • Bước 3: Điền tên bảng là HocSinh (Nên đặt không dấu, viết liền).
  • Bước 4: Nhấn nút Add field để thêm các cột sau:

    • Cột 1: Tên id, Kiểu INTEGER.

      • Tích vào ô PK (Primary Key – Khóa chính): Để định danh duy nhất mỗi học sinh.
      • Tích vào ô AI (Auto Increment – Tự tăng): Để máy tự điền số 1, 2, 3… ta không cần nhập.
    • Cột 2: Tên ho_ten, Kiểu TEXT.

      • Tích vào ô NN (Not Null): Bắt buộc phải nhập tên, không được để trống.
    • Cột 3: Tên diem_tb (Điểm trung bình), Kiểu REAL.
  • Bước 5: Nhấn OK. Bạn sẽ thấy bảng HocSinh xuất hiện trong tab “Database Structure”.

3. Thực hành Phương pháp 2: Tạo bảng bằng câu lệnh SQL (Dành cho Coder)

Là dân IT, chúng ta cần biết cách này để sau này nhúng vào code Python/C#. Chúng ta sẽ tạo thêm bảng LopHoc.

  • Bước 1: Chuyển sang thẻ Execute SQL.
  • Bước 2: Nhập đoạn code sau:

    CREATE TABLE LopHoc (
        ma_lop INTEGER PRIMARY KEY AUTOINCREMENT,
        ten_lop TEXT NOT NULL,
        giao_vien_cn TEXT
    );
  • Bước 3: Nhấn nút Play (hình tam giác) để chạy lệnh.
  • Bước 4: Thông báo “Query executed successfully…” hiện ra bên dưới là thành công.

Giải thích code:

  • CREATE TABLE TenBang (…): Lệnh tạo bảng.
  • INTEGER PRIMARY KEY AUTOINCREMENT: Khai báo khóa chính số nguyên tự động tăng. Đây là “câu thần chú” kinh điển trong SQLite.
  • NOT NULL: Ràng buộc dữ liệu không được phép rỗng.

4. Giải mã các từ viết tắt trong DB Browser

Khi tạo bảng bằng giao diện, bạn sẽ thấy các ô check box. Hãy hiểu rõ chúng:

  • PK (Primary Key): Khóa chính. Mỗi dòng phải có PK khác nhau (ví dụ: Số CCCD, Mã sinh viên).
  • AI (Auto Increment): Tự động tăng. Thường đi kèm với PK kiểu số.
  • NN (Not Null): Không được để trống.
  • U (Unique): Duy nhất. Giá trị trong cột này không được trùng lặp (ví dụ: Email, Tên đăng nhập).
  • D (Default): Giá trị mặc định nếu người dùng không nhập gì cả (ví dụ: Mặc định điểm là 0).

IV. Tổng kết (Summary)

Chúc mừng bạn! Bạn đã xây dựng được “bộ khung” cho cơ sở dữ liệu của mình.

  • Chúng ta đã có bảng HocSinh để lưu thông tin.
  • Chúng ta đã có bảng LopHoc để quản lý lớp.

Tuy nhiên, hiện tại các bảng này vẫn đang RỖNG, chưa có dữ liệu nào cả. Ở bài tiếp theo: “Thao tác dữ liệu: Thêm (Insert) và Import dữ liệu từ Excel”, chúng ta sẽ học cách đưa danh sách học sinh vào bảng cực nhanh để bắt đầu quản lý.
Góc chia sẻ:

  1. Quy tắc đặt tên (Naming Convention): Trong bài tôi hướng dẫn đặt tên theo kiểu snake_case (ví dụ: ho_ten, diem_tb). Đây là chuẩn phổ biến khi làm việc với Database và Python. Bạn có thể nhắc sinh viên tránh dùng Tiếng Việt Có Dấu hoặc Space trong tên cột để tránh rắc rối khi code sau này.
  2. Về kiểu ngày tháng: Tôi cố tình chưa đưa kiểu Date vào bài này để tránh quá tải. SQLite không có kiểu DATE riêng mà lưu dưới dạng TEXT hoặc REAL. Bạn có thể dành một mục nhỏ trong các bài nâng cao để nói về vấn đề này (rất hay gặp khi map dữ liệu sang Java/C#).
  3. Tương tác: Cuối bài, bạn có thể ra một bài tập nhỏ: “Bạn hãy thử tạo thêm một bảng MonHoc gồm các cột: ma_mh, ten_mh, so_tin_chi xem sao nhé!”. Điều này kích thích người đọc thực hành ngay.

You may also like...

Để lại một bình luận