Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
I. Lý thuyết trọng tâm
1. Khái niệm cơ sở dữ liệu quan hệ
Từ những năm 1970, Edgar Frank Codd (1923 – 2003) đã đề xuất một cách tổ chức dữ liệu mới dựa trên các bảng có quan hệ với nhau. Mô hình này nhanh chóng trở thành mô hình phổ biến nhất, xuất hiện trong hầu hết các ứng dụng quản lí, bao gồm cả thư điện tử và mạng xã hội.
Để hiểu rõ mô hình này, ta xét ví dụ một CSDL âm nhạc trên website gồm bốn bảng:
- Bảng Nhạc sĩ (Hình 13.1a): gồm hai cột – mã định danh (Aid) và tên nhạc sĩ (TenNS).
- Bảng Ca sĩ (Hình 13.1b): gồm hai cột – mã định danh (Sid) và tên ca sĩ (TenCS).
- Bảng Bản nhạc (Hình 13.1c): gồm ba cột – mã bản nhạc (Mid), mã nhạc sĩ sáng tác (Aid) và tên bản nhạc (TenBN).
- Bảng Bản thu âm (Hình 13.1d): gồm hai cột – mã bản nhạc (Mid) và mã ca sĩ thể hiện (Sid).

Các bảng này có quan hệ với nhau thông qua các thuộc tính chung: bảng Bản nhạc và bảng Nhạc sĩ có chung thuộc tính Aid, bảng Bản thu âm và bảng Bản nhạc có chung thuộc tính Mid, bảng Bản thu âm và bảng Ca sĩ có chung thuộc tính Sid.

Mỗi bảng lưu trữ dữ liệu của các đối tượng có các thuộc tính (đặc tính xác định đối tượng) giống nhau, mỗi đối tượng chiếm một hàng, dữ liệu của mỗi thuộc tính được ghi trong một cột. Cách tổ chức dữ liệu thành các bảng như vậy, trong đó các bảng có thể có quan hệ với nhau, được gọi là mô hình dữ liệu quan hệ.
Cơ sở dữ liệu quan hệ (CSDL quan hệ) là cơ sở dữ liệu lưu trữ dữ liệu dưới dạng các bảng có quan hệ với nhau.
Lí do tổ chức thành nhiều bảng thay vì một bảng duy nhất:
Nếu chỉ lập một bảng gộp tất cả thông tin (ví dụ bảng NBC gồm tên ca sĩ, tên nhạc sĩ, tên bản nhạc), dữ liệu tên nhạc sĩ và tên ca sĩ sẽ lặp lại nhiều lần, gây dư thừa dung lượng lưu trữ và dễ mắc lỗi mất tính nhất quán (ví dụ cùng một tên nhưng ghi khác nhau ở các dòng). Khi cần sửa đổi tên một ca sĩ hay nhạc sĩ, phải rà soát sửa ở rất nhiều dòng.
Ngược lại, nếu tách thành nhiều bảng như CSDL âm nhạc ở Hình 13.1, mỗi lần thay đổi tên chỉ cần sửa tại đúng một bảng. Khi cần thông tin đầy đủ, ta thực hiện liên kết dữ liệu giữa các bảng thông qua các thuộc tính chung.
2. Một số thuật ngữ, khái niệm liên quan
a) Bản ghi và trường
Về mặt cấu trúc, CSDL quan hệ tổ chức lưu trữ dữ liệu dưới dạng các bảng gồm các hàng và cột:
- Bản ghi (record): Mỗi hàng của bảng là một bản ghi, chứa tập hợp các thông tin về một đối tượng cụ thể được quản lí trong bảng. Nói cách khác, mỗi bản ghi chép dữ liệu cho một đối tượng, gồm một bộ giá trị ghi trong các trường tương ứng với các thuộc tính.
- Trường (field): Mỗi cột trong bảng là một trường, thể hiện một thuộc tính của đối tượng được quản lí.
Ví dụ: Bảng Nhạc sĩ có hai trường dữ liệu là Aid và TenNS. Bảng này có bốn bản ghi: (1, Đỗ Nhuận), (2, Văn Cao), (3, Hoàng Việt), (4, Nguyễn Tài Tuệ). Bảng Bản nhạc có ba trường (cột): Mid, Aid và TenBN.
Nhờ sự nhất quán về cấu trúc này, việc thực hiện các thao tác dữ liệu như cập nhật, truy xuất sẽ thuận lợi hơn nhiều.
b) Khóa chính
Mỗi bảng có thể có một hay một nhóm trường mà giá trị của chúng tại các bản ghi không bao giờ trùng nhau, giúp xác định duy nhất mỗi bản ghi. Trường hay nhóm trường đó được gọi là khóa của bảng. Nói cách khác, khóa là bộ giá trị cho phép phân biệt các bản ghi trong bảng.
Một bảng có thể có nhiều khóa. Người ta chọn một khóa trong số đó làm khóa chính (primary key). Thông thường, khóa chính được chọn là khóa bao gồm ít trường nhất, vì khóa chính có vai trò quan trọng trong việc xác định duy nhất bản ghi, thường xuyên được dùng khi sắp xếp và truy xuất dữ liệu.
Ví dụ trong CSDL âm nhạc:
- Bảng Nhạc sĩ: trường Aid có giá trị phân biệt tại mỗi bản ghi → Aid là khóa chính.
- Bảng Ca sĩ: trường Sid là khóa chính.
- Bảng Bản nhạc: có nhiều khóa – nhóm (Mid, Aid, TenBN), nhóm (Aid, TenBN), trường Mid đơn lẻ. Chọn Mid làm khóa chính vì chỉ gồm một trường duy nhất.
c) Khóa ngoài
Mỗi bảng (A) có thể có trường hay nhóm trường (k) đóng vai trò làm khóa chính ở một bảng khác (B). Khi đó, k được gọi là khóa ngoài (foreign key) của bảng A. Hai bảng A và B được gọi là có quan hệ với nhau qua khóa ngoài k của bảng A.
Ví dụ:
- Trường Aid trong bảng Bản nhạc là khóa ngoài, vì Aid là khóa chính ở bảng Nhạc sĩ.
- Trường Mid và Sid trong bảng Bản thu âm là các khóa ngoài, vì Mid là khóa chính ở bảng Bản nhạc và Sid là khóa chính ở bảng Ca sĩ.
d) Liên kết dữ liệu
Có thể dùng khóa ngoài của bảng để thực hiện ghép nối dữ liệu hai bảng với nhau. Việc ghép nối như thế được gọi là liên kết dữ liệu theo khóa (join).

