Hỗ trợ: xuất hoá đơn GTGT 8%.
Image 1

Cho CSDL quản lý Thư viện gồm các bảng: Sách (Mã sách, Tên sách, Loại sách, Đơn …

Cho CSDL quản lý Thư viện gồm các bảng: Sách (Mã sách, Tên sách, Loại sách, Đơn …

Cho CSDL quản lý Thư viện gồm các bảng: Sách (Mã sách, Tên sách, Loại sách, Đơn giá), Người đọc (Số thẻ, Họ tên, Ngày sinh, Lớp), Mượn sách (Mã sách, Số thẻ, Ngày mượn, Số lượng).
a. Hãy xác định khóa chính và khóa ngoài cho mỗi bảng?
b. Giả sử CSDL quản lý thư viện đã được tạo, em hãy viết truy vấn hiển thị danh sách học sinh mượn sách gồm Số thẻ học sinh, họ tên, lớp, mã sách, ngày mượn, số lượng.
Hỏi bởi:
2 câu trả lời
▲ 3
Chào các em,
Hôm nay, chúng ta sẽ cùng nhau giải một bài tập rất cơ bản và quan trọng trong chương trình Tin học lớp 11 về Cơ sở dữ liệu quan hệ. Bài tập này giúp các em củng cố kiến thức về khóa và cách viết truy vấn để kết nối thông tin từ nhiều bảng.

Chúng ta bắt đầu nhé!

BÀI GIẢI CHI TIẾT

Câu a. Hãy xác định khóa chính và khóa ngoài cho mỗi bảng

Trước hết, chúng ta cần nhớ lại khái niệm khóa chính và khóa ngoài.
Khóa chính (Primary Key): là một hoặc một tập hợp các trường dùng để xác định duy nhất một hàng (một bản ghi) trong bảng. Giá trị của khóa chính không được trùng lặp và không được để trống (NULL).
Khóa ngoài (Foreign Key): là một trường hoặc một tập hợp các trường trong một bảng, dùng để tham chiếu đến khóa chính của một bảng khác. Khóa ngoài tạo ra mối liên kết giữa các bảng.

Bây giờ, chúng ta sẽ xét từng bảng:

1. Bảng Sách (Mã sách, Tên sách, Loại sách, Đơn giá)
– Để phân biệt các cuốn sách khác nhau, thư viện thường dùng một mã định danh duy nhất cho mỗi đầu sách. Trong bảng này, trường Mã sách đóng vai trò đó. Mỗi cuốn sách sẽ có một mã không trùng lặp.
Kết luận: Khóa chính của bảng SáchMã sách.

2. Bảng Người đọc (Số thẻ, Họ tên, Ngày sinh, Lớp)
– Tương tự, mỗi bạn đọc sẽ được cấp một thẻ thư viện với một số thẻ riêng, không ai giống ai. Trường Số thẻ dùng để xác định duy nhất một bạn đọc.
Kết luận: Khóa chính của bảng Người đọcSố thẻ.

3. Bảng Mượn sách (Mã sách, Số thẻ, Ngày mượn, Số lượng)
– Bảng này chứa thông tin về việc mượn sách. Nó không mô tả một đối tượng cụ thể như Sách hay Người đọc, mà mô tả một mối quan hệ: “Người đọc nào mượn Sách nào”.
– Ta thấy trong bảng này có trường Mã sách, trường này dùng để liên kết đến bảng Sách (tham chiếu tới khóa chính của bảng Sách).
– Tương tự, trường Số thẻ dùng để liên kết đến bảng Người đọc (tham chiếu tới khóa chính của bảng Người đọc).
Kết luận:
– Bảng Mượn sách có hai khóa ngoài.
– Khóa ngoài thứ nhất là Mã sách, liên kết đến bảng Sách.
– Khóa ngoài thứ hai là Số thẻ, liên kết đến bảng Người đọc.
– (Mở rộng thêm cho các em hiểu sâu hơn, không bắt buộc trong bài làm: Trong thực tế, để đảm bảo mỗi lần mượn là duy nhất, người ta có thể chọn tổ hợp (Mã sách, Số thẻ, Ngày mượn) làm khóa chính cho bảng này).

Câu b. Viết truy vấn hiển thị danh sách học sinh mượn sách

Để viết truy vấn này, chúng ta cần lấy thông tin từ hai bảng:
– Bảng Người đọc để lấy: Họ tên, Lớp.
– Bảng Mượn sách để lấy: Mã sách, Ngày mượn, Số lượng.
– Cả hai bảng đều có trường Số thẻ, đây chính là “cầu nối” để chúng ta kết hợp dữ liệu từ hai bảng này.

Chúng ta sẽ sử dụng câu lệnh SELECT với cú pháp kết nối hai bảng. Các em hãy thực hiện theo các bước sau trong môi trường truy vấn (ví dụ như trong Microsoft Access):

Bước 1: Chọn các trường cần hiển thị
Sử dụng mệnh đề SELECT. Các trường được yêu cầu là: Số thẻ, họ tên, lớp, mã sách, ngày mượn, số lượng.

Bước 2: Xác định các bảng cần lấy dữ liệu và tạo liên kết
Sử dụng mệnh đề FROMINNER JOIN. Chúng ta cần kết nối bảng Người đọc và bảng Mượn sách.
Điều kiện để kết nối hai bảng này là giá trị của trường Số thẻ ở hai bảng phải bằng nhau. Ta sẽ thể hiện điều này bằng mệnh đề ON.

Bước 3: Viết câu truy vấn hoàn chỉnh
Kết hợp các bước trên, ta có câu truy vấn SQL như sau:

SELECT NguoiDoc.[So the], NguoiDoc.[Ho ten], NguoiDoc.Lop, MuonSach.[Ma sach], MuonSach.[Ngay muon], MuonSach.[So luong]
FROM NguoiDoc INNER JOIN MuonSach
ON NguoiDoc.[So the] = MuonSach.[So the];

Giải thích câu lệnh:
SELECT …: Liệt kê các trường mà chúng ta muốn kết quả trả về. Ta dùng cú pháp TênBảng.[TênTrường] để chỉ rõ trường đó thuộc bảng nào, tránh nhầm lẫn khi cả hai bảng có trường trùng tên (như trường Số thẻ).
FROM NguoiDoc INNER JOIN MuonSach: Chỉ định rằng chúng ta sẽ lấy dữ liệu từ kết quả kết nối (JOIN) giữa hai bảng Người đọcMượn sách.
ON NguoiDoc.[So the] = MuonSach.[So the]: Đây là điều kiện kết nối. Câu lệnh sẽ tìm những cặp bản ghi từ hai bảng sao cho giá trị ở trường Số thẻ của chúng khớp nhau, và ghép chúng lại thành một bản ghi duy nhất trong kết quả.

Khi thực thi câu lệnh trên, hệ quản trị CSDL sẽ trả về một bảng gồm đầy đủ các thông tin theo yêu cầu của đề bài.

Chúc các em học tốt! Nếu có bất kỳ thắc mắc nào, đừng ngần ngại đặt câu hỏi nhé.

Trả lời bởi: Giáo viên Chuyên Môn
▲ 3

Đánh giá 5 sao cho mình

a. Xác định khóa chính và khóa ngoài cho mỗi bảng:

  1. Bảng Sách:

    • Khóa chính: Mã sách.
    • Không có khóa ngoài.
  2. Bảng Người đọc:

    • Khóa chính: Số thẻ.
    • Không có khóa ngoài.
  3. Bảng Mượn sách:

    • Khóa chính: (Mã sách, Số thẻ, Ngày mượn).
    • Khóa ngoài: Mã sách tham chiếu đến Mã sách ở bảng Sách, Số thẻ tham chiếu đến Số thẻ ở bảng Người đọc
    • b,truy vấn SELECT Ngườiđọc.[Số thẻ], Ngườiđọc.[Họ tên], Ngườiđọc.[Lớp],
             Mượnsách.[Mã sách], Mượnsách.[Ngày mượn], Mượnsách.[Số lượng]
      FROM Ngườiđọc
      INNER JOIN Mượnsách ON Ngườiđọc.[Số thẻ] = Mượnsách.[Số thẻ];
Trả lời bởi: Nhật Ngô

Viết một bình luận

WhatsApp
Facebook
Chat Zalo
Zalo
097.538.4646
Zalo
Giới thiệu Như Hảo