Đây là bài 3 của chương 2: Ràng buộc và toàn vẹn, thuộc khóa demo PostgreSQL. Nội dung được dùng để trải nghiệm cấu trúc chương trình học; hãy thực hành trên dữ liệu và môi trường thử nghiệm riêng. Trong dự án xuyên suốt, bạn sẽ xây dựng cơ sở dữ liệu khóa học, đăng ký học và báo cáo tiến độ.
Mục tiêu cụ thể
Not null, unique, check và foreign key đưa quy tắc quan trọng xuống DB. Ứng dụng vẫn validate để trả thông báo dễ hiểu, nhưng DB bảo vệ khi có nhiều đường ghi dữ liệu.
Đề bài thực hành
Thử chèn hai đăng ký trùng cặp người dùng-khóa học trong DB thử nghiệm và giải thích lỗi.
Quy trình từng bước
- Xác định đầu vào, đầu ra và trạng thái trước khi bắt đầu. Với ràng buộc và toàn vẹn, hãy ghi lại kết quả bạn mong muốn trước khi chạy ví dụ.
- Tạo bản thử nhỏ nhất trong một thư mục hoặc môi trường riêng. Chỉ dùng dữ liệu giả; không sao chép token, tài khoản hoặc dữ liệu cá nhân vào bài tập.
- Thực hiện yêu cầu: Thử chèn hai đăng ký trùng cặp người dùng-khóa học trong DB thử nghiệm và giải thích lỗi.
- Quan sát kết quả và so sánh từng điều kiện chấp nhận. Khi chưa đạt, thay đổi một yếu tố mỗi lần để biết thay đổi nào tạo ra tác động.
- Lưu kết quả cùng ghi chú giải thích quyết định. Người khác cần tái hiện được thao tác mà không phải đoán cấu hình hoặc dữ liệu ban đầu.
Điểm khởi đầu
CREATE TABLE enrollments (
user_id bigint NOT NULL REFERENCES users(id),
course_id bigint NOT NULL REFERENCES courses(id),
created_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (user_id, course_id)
);
Đối chiếu kết quả
- Không có đăng ký mồ côi
- Cặp user-course là duy nhất
- Quy tắc lưu lịch sử được mô tả
Nếu kết quả khác dự kiến
Unique cho một cột khác với unique cho cặp cột. Cần xác định đăng ký lại được ghi lịch sử hay cập nhật cùng một enrollment.
Chụp hoặc ghi lại đầu vào và đầu ra trước khi sửa. Xác nhận tệp đã lưu, đúng môi trường đang chạy và dữ liệu thử vẫn giữ nguyên. Sau khi sửa, chạy lại cả trường hợp ban đầu lẫn một trường hợp biên để tránh sửa được một nhánh nhưng làm hỏng nhánh khác.
Sản phẩm cần lưu
- Mã nguồn hoặc sơ đồ của bản thử.
- Dữ liệu đầu vào có thể dùng lại.
- Ba kết quả kiểm tra kèm giải thích.
- Một ghi chú về điều bạn sẽ làm khác nếu triển khai cho người dùng thật.