Ví dụ: Liên kết bảng Bản nhạc với bảng Nhạc sĩ theo trường Aid sẽ cho ra bảng NB gồm các cột Mid, Aid, TenNS, TenBN – qua đó biết được tên nhạc sĩ sáng tác mỗi bản nhạc.
Tương tự, nếu liên kết bảng Bản thu âm với bảng Ca sĩ theo khóa Sid, rồi liên kết kết quả với bảng NB theo khóa Mid, ta sẽ có bảng NBC chứa đầy đủ thông tin: tên ca sĩ, tên nhạc sĩ, tên bản nhạc cho mỗi bản thu âm.

e) Các trường và dữ liệu
Mỗi trường trong bảng cần được xác định rõ sẽ lưu trữ dữ liệu thuộc kiểu gì và phạm vi lưu trữ ra sao. Những thông tin này được gọi là kiểu dữ liệu của trường.
Xét ví dụ bảng điểm thi tiếng Anh (Bảng 13.1) với tên bảng là bangdiem và các trường: sbd, hoten, gt, ngaysinh, diem, makithi:

| Trường | Kiểu dữ liệu | Giải thích |
|---|---|---|
| sbd | Số nguyên | Các giá trị là số nguyên |
| hoten | Xâu kí tự (tối đa 64 kí tự) | Tên người có độ dài giới hạn |
| gt | Logic (đúng/sai) | Chỉ hai giá trị: Nam hoặc Nữ, tương ứng đúng (1) hoặc sai (0) |
| ngaysinh | Ngày tháng | Giá trị dạng ngày/tháng/năm |
| diem | Số thập phân (tối đa 5 chữ số, 2 chữ số sau dấu phẩy) | Điểm thi là số thập phân |
| makithi | Xâu kí tự (độ dài cố định 5 kí tự) | Mã kì thi có độ dài cố định |
Việc xác định kiểu dữ liệu cho các trường có hai mục đích quan trọng:
- Hạn chế lãng phí dung lượng lưu trữ: Chỉ cấp phát đúng lượng bộ nhớ cần thiết cho mỗi trường.
- Kiểm soát tính đúng đắn về logic của dữ liệu: Ví dụ không thể nhập kí tự chữ vào trường sbd (kiểu số nguyên), không thể nhập giá trị số vào trường ngaysinh (kiểu ngày tháng).
II. Phương pháp giải các dạng bài tập
Dạng 1: Xác định khóa chính và khóa ngoài trong CSDL quan hệ
Phương pháp:
Bước 1 – Xác định khóa chính: Với mỗi bảng, tìm trường hoặc nhóm trường ít nhất mà giá trị của chúng luôn duy nhất (không trùng nhau) tại mỗi bản ghi, giúp phân biệt được tất cả bản ghi trong bảng. Đó chính là khóa chính. Lưu ý ưu tiên chọn khóa có ít trường nhất.
Bước 2 – Xác định khóa ngoài: Với mỗi bảng, kiểm tra xem có trường nào đóng vai trò khóa chính ở một bảng khác không. Nếu có, trường đó là khóa ngoài của bảng đang xét.
Lưu ý: Số CCCD không nên chọn làm khóa chính cho bảng học sinh vì không phải mọi học sinh đều đã có số CCCD (học sinh dưới 14 tuổi chưa có CCCD).
Bài 1 (Luyện tập SGK). Cho CSDL học tập có các bảng sau:
- 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ỉ các loại: ĐĐG thường xuyên, ĐĐG giữa kì, ĐĐG cuối kì.
Hãy xác định các khóa chính và các khóa ngoài của từng bảng, có thể lấy số CCCD làm khóa chính được không?
Lời giải:
Bảng Hocsinh:
- Khóa chính: số thẻ học sinh – vì mỗi học sinh có một số thẻ duy nhất, giá trị không trùng nhau.
- Không thể lấy số CCCD làm khóa chính vì không phải học sinh nào cũng đã được cấp số CCCD (học sinh chưa đủ 14 tuổi chưa có CCCD), do đó trường này có thể bị trống ở một số bản ghi.
- Khóa ngoài: không có.
Bảng monhoc:
- Khóa chính: mã môn – vì mỗi môn học có một mã duy nhất.
- Khóa ngoài: không có.
Bảng Diem:
- Khóa chính: nhóm trường (số thẻ học sinh, mã môn, năm, học kì, loại điểm) – vì cần kết hợp tất cả các trường này mới xác định duy nhất một bản ghi điểm (cùng một học sinh, cùng môn, cùng năm, cùng học kì có thể có nhiều loại điểm khác nhau).
- Khóa ngoài:
- Số thẻ học sinh → là khóa chính ở bảng Hocsinh.
- Mã môn → là khóa chính ở bảng monhoc.
Dạng 2: Đề xuất thiết kế bảng dữ liệu cho bài toán thực tế
Phương pháp:
Bước 1 – Xác định các đối tượng cần quản lí: Từ đề bài, liệt kê các nhóm đối tượng cần lưu trữ thông tin (mỗi nhóm sẽ tương ứng với một bảng).
Bước 2 – Xác định các thuộc tính (trường) của mỗi bảng: Liệt kê các thông tin cần lưu cho mỗi đối tượng. Đảm bảo mỗi bảng có ít nhất một trường có thể dùng làm khóa chính.
Bước 3 – Xác định khóa chính và khóa ngoài: Chọn khóa chính cho mỗi bảng, sau đó xác định các khóa ngoài tạo liên kết giữa các bảng.
Bài 2 (Vận dụng SGK). Trong kì thi tốt nghiệp trung học phổ thông, 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. Em hãy đề xuất một số bảng dữ liệu và các trường làm khóa chính và khóa ngoài cho các bảng đó.
Lời giải:
Đề xuất ba bảng dữ liệu:
Bảng ThiSinh (thông tin thí sinh):
| Trường | Mô tả | Vai trò |
|---|---|---|
| SBD | Số báo danh | Khóa chính |
| HoTen | Họ và tên | |
| NgaySinh | Ngày sinh | |
| MaPhong | Mã phòng thi | Khóa ngoài → bảng PhongThi |
Bảng PhongThi (thông tin phòng thi):
| Trường | Mô tả | Vai trò |
|---|---|---|
| MaPhong | Mã phòng thi | Khóa chính |
| DiaDiem | Địa điểm phòng thi |
Bảng DiemThi (kết quả thi):
| Trường | Mô tả | Vai trò |
|---|---|---|
| SBD | Số báo danh | Khóa ngoài → bảng ThiSinh |
| MonThi | Tên hoặc mã môn thi | |
| Diem | Điểm thi |
Khóa chính của bảng DiemThi là nhóm (SBD, MonThi) vì mỗi thí sinh thi mỗi môn chỉ có một điểm duy nhất.
Bài (Phiếu học tập – NV1). Hãy chỉ ra các cột của bảng Bản nhạc. Bảng Bản thu âm và bảng Ca sĩ có chung thuộc tính nào?
Lời giải:
- Bảng Bản nhạc có ba cột (trường): Mid (mã bản nhạc), Aid (mã nhạc sĩ sáng tác) và TenBN (tên bản nhạc).
- Bảng Bản thu âm và bảng Ca sĩ có chung thuộc tính Sid (mã ca sĩ). Đây chính là khóa ngoài của bảng Bản thu âm, liên kết với khóa chính Sid của bảng Ca sĩ.
III. Sơ đồ tư duy
CƠ SỞ DỮ LIỆU QUAN HỆ
│
├── 1. KHÁI NIỆM
│ ├── Mô hình dữ liệu quan hệ
│ │ ├── Tổ chức dữ liệu thành các bảng
│ │ ├── Các đối tượng cùng loại → cùng bảng
│ │ └── Các bảng có quan hệ qua thuộc tính chung
│ │
│ ├── CSDL quan hệ
│ │ └── CSDL lưu trữ dưới dạng các bảng
│ │ có quan hệ với nhau
│ │
│ └── Lí do tách nhiều bảng
│ ├── Tránh dư thừa dữ liệu
│ ├── Giảm lỗi mất nhất quán
│ └── Dễ cập nhật, sửa đổi
│
├── 2. BẢN GHI & TRƯỜNG
│ ├── Bản ghi (record)
│ │ └── = 1 hàng = thông tin 1 đối tượng
│ │
│ └── Trường (field)
│ └── = 1 cột = 1 thuộc tính của đối tượng
│
├── 3. KHÓA CHÍNH (Primary Key)
│ ├── Khóa: trường/nhóm trường có giá trị
│ │ không trùng nhau → phân biệt bản ghi
│ ├── Một bảng có thể có nhiều khóa
│ ├── Chọn 1 khóa → khóa chính
│ │ (ưu tiên ít trường nhất)
│ └── VD: Aid (bảng Nhạc sĩ), Sid (bảng Ca sĩ),
│ Mid (bảng Bản nhạc)
│
├── 4. KHÓA NGOÀI (Foreign Key)
│ ├── Trường/nhóm trường ở bảng A
│ │ là khóa chính ở bảng B
│ ├── Tạo quan hệ giữa hai bảng A và B
│ └── VD: Aid trong bảng Bản nhạc
│ (khóa chính ở bảng Nhạc sĩ)
│
├── 5. LIÊN KẾT DỮ LIỆU
│ ├── Dùng khóa ngoài ghép nối hai bảng
│ ├── = liên kết dữ liệu theo khóa (join)
│ └── VD: Bản nhạc + Nhạc sĩ theo Aid
│ → biết tên nhạc sĩ sáng tác
│
└── 6. CÁC TRƯỜNG VÀ DỮ LIỆU
├── Mỗi trường cần xác định kiểu dữ liệu
│ ├── Số nguyên (VD: sbd)
│ ├── Xâu kí tự (VD: hoten)
│ ├── Logic – đúng/sai (VD: giới tính)
│ ├── Ngày tháng (VD: ngaysinh)
│ └── Số thập phân (VD: diem)
│
└── Mục đích
├── Hạn chế lãng phí dung lượng lưu trữ
└── Kiểm soát tính đúng đắn logic dữ liệu

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa

