1. Khởi động
"Theo em, việc lưu trữ dữ liệu phục vụ các bài toán quản lí có phải chỉ là việc chuyển các ghi chép trên giấy thành văn bản trên máy tính không?" — Câu hỏi mở đầu, SGK Tin học 11.
Giáo viên dạy mỗi môn học bắt buộc phải có một sổ điểm – bảng điểm môn học. Một bản sao của bảng điểm môn học được gửi cho giáo viên chủ nhiệm lớp. Hãy cùng thảo luận: có cần lưu trữ bảng điểm lớp học không?
Cùng một học sinh, cùng một môn Toán — nhưng sổ giấy ở hai nơi lại ghi hai điểm khác nhau vì không ai đồng bộ dữ liệu.
Hãy tưởng tượng trường học lưu trữ điểm bằng sổ giấy: giáo viên môn Toán có một cuốn sổ điểm riêng, giáo viên chủ nhiệm lại có thêm một cuốn sổ tổng hợp điểm của cả lớp. Cùng một thông tin — điểm của một học sinh — bị ghi chép và lưu trữ ở hai nơi khác nhau.
Nếu kì thi vừa rồi một học sinh được phúc khảo từ 8 lên 9 điểm môn Toán, giáo viên Toán sửa lại trong sổ của mình nhưng quên báo cho giáo viên chủ nhiệm — sổ điểm lớp vẫn ghi 8. Điều gì sẽ xảy ra khi nhà trường tính điểm tổng kết?
Gợi ý: Dữ liệu đang bị lưu trữ lặp lại ở nhiều nơi khác nhau — đây chính là mầm mống của sự không nhất quán dữ liệu mà bài học sẽ giải thích ở Mục "Yêu cầu dữ liệu".
Mô phỏng nhanh: Thử tự tay phúc khảo điểm
Việc lưu trữ dữ liệu bằng máy tính không chỉ đơn thuần là gõ lại văn bản trên giấy. Cần phải tổ chức một cách khoa học để giải quyết vấn đề trên, đó chính là vai trò của Cơ sở dữ liệu (CSDL).
2. Mục tiêu bài học
Hiểu khái niệm Cơ sở dữ liệu (CSDL): Vì sao cần tổ chức dữ liệu một cách khoa học thay vì chỉ chuyển ghi chép trên giấy thành tệp trên máy tính.
Nắm vững 6 thuộc tính cơ bản của CSDL: tính cấu trúc, không dư thừa, độc lập, toàn vẹn, nhất quán, bảo mật và an toàn.
Vận dụng vào tình huống thực tế: nhận diện từng thuộc tính qua mô phỏng, truy vấn SQL và bài luyện tập.
3. Yêu cầu tổ chức lưu trữ dữ liệu một cách khoa học
Khi ghi chép, lưu trữ trên giấy, giáo viên chủ nhiệm lớp thường lưu trữ cả bảng điểm môn học và bảng điểm lớp học. Tuy nhiên, có thể thấy nhiều dữ liệu lặp lại trong các bảng điểm này và có thể dẫn đến sự không nhất quán dữ liệu. Ví dụ dưới đây trích từ SGK:
Hình 11.1 — Trích bảng điểm môn Toán
| STT | Họ và tên | ĐĐG TX | ĐĐG GK | ĐĐG CK |
|---|---|---|---|---|
| … | … | … | … | … |
| 3 | Nguyễn Kì Duyên | 7 | 8 | 9 |
| … | … | … | … | … |
Hình 11.2 — Trích bảng điểm lớp học
| STT | Họ và tên | Toán | Tin học | Vật lí | Hoá học |
|---|---|---|---|---|---|
| … | … | … | … | … | … |
| 3 | Nguyễn Kì Duyên | 8 | 10 | 10 | 10 |
| … | … | … | … | … | … |
Cùng một học sinh, cùng một điểm Toán cuối kì — nhưng hai bảng lại ghi hai giá trị khác nhau.
Ở Hình 11.1, điểm cuối kì môn Toán của Nguyễn Kì Duyên là 9. Hãy nhấn vào ô trong Hình 11.2 đang ghi sai giá trị này.
Thói quen cá nhân của người lưu trữ cũng có thể dẫn đến sự không nhất quán khi lưu trữ thủ công (ví dụ điểm được ghi bằng chữ hoặc kí hiệu riêng thay vì số). Khi dữ liệu được lưu trên máy tính, bảng điểm lớp học có thể được tự động lập ra từ các bảng điểm môn học — vì vậy không cần lưu trữ nó như một bản sao riêng, nó chỉ là một "khung nhìn" tổng hợp.
Việc lưu trữ dữ liệu trên máy tính vì thế không đơn thuần là chuyển văn bản trên giấy thành tệp văn bản trên máy tính — cần tổ chức sao cho hạn chế trùng lặp, khắc phục lỗi không nhất quán. Đây là yêu cầu chung cho mọi bài toán quản lí.
Việc lưu trữ dữ liệu điểm các môn học trên máy tính cần những phần mềm hỗ trợ cập nhật và khai thác thông tin. Ba mô đun phần mềm cần có là: Danh sách lớp (quản lí danh sách lớp học), Điểm môn học (cập nhật điểm) và Lập bảng điểm (tổng hợp bảng điểm lớp học từ dữ liệu điểm môn học).
Nếu viết các mô đun này bằng một ngôn ngữ lập trình — ví dụ Python — giải pháp đơn giản nhất thường là dùng trực tiếp hệ thống tệp văn bản (text), với mỗi dòng ngăn cách bởi dấu phẩy:
Tệp "Danh sách lớp học": 11A, 1, Dương Hồng Anh 11A, 2, Lương Việt Anh 11A, 3, Nguyễn Kì Duyên Tệp "Bảng điểm môn học" (4 ĐĐG TX, 1 ĐĐG GK, 1 ĐĐG CK): 11A, 1, Dương Hồng Anh, 8, 7, , 7, 9, 8 11A, 2, Lương Việt Anh, , 5, 6, 5, 5, 5 11A, 3, Nguyễn Kì Duyên, 7, , 8, 0, 10, 9
Hình 11.3 (mô phỏng lại) — Các mô đun phần mềm và quan hệ với các tệp dữ liệu.
Khi viết mỗi mô đun, người lập trình phải biết cấu trúc của tệp dữ liệu để tách đúng các thành phần theo dấu phẩy. Nếu sau này quy định điểm có phần thập phân và cần đổi dấu phẩy thành dấu chấm để tránh nhầm lẫn, cả hai mô đun "Điểm môn học" và "Lập bảng điểm" đều phải sửa lại — dù bản chất công việc của chúng không hề thay đổi.
Đây chính là sự phụ thuộc giữa chương trình và dữ liệu: thay đổi cách lưu trữ dữ liệu kéo theo phải sửa đổi phần mềm, khiến việc thiết kế, bảo trì, phát triển tốn nhiều thời gian, công sức. Ý tưởng tổ chức dữ liệu độc lập với phần mềm — để phần mềm không cần "nhìn thấy" chi tiết cách lưu trữ mà vẫn dùng được dữ liệu — chính là nền tảng hình thành nên khoa học về Cơ sở dữ liệu (CSDL).
Dữ liệu cần được tổ chức lưu trữ một cách độc lập với việc xây dựng, phát triển phần mềm, đảm bảo dễ dàng chia sẻ, dễ dàng bảo trì phát triển, đồng thời đảm bảo hạn chế tối đa việc dữ liệu lặp lại, gây dư thừa dữ liệu và hỗ trợ đảm bảo tính nhất quán dữ liệu.
4. Cơ sở dữ liệu và thuộc tính cơ bản
Cơ sở dữ liệu (CSDL) là một tập hợp dữ liệu có liên quan với nhau, được lưu trữ một cách có tổ chức trên hệ thống máy tính nhằm mục đích khai thác.
CSDL tổ chức dữ liệu rời rạc thành một khối có cấu trúc, để nhiều phần mềm khác nhau cùng khai thác mà không cần biết chi tiết cách lưu trữ bên dưới.
Một CSDL được thiết kế tốt cần đảm bảo các thuộc tính cơ bản sau. Nhấn vào từng thẻ để xem ví dụ minh hoạ:
1. Tính cấu trúc
Dữ liệu được tổ chức theo những quy tắc nhất định (VD: lưu dưới dạng bảng gồm các hàng và cột).
Nhấn để xem ví dụBảng điểm gồm các cột "Họ tên", "Điểm TX", "Điểm GK", "Điểm CK" và mỗi hàng ứng với một học sinh.
2. Tính không dư thừa
Hạn chế tối đa việc lưu trữ lặp lại một thông tin, giúp tiết kiệm bộ nhớ và dễ dàng cập nhật.
Nhấn để xem ví dụKhông cần lưu riêng "Bảng điểm lớp" vì có thể tổng hợp trực tiếp từ các "Bảng điểm môn học" đã có.
3. Tính độc lập dữ liệu
Dữ liệu độc lập với phần mềm khai thác. Thay đổi cấu trúc dữ liệu không bắt buộc phải viết lại toàn bộ phần mềm.
Nhấn để xem ví dụKhi CSDL đổi cách lưu điểm từ số nguyên sang số thập phân, phần mềm tra cứu điểm vẫn hoạt động bình thường mà không cần viết lại.
4. Tính toàn vẹn
Dữ liệu phải thoả mãn các ràng buộc thực tế (VD: Điểm học tập phải từ 0 đến 10, không được là số âm).
Nhấn để xem ví dụHệ thống sẽ từ chối nếu ai đó nhập điểm là −5 hoặc 15, vì điểm chỉ được phép trong khoảng 0–10.
5. Tính nhất quán
Đảm bảo dữ liệu không bị mâu thuẫn sau các thao tác cập nhật (VD: Điểm ở bảng môn và bảng lớp phải giống nhau).
Nhấn để xem ví dụKhi chuyển khoản ngân hàng, số dư ở tài khoản gửi và tài khoản nhận phải luôn khớp nhau, kể cả khi xảy ra sự cố giữa chừng.
6. Tính bảo mật và an toàn
Ngăn chặn truy cập trái phép, bảo vệ dữ liệu khỏi mất mát do sự cố phần cứng/phần mềm.
Nhấn để xem ví dụChỉ giáo viên bộ môn mới có quyền sửa điểm; dữ liệu được sao lưu định kì để phục hồi khi máy tính gặp sự cố.
4. Khám phá: Câu lệnh SQL và Cấu trúc bảng dữ liệu
Một Hệ quản trị CSDL như MySQL giúp tổ chức dữ liệu bài bản dưới dạng các bảng có cấu trúc rõ ràng (tên cột, kiểu dữ liệu). Tuy nhiên, phần mềm khai thác — cụ thể là các câu lệnh SQL — vẫn luôn phải tuân thủ đúng cấu trúc đó. Đây chính là lí do vì sao việc thiết kế CSDL cẩn thận lại quan trọng đến vậy.
Nhiệm vụ:
1. Nhấn Chạy truy vấn để xem MySQL tạo bảng diem_so, nạp dữ liệu và truy xuất kết quả.
2. Ở dòng SELECT cuối cùng, đổi tên cột ho_ten thành ten rồi nhấn chạy lại.
3. Quan sát thông báo lỗi no such column để hiểu vì sao câu lệnh SQL luôn phải khớp chính xác với cấu trúc bảng đã định nghĩa trong CSDL.
Kết quả hiển thị ở đây...
5. Mô phỏng: Hạn chế dư thừa & Đảm bảo nhất quán
Khi sử dụng CSDL, thay vì lưu hai bảng điểm rời rạc (Bảng môn Toán và Bảng tổng hợp Lớp), ta chỉ lưu dữ liệu gốc một lần. Bảng tổng hợp chỉ là một "khung nhìn" (view) lấy từ dữ liệu gốc.
Lưu trữ thủ công: Dữ liệu bị sao chép. Hãy thử đổi điểm của Kì Duyên ở Bảng môn Toán thành 10 rồi nhấn phím Enter (hoặc click ra ngoài) xem Bảng Lớp có tự cập nhật không?
Bảng điểm môn Toán
| Họ tên | Điểm CK |
|---|---|
| Việt Anh | 8 |
| Kì Duyên |
Bảng điểm Lớp học (Tổng hợp)
| Họ tên | Toán | Tin |
|---|---|---|
| Việt Anh | 8 | 10 |
| Kì Duyên | 9 | 10 |
6. Luyện tập củng cố
Hãy vận dụng kiến thức vừa học để trả lời các câu hỏi sau. Chọn đáp án đúng nhất.
Hoàn thành!
Điểm của em: 0/5