Chủ
đề: Làm quen với cơ sở dữ liệu quan hệ
1. Tại sao
phải "quan hệ"?
Tưởng tượng bạn là người quản lý điểm của một
trung tâm ngoại ngữ. Ban đầu, bạn có thể tạo một file Excel khổng lồ như thế
này:
|
SBD |
Họ tên |
Ngày sinh |
Lớp |
Tên Môn học |
Giáo viên dạy |
Điểm |
|
001 |
Nguyễn
Văn An |
10/05/2007 |
11A1 |
Tiếng
Anh A1 |
Cô
Mai |
8.5 |
|
002 |
Trần
Thị Bình |
12/03/2007 |
11A2 |
Tiếng
Anh A2 |
Thầy
Hùng |
9.0 |
|
001 |
Nguyễn
Văn An |
10/05/2007 |
11A1 |
Tiếng
Pháp B1 |
Thầy
Thái |
7.5 |
|
003 |
Lê
Văn Cường |
20/08/2007 |
11A1 |
Tiếng
Anh A1 |
Cô
Mai |
8.0 |
Bạn thấy có vấn đề gì không?
- Dư thừa
thông tin: Bạn "Nguyễn
Văn An" thi 2 môn, nên phải nhập lại "Họ tên", "Ngày
sinh", "Lớp" tới 2 lần. Nếu bạn ấy thi 10 môn thì sao? Rất
tốn công và tốn dung lượng!
- Khó cập nhật: Nếu bạn An chuyển sang lớp 11A3, bạn phải
tìm tất cả các dòng có tên bạn An để sửa. Sót một dòng thôi là thông tin sẽ
bị sai lệch ngay!
- Dễ gõ nhầm: Lúc thì gõ "Cô Mai", lúc gõ nhầm
thành "cô mai". Máy tính sẽ hiểu đây là 2 người khác nhau.
Giải pháp: "Chia để trị"! Thay vì bỏ tất cả vào một bảng lớn, chúng ta sẽ
tách ra thành các bảng nhỏ hơn, mỗi bảng quản lý một đối tượng cụ thể.
- Bảng
HOCSINH: Chỉ chứa thông
tin học sinh.
- Bảng
MONHOC: Chỉ chứa thông
tin môn học.
- Bảng DIEM: Chứa điểm của học sinh theo từng môn.
Đây chính là ý tưởng cốt lõi của CSDL quan hệ:
lưu trữ dữ liệu trong các bảng riêng biệt và tạo ra mối liên hệ giữa chúng.
2. Các đặc
điểm hình thành nên cơ sở dữ liệu quan hệ
Để hiểu rõ hơn, chúng ta cần nắm vững vài thuật
ngữ cơ bản nhé.
Bảng (Table):
Giống như một trang tính Excel, dùng để lưu trữ
thông tin về một loại đối tượng cụ thể.
Ví dụ: Bảng HOCSINH, bảng NHACSI, bảng SANPHAM.
Trường (Field / Column):
Là một cột trong bảng, thể hiện một thuộc
tính (đặc điểm) của đối tượng.
Ví dụ: Trong bảng HOCSINH, ta có các trường: MaHS, HoTen, NgaySinh.
Bản ghi (Record / Row):
Là một hàng trong bảng, chứa thông tin đầy đủ về
một đối tượng cụ thể.
Ví dụ: Hàng "HS001 - Nguyễn Văn An - 10/05/2007" là một bản ghi
trong bảng HOCSINH.
3. Khóa chính
& khóa ngoài
a) Khóa
Chính (Primary Key)
|
🧠
Câu hỏi: Trong danh sách lớp, làm sao để phân biệt 2 bạn trùng tên
"Nguyễn Văn An"? Dùng tên thì không ổn rồi! 🔑
Trả lời: Chúng ta dùng Mã học sinh! Mỗi học sinh có một mã duy
nhất, không bao giờ trùng lặp. |
Khóa chính là một (hoặc nhiều) trường dùng để xác định duy nhất một bản ghi
(một hàng) trong bảng.
Chú ý: Giá trị của khóa chính là DUY NHẤT và KHÔNG ĐƯỢC ĐỂ TRỐNG
(NULL).
Ví dụ: MaHS trong bảng HOCSINH, MaSach trong bảng SACH, Số CCCD trong bảng
CONGDAN.
b) Khóa
Ngoài (Foreign Key)
|
🧠
Câu hỏi: Nhìn vào bảng DIEM chỉ có MaMon và DiemSo, làm sao biết điểm
này là của học sinh nào? 🔗
Trả lời: Chúng ta cần thêm trường MaHS vào bảng DIEM. Trường MaHS này
chính là Khóa ngoài. |
Khóa ngoài là một trường trong một bảng, mà giá trị của nó chính là khóa chính
của một bảng khác. Nó tạo ra mối liên kết giữa hai bảng.
Ví dụ: Trong bảng DIEM, MaHS là khóa ngoài, liên kết đến khóa chính MaHS của bảng
HOCSINH. Tương tự, MaMon là khóa ngoài liên kết đến bảng MONHOC.
c) Ví dụ
trực quan:
Bảng HOCSINH (Khóa chính: MaHS)
|
MaHS |
HoTen |
|
HS001 |
Nguyễn Văn An |
|
HS002 |
Trần Thị Bình |
Bảng DIEM (Khóa ngoài: MaHS)
|
MaDiem |
MaHS |
MonHoc |
Diem |
|
D01 |
HS001 |
Toán |
8.5 |
|
D02 |
HS002 |
Lý |
9.3 |
|
D03 |
HS003 |
Hóa |
7.8 |
Khi nhìn vào dòng D03 của bảng DIEM, ta thấy
MaHS là "HS001". Ta dùng mã này "tra cứu" ngược lại bảng
HOCSINH và biết ngay điểm 8.5 môn Hóa là của bạn "Nguyễn Văn An".
Phép "tra cứu" này được gọi là liên kết (join).
4. Bài tập
vận dụng
Hãy cùng phân tích CSDL của một thư viện đơn giản
nhé!
Bảng DOCGIA
|
MaDocGia |
HoTenDocGia |
DiaChi |
|
DG01 |
Lê Minh |
Hà Nội |
|
DG02 |
Mai Anh |
TP. HCM |
Bảng SACH
|
MaSach |
TenSach |
TacGia |
|
S001 |
Lão Hạc |
Nam Cao |
|
S002 |
Dế Mèn |
Tô Hoài |
Bảng MUONSACH
|
MaPhieu |
MaSach |
MaDocGia |
NgayMuon |
|
PM01 |
S002 |
DG01 |
15/10/2023 |
|
PM02 |
S001 |
DG02 |
16/10/2023 |
|
PM03 |
S001 |
DG01 |
18/10/2023 |
Câu hỏi:
- Xác định khóa
chính cho mỗi bảng trên.
- Trong bảng
MUONSACH, trường nào là khóa ngoài? Chúng liên kết tới các bảng
nào?
- Dựa vào dữ liệu,
hãy cho biết: Bạn "Lê Minh" đã mượn những quyển sách nào?
Đáp án gợi ý
1. Khóa chính: Bảng DOCGIA -> MaDocGia. Bảng SACH ->
MaSach. Bảng MUONSACH -> MaPhieu.
2. Khóa ngoài trong bảng MUONSACH là:
- MaSach (liên
kết đến khóa chính của bảng SACH).
- MaDocGia
(liên kết đến khóa chính của bảng DOCGIA).
3. Chi tiết quá trình thực hiện như sau:
Tìm "Lê Minh" trong bảng DOCGIA, thấy
mã là DG01.
Tìm các dòng có MaDocGia là DG01 trong bảng
MUONSACH, ta thấy có PM01 và PM03.
Tra cứu MaSach tương ứng (S002, S001) qua bảng
SACH, ta biết bạn Lê Minh đã mượn sách "Dế Mèn..." và "Lão Hạc".