Tin Học KHMT
Ôn tập Tin học THPT › Tin học 11 - Khoa học máy tính › Bài 13
Tin học 11 - Khoa học máy tính

Bài 13. Tách một quyển sổ ghi tay thành các bảng dữ liệu liên kết

Biết thế nào là bảng, bản ghi, trường và khoá mới chỉ là một nửa câu chuyện. Nửa còn lại - cũng là phần hay bị hỏi trong đề thi - là tự thiết kế được bộ bảng cho một bài toán quản lí có thật. Bài này đi trọn một ví dụ: từ quyển sổ mượn - trả sách của thư viện trường đến ba bảng dữ liệu nối với nhau bằng khoá.

Chủ đề C · Tổ chức, lưu trữ & tìm kiếm thông tin - đọc khoảng 12 phút · 22 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Cánh DiềuTin học 11 (Khoa học máy tính) - Chủ đề F · Bài 3. Quan hệ giữa các bảng và khoá ngoài trong cơ sở dữ liệu quan hệtr. 57
  • Cánh DiềuTin học 11 (Tin học ứng dụng) - Chủ đề F · Bài 3. Quan hệ giữa các bảng và khoá ngoài trong cơ sở dữ liệu quan hệtr. 57
  • Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 10. Lưu trữ dữ liệu và khai thác thông tin phục vụ quản lítr. 49–52
  • Kết nối tri thứcTin học 11 (Tin học ứng dụng) - Bài 10. Lưu trữ dữ liệu và khai thác thông tin phục vụ quản lítr. 49
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Đầu năm học, thư viện trường của Minh tuyển cộng tác viên, và Minh xung phong nhận việc ghi sổ. Cô phụ trách thư viện đưa cho Minh một quyển sổ kẻ ô to đùng, dặn rằng cứ mỗi lần có bạn nào tới mượn sách thì ghi một dòng: ngày hôm đó, họ tên bạn mượn, lớp của bạn ấy, tên cuốn sách, tên tác giả và ngày hẹn phải trả. Nghe qua thì đơn giản, và trong hai tuần đầu mọi thứ trôi chảy.

Rắc rối bắt đầu từ tháng thứ hai. Bạn Lan lớp 11A2 chuyển sang lớp 11A5. Minh phải lật lại toàn bộ quyển sổ, tìm cho ra mười mấy dòng có tên Lan để sửa lớp. Sửa được mười ba dòng thì Minh mỏi mắt, bỏ sót mất một dòng ở trang trước. Từ hôm đó, cùng một quyển sổ, cùng một người, mà trang này ghi Lan học 11A5, trang kia lại ghi 11A2 - chẳng ai biết chỗ nào mới đúng.

Chưa hết. Có hôm Minh ghi ‘Nguyễn Thị Lan’, hôm khác vội quá ghi ‘Ng. T. Lan’, hôm sau nữa lại có một bạn Lan khác ở lớp 10 tới mượn. Đến cuối học kì, khi cô hỏi lớp nào mượn nhiều sách nhất, ai đang giữ sách quá hạn và cuốn nào được các bạn ưa chuộng nhất, Minh chỉ biết ngồi lật từng trang đếm tay suốt một buổi chiều mà vẫn không dám chắc con số của mình là đúng.

Điều đáng nói là Minh không hề lười, cũng không ghi thiếu chữ nào. Thứ sai ở đây không phải người ghi, mà là cách quyển sổ được kẻ ra ngay từ đầu.

Nội dung bài học

  1. 1) Bài toán quản lí và những thông tin cần lưu
  2. 2) Cái bẫy mang tên ‘một bảng cho tất cả’
  3. 3) Tách thành ba bảng và nối chúng bằng khoá
  4. 4) Kiểu dữ liệu, trường bắt buộc và phép thử thiết kế

