Giải Tin Học trang 68

Lời giải chi tiết SGK Lớp 11 · Môn Tin Học · Trang 68–69

Nguon: Tin Hoc 11 - Ket Noi Tri Thuc Voi Cuoc Song (trang 68 – 69)

🔍 Kiến thức cần nhớ

Trước khi giải bài tập, ta hệ thống lại các khái niệm then chốt được trình bày trong hai trang sách:

  • Trường (field): một cột dữ liệu trong bảng, mọi giá trị trong một trường đều cùng một kiểu dữ liệu.
  • Kiểu dữ liệu của trường: quy định dạng giá trị được phép lưu (số nguyên, xâu kí tự, lôgic, ngày tháng, số thực…). Ví dụ trong bảng bangdiem:
  • sbd – số nguyên
  • hoten – xâu kí tự (không quá 64 kí tự)
  • gt – lôgic (Nam/Nữ tương ứng 0/1)
  • ngaysinh – ngày tháng
  • diem – số thập phân (tối đa 5 chữ số, 2 chữ số sau dấu phẩy)
  • makithi – xâu kí tự độ dài cố định 5 kí tự
  • Mục đích xác định kiểu dữ liệu: hạn chế lãng phí dung lượng lưu trữ và kiểm soát tính đúng đắn lôgic của dữ liệu nhập vào.
  • Khoá chính (primary key): một hoặc một nhóm trường mà giá trị của nó xác định duy nhất mỗi bản ghi (mỗi hàng) trong bảng. Khoá chính không được rỗngkhông trùng lặp.
  • Khoá ngoài (foreign key): một hoặc nhóm trường trong bảng này, tham chiếu đến khoá chính của một bảng khác, tạo nên liên kết giữa các bảng.
  • Lợi ích của việc tách thành nhiều bảng (thay vì gộp tất cả vào một bảng như Bảng NBC): tránh dư thừa dữ liệu, tránh mất tính nhất quán (ví dụ "Văn Cao" và "Van Cao"), và khi sửa một tên chỉ cần sửa một lần ở bảng gốc.
💡 Mẹo nhớ: Khoá CHÍNH = "căn cước" nội bộ của bảng (duy nhất, không rỗng). Khoá NGOÀI = "đường dây" nối sang bảng khác, nó chính là khoá chính của bảng được trỏ tới.

⚙️ Bài tập

CSDL âm nhạc gồm 4 bảng (theo Hình 13.1):

BảngCác trường chính
Nhạc sĩAid (mã nhạc sĩ), TenNS
Ca sĩSid (mã ca sĩ), TenCS
Bản nhạcMid (mã bản nhạc), Aid (nhạc sĩ sáng tác), TenBN
Bản thu âmMid (bản nhạc), Sid (ca sĩ thể hiện)

Câu 1

Đề bài: Hãy chỉ ra khoá chính của bảng Ca sĩ và bảng Bản nhạc.

Cách 1 — Tìm trường xác định duy nhất mỗi bản ghi

Bảng Ca sĩ gồm hai trường: Sid (mã ca sĩ) và TenCS (tên ca sĩ).

  • Mỗi ca sĩ được cấp một mã Sid riêng (TK, LD, TN, QH…), không trùng nhau.
  • Tên ca sĩ TenCS có thể trùng (hai người cùng tên) nên không bảo đảm tính duy nhất.

Khoá chính của bảng Ca sĩ là trường Sid.

Bảng Bản nhạc gồm các trường: Mid (mã bản nhạc), Aid (mã nhạc sĩ sáng tác), TenBN (tên bản nhạc).

  • Mỗi bản nhạc có một mã Mid duy nhất (0001, 0002, …).
  • Tên bản nhạc có thể trùng, một nhạc sĩ sáng tác nhiều bản nhạc nên TenBNAid không xác định duy nhất.

Khoá chính của bảng Bản nhạc là trường Mid.

Cách 2 — Nhận diện nhanh qua "mã định danh"

Trong các CSDL được thiết kế chuẩn, trường có tên dạng (Mid, Sid, Aid) thường chính là khoá chính. Vì vậy:

  • Ca sĩ → Sid
  • Bản nhạc → Mid
