SQLite - Ràng Buộc: Hướng Dẫn Toàn Tập Về Tính Nguyên Vẹn Dữ Liệu

Xin chào các bạn tương lai của các phù thủy cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một hành trình đầy thú vị vào thế giới của các ràng buộc SQLite. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người bạn thân thiện của bạn, giải thích mọi thứ từng bước một. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể ràng buộc dữ liệu của mình như một chuyên gia!

SQLite - Constraints

Ràng Buộc Là Gì?

Trước khi chúng ta đi sâu vào, hãy nói về ràng buộc là gì. Hãy tưởng tượng bạn đang xây dựng một ngôi nhà bằng bài. Bạn muốn nó ổn định, phải không? Ràng buộc trong cơ sở dữ liệu giống như những quy tắc bạn tuân theo để giữ cho ngôi nhà bài của bạn không bị đổ. Chúng đảm bảo rằng dữ liệu của bạn luôn nhất quán và đáng tin cậy.

Loại Ràng Buộc

SQLite cung cấp nhiều loại ràng buộc. Hãy cùng khám phá từng loại với một số ví dụ thú vị!

1. Ràng Buộc NOT NULL

Ràng buộc NOT NULL giống như một bảo vệ ở câu lạc bộ - nó không cho phép giá trị trống vào cơ sở dữ liệu của bạn.

CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
);

Trong ví dụ này, chúng ta đang tạo một bảng cho học sinh. Các trường nameage không thể để trống. Nếu bạn cố gắng chèn một học sinh không có tên hoặc tuổi, SQLite sẽ từ chối một cách lịch sự (nhưng quyết đoán).

2. Ràng Buộc DEFAULT

Ràng buộc DEFAULT giống như mẹ bạn打包 bữa trưa cho bạn - nếu bạn quên mang thứ gì đó, nó sẽ có một tùy chọn mặc định cho bạn.

CREATE TABLE orders (
id INTEGER PRIMARY KEY,
product TEXT NOT NULL,
quantity INTEGER DEFAULT 1,
order_date TEXT DEFAULT CURRENT_DATE
);

Ở đây, nếu bạn không chỉ định số lượng khi đặt hàng, nó giả định bạn muốn một món hàng. Và nếu bạn quên thêm ngày, nó sẽ sử dụng ngày hiện tại.

3. Ràng Buộc UNIQUE

Ràng buộc UNIQUE giống như việc chỉ định số ghế trong lớp học - không có hai học sinh nào có thể có cùng một ghế.

CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
email TEXT UNIQUE
);

Điều này đảm bảo rằng không có hai người dùng nào có thể có cùng tên người dùng hoặc địa chỉ email. Nó hoàn hảo để ngăn chặn các tài khoản trùng lặp!

4. Ràng Buộc PRIMARY KEY

Ràng buộc PRIMARY KEY giống như việc cấp cho mỗi học sinh một thẻ ID duy nhất. Đây là một loại ràng buộc UNIQUE đặc biệt mà cũng không thể NULL.

CREATE TABLE books (
isbn TEXT PRIMARY KEY,
title TEXT NOT NULL,
author TEXT NOT NULL
);

Trong ví dụ này, mỗi cuốn sách có một ISBN duy nhất hoạt động như một định danh.

5. Ràng Buộc CHECK

Ràng buộc CHECK giống như một giáo viên kiểm tra bài tập của bạn - nó đảm bảo rằng dữ liệu của bạn đáp ứng một số điều kiện nhất định.

CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER CHECK(age >= 18),
salary REAL CHECK(salary > 0)
);

Điều này đảm bảo rằng tất cả nhân viên đều ít nhất 18 tuổi và có mức lương dương tính. Không có lao động trẻ em hoặc thực tập sinh không lương ở đây!

6. Ràng Buộc FOREIGN KEY

Ràng buộc FOREIGN KEY giống như việc kết nối các mảnh ghép puzzle - nó liên kết các bảng với nhau dựa trên dữ liệu liên quan.

CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER,
product TEXT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);

Ràng buộc này đảm bảo rằng mỗi customer_id trong bảng orders khớp với một id trong bảng customers.

Chỉnh Sửa Ràng Buộc

Đôi khi, bạn có thể cần thay đổi ràng buộc của mình. Hãy cùng xem cách thực hiện điều đó.

Thêm Ràng Buộc

Bạn có thể thêm ràng buộc vào bảng hiện có bằng lệnh ALTER TABLE:

ALTER TABLE students ADD CONSTRAINT age_check CHECK(age > 0);

Điều này thêm một kiểm tra để đảm bảo tất cả các tuổi đều là số dương.

Xóa Ràng Buộc

Việc xóa ràng buộc trong SQLite稍微 phức tạp hơn. Bạn thực sự cần tạo lại bảng mà không có ràng buộc:

-- Bước 1: Tạo một bảng mới mà không có ràng buộc
CREATE TABLE new_students AS SELECT * FROM students;

-- Bước 2: Xóa bảng cũ
DROP TABLE students;

-- Bước 3: Đổi tên bảng mới
ALTER TABLE new_students RENAME TO students;

Phương Thức Ràng Buộc

Dưới đây là bảng tóm tắt các phương thức chúng ta có thể sử dụng với ràng buộc:

Phương Thức Mô Tả
NOT NULL Đảm bảo một cột không thể có giá trị NULL
DEFAULT Cung cấp giá trị mặc định cho một cột
UNIQUE Đảm bảo tất cả các giá trị trong một cột đều khác nhau
PRIMARY KEY Định danh duy nhất mỗi hàng/ghi chép trong bảng cơ sở dữ liệu
CHECK Đảm bảo tất cả các giá trị trong một cột thỏa mãn một số điều kiện
FOREIGN KEY Định danh duy nhất một hàng/ghi chép trong bảng khác

Kết Luận

Chúc mừng! Bạn vừa hoàn thành khóa học nhanh về ràng buộc SQLite. Nhớ rằng, ràng buộc là bạn của bạn - chúng giúp giữ cho dữ liệu của bạn sạch sẽ, nhất quán và đáng tin cậy. Khi bạn tiếp tục hành trình vào thế giới của cơ sở dữ liệu, bạn sẽ thấy ràng buộc này rất hữu ích trong việc duy trì tính nguyên vẹn dữ liệu.

Luôn suy nghĩ về quy tắc mà dữ liệu của bạn nên tuân theo, và sử dụng ràng buộc để thực thi những quy tắc đó. Dễ dàng hơn nhiều để ngăn chặn dữ liệu xấu vào cơ sở dữ liệu của bạn hơn là làm sạch nó sau này!

Tiếp tục luyện tập, 保持好奇心 (giữ vững sự tò mò), và chúc bạn vui vẻ trong việc lập trình! ??

Credits: Image by storyset