Tóm tắt lý thuyết cần nhớ

  • Thiết kế cơ sở dữ liệu bắt đầu từ các câu hỏi quản lí cần trả lời, rồi mới liệt kê thông tin phải lưu - không kẻ bảng trước rồi mới nghĩ sau.
  • Dồn mọi thứ vào một bảng duy nhất gây dư thừa dữ liệu và khiến bảng tự mâu thuẫn khi cập nhật mà sót một dòng.
  • Nguyên tắc tách bảng: mỗi loại đối tượng một bảng, và mỗi thông tin chỉ được lưu ở đúng một nơi; các bảng nối nhau bằng khoá chínhkhoá ngoại chứ không chép lại dữ liệu.
  • Nên dùng mã số làm khoá chính thay cho họ tên, chọn đúng kiểu dữ liệu cho từng trường (nhất là kiểu ngày tháng), và tự kiểm tra thiết kế bằng cách thử trả lời lại các câu hỏi khai thác.

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
databaseĐÊI-tơ-bêicơ sở dữ liệu (CSDL)
Một kho chứa dữ liệu được sắp xếp gọn gàng để tìm và dùng lại dễ dàng - như thư viện xếp sách theo thứ tự.
dataĐÂY-tơ (như 'day' + tơ)dữ liệu
Những con số, chữ, hình còn thô mà máy lưu lại nhưng chưa hiểu ý nghĩa - giống rau củ để trong tủ lạnh, chưa nấu thành món ăn.
recordRE-cợtbản ghi (một hàng)
Một hàng trong bảng, chứa đủ thông tin của một đối tượng - như dòng ghi tên, tuổi, lớp của một bạn.
fieldphin(-đờ)trường (một cột)
Một cột trong bảng, cho biết một loại thông tin - như cột 'Họ tên' hay cột 'Điểm'.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 22 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Một trường quản lí việc mượn sách bằng duy nhất một bảng, mỗi lượt mượn là một dòng có đủ họ tên và lớp của người mượn. Hậu quả nghiêm trọng nhất của cách làm này là gì?
  1. Bảng có quá nhiều cột nên không in vừa một trang giấy A4, thủ thư buộc phải chia nhỏ khi in.
  2. Máy tính không thể sắp xếp bảng theo cột ngày mượn được nữa vì một người nằm ở nhiều dòng.
  3. Dữ liệu bị dư thừa, và khi một độc giả đổi lớp mà sửa sót một dòng thì bảng tự mâu thuẫn với chính nó.
  4. Không thể thêm dòng mới vào bảng một khi bảng đã có quá nhiều dòng, phần mềm sẽ chặn nhập tiếp.
Đáp án: C - Đáp án đúng là C. Vì họ tên và lớp bị chép lại ở mọi lượt mượn nên dữ liệu vừa dư thừa (tốn chỗ, không mang thêm tin tức) vừa dễ mâu thuẫn: một lần đổi lớp phải sửa hàng chục ô, sót một ô là bảng ghi hai lớp khác nhau cho cùng một người. A sai vì số cột nhiều hay ít chỉ là chuyện trình bày, không phải lỗi thiết kế dữ liệu. B sai vì việc sắp xếp theo một cột bất kì vẫn thực hiện bình thường, dồn chung một bảng không cản trở thao tác này. D sai vì số dòng của bảng không bị giới hạn bởi kiểu thiết kế; thêm dòng mới vẫn luôn làm được, vấn đề chỉ là dòng mới lại tiếp tục lặp dữ liệu.
Câu 2 · Nhận biết
Sau khi tách dữ liệu thư viện thành ba bảng ĐỘC GIẢ, SÁCH và LƯỢT MƯỢN, bảng LƯỢT MƯỢN cần chứa những trường nào để biết được ai đã mượn cuốn nào?
  1. Mã độc giả và mã sách, đóng vai trò khoá ngoại trỏ về khoá chính của hai bảng kia.
  2. Họ tên độc giả và nhan đề sách, chép lại đầy đủ cho người xem dễ đọc.
  3. Chỉ cần ngày mượn và hạn trả, vì thủ thư đã nhớ ai mượn cuốn nào.
  4. Toàn bộ các trường của bảng ĐỘC GIẢ và toàn bộ các trường của bảng SÁCH.