⚠️ Lưu ý thi: Đừng chọn trường tên (TenCS, TenBN) làm khoá chính vì tên có thể trùng lặp và có thể bị sửa đổi, vi phạm tính duy nhất của khoá chính.

Câu 2

Đề bài: Hãy chỉ ra các khoá ngoài của bảng Bản nhạc và bảng Bản thu âm.

Cách 1 — Truy theo liên kết tham chiếu

Bảng Bản nhạc có trường Aid. Trường này không phải khoá chính của Bản nhạc, mà chính là khoá chính Aid của bảng Nhạc sĩ, dùng để biết bản nhạc do nhạc sĩ nào sáng tác.

Khoá ngoài của bảng Bản nhạc là Aid (tham chiếu đến khoá chính Aid của bảng Nhạc sĩ).

Bảng Bản thu âm gồm hai trường MidSid:

  • Mid là khoá chính của bảng Bản nhạc → cho biết thu âm bản nhạc nào.
  • Sid là khoá chính của bảng Ca sĩ → cho biết ca sĩ nào thể hiện.

Khoá ngoài của bảng Bản thu âm gồm Mid (trỏ tới Bản nhạc) và Sid (trỏ tới Ca sĩ).

Cách 2 — Nhìn vào kết quả liên kết Bảng NBC

Bảng NBC ghép được dữ liệu của ba bảng (Bản thu âm – Bản nhạc – Ca sĩ) là nhờ:

  • Mid nối Bản thu âm với Bản nhạc,
  • Sid nối Bản thu âm với Ca sĩ,
  • Aid nối Bản nhạc với Nhạc sĩ.

Chính các trường tạo ra mối nối này là khoá ngoài. Suy ra kết quả như Cách 1.

💡 Mẹo nhớ: Khoá ngoài của bảng "trung gian" (Bản thu âm) thường gồm nhiều khoá chính của các bảng mà nó nối lại với nhau.

Câu 3 — LUYỆN TẬP

Đề bài: Cho CSDL học tập có các bảng:

  • Hocsinh (họ tên, số CCCD, số thẻ học sinh, ngày sinh, địa chỉ)
  • monhoc (tên, mã môn)
  • Diem (số thẻ học sinh, mã môn, năm, học kì, loại điểm, điểm) — trong đó loại điểm chỉ gồm ĐĐG thường xuyên, ĐĐG giữa kì, ĐĐG cuối kì.

Xác định các khoá chính và khoá ngoài của từng bảng. Có thể lấy số CCCD làm khoá chính được không?

Cách 1 — Phân tích từng bảng

a) Bảng Hocsinh

  • Trường định danh duy nhất, do nhà trường cấp riêng cho mỗi học sinh là số thẻ học sinh.
  • Khoá chính: số thẻ học sinh.
  • Các trường còn lại (họ tên, ngày sinh, địa chỉ) có thể trùng nên không làm khoá chính.
  • Khoá ngoài: không có (đây là bảng "gốc" về học sinh).

b) Bảng monhoc

  • Mỗi môn có mã môn duy nhất.
  • Khoá chính: mã môn.
  • Khoá ngoài: không có.

c) Bảng Diem

  • Một học sinh học nhiều môn, mỗi môn nhiều năm, mỗi năm có nhiều học kì, mỗi học kì có nhiều loại điểm. Vì vậy không có trường đơn nào xác định duy nhất một bản ghi.
  • Khoá chính là tổ hợp: (số thẻ học sinh, mã môn, năm, học kì, loại điểm).
  • Tổ hợp này xác định duy nhất một con điểm cụ thể (của ai – môn nào – năm nào – kì nào – loại điểm nào).
  • Khoá ngoài:
  • số thẻ học sinh → tham chiếu khoá chính của bảng Hocsinh.
  • mã môn → tham chiếu khoá chính của bảng monhoc.
Có thể lấy số CCCD làm khoá chính bảng Hocsinh không?

