Giải Tin Học trang 88
Lời giải chi tiết SGK Lớp 11 · Môn Tin Há»c · Trang 88–89
Nguon: Tin Hoc 11 - Ket Noi Tri Thuc Voi Cuoc Song (trang 88 – 89)
⚠️ Lưu ý: Hai trang này thuộc Bài 18 – Thực hành xác định cấu trúc bảng và các trường khoá, phần mục 2 (Tạo lập bảng) và mục 3 (Tổ chức lại bảng dữ liệu). Đây là nội dung lý thuyết và minh hoạ, không có câu hỏi/bài tập đánh số. Dưới đây thầy tóm tắt đầy đủ kiến thức trọng tâm để các em nắm chắc.
🔍 Kiến thức cần nhớ
2. Tạo lập bảng
Ý tưởng xuất phát: Tổng hợp tất cả thông tin cần quản lí về các bản thu âm thành một bảng dữ liệu duy nhất tên là banthuam, gồm các trường:
| Trường | Ý nghĩa |
|---|---|
| idBanthuam | Lưu số hiệu bản thu âm (STT) |
| tenBannhac | Lưu tên bản nhạc |
| tenNhacsi | Lưu tên nhạc sĩ sáng tác |
| tenCasi | Lưu tên ca sĩ thể hiện |
Mô tả bảng ở dạng:
banthuam(idBanthuam, tenBannhac, tenNhacsi, tenCasi)
Về khoá chính:
- Trường idBanthuam xác định duy nhất một bản thu âm → được chọn làm khoá chính.
- Nhóm cả ba trường (tenBannhac, tenNhacsi, tenCasi) cũng xác định duy nhất một bản thu âm, nên về lí thuyết cũng có thể làm khoá chính. Tuy nhiên, dùng idBanthuam thì ngắn gọn và thuận lợi hơn.
- Khoá chính được biểu diễn bằng cách gạch chân tên trường:
banthuam(idBanthuam, tenBannhac, tenNhacsi, tenCasi)
‾‾‾‾‾‾‾‾‾‾
💡 Mẹo nhớ: Khi có nhiều phương án làm khoá chính, hãy chọn trường đơn giản, ngắn gọn, ổn định nhất (thường là một mã số) thay vì một nhóm nhiều trường dài.
3. Tổ chức lại bảng dữ liệu
Mục tiêu: Phân tích và sắp xếp lại bảng để hạn chế dữ liệu bị lặp lại (gây tốn bộ nhớ lưu trữ và khó sửa chữa).
a) Tách bảng casi (xử lí lặp tên ca sĩ)
Vấn đề: Một ca sĩ có thể thể hiện nhiều bản nhạc → trường tenCasi bị lặp; tên ca sĩ lại dài → tốn dung lượng, khó sửa. Ví dụ ca sĩ Trần Khánh xuất hiện ở dòng 3 và 9; khi sửa tên phải sửa ở tất cả các dòng.
Cách khắc phục: Lập riêng bảng casi và thay tenCasi trong bảng banthuam bằng idCasi:
banthuam(idBanthuam, tenBannhac, tenNhacsi, idCasi)
casi(idCasi, tenCasi)
Khi đó idCasi trong bảng banthuam là khoá ngoài, tham chiếu đến khoá chính idCasi trong bảng casi.
💡 Mẹo nhớ: Khoá ngoài (foreign key) là trường trong bảng này nhưng "chỉ tới" khoá chính của bảng kia, giúp liên kết hai bảng mà không cần lặp lại dữ liệu dài dòng.
b) Tách bảng bannhac (xử lí lặp bản nhạc)
Vấn đề: Một bản nhạc có thể có nhiều bản thu âm do các ca sĩ khác nhau thể hiện → cặp (tenBannhac, tenNhacsi) bị lặp. Ví dụ "Trường ca Sông Lô" xuất hiện ở dòng 2 và 9.
Cách khắc phục: Lập bảng bannhac với khoá chính idBannhac, và thay cặp (tenBannhac, tenNhacsi) trong bảng banthuam bằng idBannhac:
banthuam(idBanthuam, idBannhac, idCasi)
casi(idCasi, tenCasi)
bannhac(idBannhac, tenBannhac, tenNhacsi)
c) Tiếp tục tách bảng nhacsi (xử lí lặp tên nhạc sĩ)
Vấn đề: Tên nhạc sĩ trong bảng bannhac vẫn bị lặp vì một nhạc sĩ có thể sáng tác nhiều bản nhạc. Ví dụ nhạc sĩ Văn Cao xuất hiện ở dòng 2 và 6.
Cách khắc phục: Lập thêm bảng nhacsi(idNhacsi, tenNhacsi) và thay trường tenNhacsi trong bảng bannhac bằng idNhacsi.
Minh hoạ các bảng sau khi tổ chức lại
Bảng 18.2 – casi:
| idCasi | tenCasi |
|---|---|
| 1 | Trần Khánh |
| 2 | Lê Dung |
| 3 | Tân Nhân |
| 4 | Quốc Hương |
| 5 | Doãn Tần |
Bảng 18.4 – bannhac:
| idBannhac | tenBannhac | tenNhacsi |
|---|---|---|
| 1 | Du kích sông Thao | Đỗ Nhuận |
| 2 | Trường ca Sông Lô | Văn Cao |
| 3 | Tình ca | Hoàng Việt |
| 4 | Xa khơi | Nguyễn Tài Tuệ |
| 5 | Việt Nam quê hương tôi | Đỗ Nhuận |
| 6 | Tiến về Hà Nội | Văn Cao |
| 7 | Nhạc rừng | Hoàng Việt |
| 8 | Tiếng hát giữa rừng Pắc Bó | Nguyễn Tài Tuệ |
Bảng 18.5 – banthuam (chỉ còn các trường mã số):
| idBanthuam | idBannhac | idCasi |
|---|---|---|
| 1 | 1 | 5 |
| 2 | 2 | 2 |
| 3 | 3 | 1 |
| 4 | 4 | 3 |
| 5 | 5 | 4 |
| 6 | 6 | 5 |
| 7 | 7 | 4 |
| 8 | 8 | 2 |
| 9 | 2 | 1 |
| 10 | 6 | 4 |
⚠️ Lưu ý: Quan sát dòng 2 và 9 đều có idBannhac = 2 (cùng bản "Trường ca Sông Lô") nhưng idCasi khác nhau (2 và 1) → đúng tinh thần "một bản nhạc, nhiều bản thu âm". Tương tự dòng 6 và 10 cùng idBannhac = 6 ("Tiến về Hà Nội").
🎯 Ghi nhớ: - Quá trình chuẩn hoá chính là việc tách bảng lớn thành nhiều bảng nhỏ để loại bỏ dữ liệu trùng lặp. - Mỗi bảng con có khoá chính riêng (gạch chân); các bảng liên kết với nhau qua khoá ngoài. - Sau khi tổ chức lại: bảng banthuam chỉ chứa các mã số (idBanthuam, idBannhac, idCasi) → gọn nhẹ, dễ cập nhật. Muốn sửa tên ca sĩ/nhạc sĩ/bản nhạc chỉ cần sửa một chỗ duy nhất trong bảng tương ứng. - Lợi ích: tiết kiệm bộ nhớ, tránh sai sót khi cập nhật, đảm bảo tính nhất quán của dữ liệu.