Đáp án: A - Đáp án đúng là A. Bảng LƯỢT MƯỢN chỉ giữ hai mã tham chiếu là mã độc giả và mã sách; đó chính là khoá ngoại, nhờ chúng mà từ một lượt mượn ta lần được sang bảng ĐỘC GIẢ và bảng SÁCH để lấy mọi chi tiết còn lại. B sai vì chép lại họ tên và nhan đề chính là quay về đúng lỗi dư thừa mà việc tách bảng muốn loại bỏ. C sai vì thiếu hẳn thông tin về người mượn và về cuốn sách thì lượt mượn trở nên vô nghĩa, không thể nhắc trả hay thống kê được. D sai vì chép toàn bộ các trường của hai bảng sang đây còn tệ hơn cả bảng gộp ban đầu, dữ liệu lặp lại ở mức tối đa.
Câu 3 · Thông hiểu
Vì sao khi thiết kế bảng ĐỘC GIẢ, người ta nên dùng trường mã độc giả làm khoá chính thay vì dùng trường họ tên?
  1. Vì trường họ tên chiếm nhiều bộ nhớ hơn nên làm chương trình chạy chậm hẳn đi, còn mã độc giả chỉ vài kí tự nên tra cứu nhanh.
  2. Vì các hệ quản trị cơ sở dữ liệu không cho phép khoá chính có kiểu dữ liệu văn bản, khoá chính bắt buộc phải là một số nguyên.
  3. Vì họ tên của học sinh sẽ thay đổi theo từng năm học nên không dùng lâu dài được, còn mã độc giả thì giữ nguyên suốt các năm.
  4. Vì hai độc giả có thể trùng họ tên, lại hay bị viết tắt hoặc gõ sai dấu, nên họ tên không phân biệt chắc chắn được từng người.
Đáp án: D - Đáp án đúng là D. Khoá chính đòi hỏi giá trị duy nhất và ổn định; họ tên vi phạm cả hai vì cả trường có thể có nhiều bạn trùng tên, và cùng một người lại có thể được ghi thành nhiều dạng khác nhau (viết tắt, thiếu dấu). A sai vì tiết kiệm bộ nhớ chỉ là lợi ích phụ, lí do cốt lõi là tính duy nhất chứ không phải tốc độ. B sai vì khoá chính hoàn toàn có thể là kiểu văn bản - chính mã độc giả dạng DG007 cũng là văn bản. C sai vì họ tên của một người về nguyên tắc không đổi theo năm học; cái thay đổi là lớp, và đó là lí do lớp không bao giờ được chọn làm khoá.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Nguyên tắc khi tách bảng là mỗi thông tin chỉ được lưu ở đúng một nơi, các bảng khác cần dùng thì tham chiếu tới bằng khoá chứ không chép lại.Đúng
  • b)Bảng LƯỢT MƯỢN đã có mã sách rồi, nhưng vẫn nên chép thêm nhan đề và tác giả vào bảng này để tra cứu cho nhanh.Sai
  • c)Các trường ngày mượn và hạn trả nên đặt kiểu ngày tháng thay vì kiểu văn bản, để máy tính so sánh được ngày và tính được số ngày quá hạn.Đúng
  • d)Khi một độc giả chuyển lớp, với thiết kế ba bảng ta vẫn phải sửa lại lớp ở tất cả các dòng của bảng LƯỢT MƯỢN mà bạn đó xuất hiện.Sai
Vì sao:
  • (a) Đúng - đây chính là nguyên tắc cốt lõi của việc tách bảng, giúp loại bỏ dư thừa và ngăn dữ liệu mâu thuẫn.
  • (b) Sai - chép thêm nhan đề và tác giả là quay lại đúng lỗi của bảng gộp: mỗi lần đính chính tên tác giả lại phải sửa ở rất nhiều dòng, sót một dòng là dữ liệu vênh nhau; đã có mã sách thì lấy chi tiết từ bảng SÁCH là đủ.
  • (c) Đúng - nếu lưu ngày dưới dạng xâu kí tự tuỳ ý thì máy không so sánh và không trừ hai ngày cho nhau được, nên không lọc ra được các lượt quá hạn.
  • (d) Sai - bảng LƯỢT MƯỢN không hề chứa cột lớp; lớp chỉ nằm ở một ô duy nhất trong bảng ĐỘC GIẢ nên chỉ cần sửa đúng một chỗ là toàn hệ thống được cập nhật.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 22 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 13 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.