Không nên (thực tế là không được). Lí do:

  • Về lí thuyết, số CCCD là duy nhất với mỗi công dân nên thoả mãn tính duy nhất.
  • Nhưng học sinh nhỏ tuổi có thể chưa được cấp CCCD, dẫn tới trường này bị rỗng (null). Khoá chính bắt buộc không được rỗng, nên CCCD không bảo đảm điều kiện làm khoá chính.
  • Ngoài ra, dùng CCCD làm khoá chính còn liên quan đến bảo mật thông tin cá nhân.

→ Vì vậy chọn số thẻ học sinh làm khoá chính là hợp lí nhất. (Có thể giữ số CCCD như một trường thông tin bổ sung.)

⚠️ Lưu ý thi: Dạng câu hỏi "có dùng trường X làm khoá chính được không" thường kiểm tra điều kiện duy nhất + không rỗng. Chỉ cần một học sinh chưa có CCCD là đủ kết luận không dùng được.

Câu 4 — VẬN DỤNG

Đề bài: Trong kì thi tốt nghiệp THPT, học sinh được đánh số báo danh, có thể thi một số môn, được chia vào các phòng thi được đánh số, sau khi chấm sẽ có điểm thi với các môn đăng kí dự thi. Hãy đề xuất một số bảng dữ liệu cùng các trường làm khoá chính và khoá ngoài.

Cách 1 — Thiết kế CSDL kì thi

Có thể tổ chức dữ liệu thành 4 bảng như sau:

1) Bảng THISINH – thông tin thí sinh

  • Các trường: SBD (số báo danh), hoten, ngaysinh, gioitinh, truong
  • Khoá chính: SBD
  • Khoá ngoài: không có.

2) Bảng MONTHI – danh mục môn thi

  • Các trường: MaMon (mã môn), TenMon
  • Khoá chính: MaMon
  • Khoá ngoài: không có.

3) Bảng PHONGTHI – danh mục phòng thi

  • Các trường: SoPhong (số phòng), DiaDiem (điểm thi/địa điểm)
  • Khoá chính: SoPhong
  • Khoá ngoài: không có.

4) Bảng DIEMTHI – kết quả dự thi của thí sinh ở từng môn

  • Các trường: SBD, MaMon, SoPhong, Diem
  • Khoá chính (tổ hợp): (SBD, MaMon) — một thí sinh thi một môn chỉ có một con điểm.
  • Khoá ngoài:
  • SBD → tham chiếu bảng THISINH
  • MaMon → tham chiếu bảng MONTHI
  • SoPhong → tham chiếu bảng PHONGTHI

Như vậy bảng DIEMTHI là bảng trung gian, liên kết thí sinh – môn thi – phòng thi và lưu điểm.

Cách 2 — Sơ đồ liên kết tóm tắt
THISINH(SBD, ...)          MONTHI(MaMon, ...)       PHONGTHI(SoPhong, ...)
   |                           |                          |
   |  SBD                      | MaMon                    | SoPhong
   v                           v                          v
            DIEMTHI(SBD, MaMon, SoPhong, Diem)
            Khoá chính: (SBD, MaMon)
💡 Mẹo nhớ: Cứ mỗi đối tượng độc lập (thí sinh, môn, phòng) lập một bảng riêng với khoá chính là mã định danh; quan hệ "nhiều – nhiều" giữa chúng (thí sinh ↔ môn) tạo thêm một bảng trung gian có khoá ngoài trỏ về cả hai.

🎯 Ghi nhớ: - Khoá chính xác định duy nhất mỗi bản ghi, không trùng, không rỗng — thường là trường mã (Mid, Sid, SBD, mã môn…). - Khoá ngoài là trường trỏ tới khoá chính của bảng khác, tạo liên kết và giúp ghép dữ liệu giữa các bảng. - Khi một quan hệ có nhiều "chiều" (ai – môn – năm – kì…), khoá chính thường là tổ hợp nhiều trường. - Không dùng trường có thể rỗng (như CCCD của học sinh chưa cấp) làm khoá chính; tách dữ liệu thành nhiều bảng để giảm dư thừa và giữ tính nhất quán.
Chế độ đọc sách →