SAU BÀI HỌC NÀY, EM SẼ:
- Có được những kiến thức về các bảng dữ liệu, cấu trúc của chúng và các trường khóa trước khi bước vào tạo lập CSDL.
- Biết xác định bảng, trường dữ liệu, khóa chính và khóa ngoài trong một CSDL.
1. XEM XÉT BÀI TOÁN

Bài toán quản lí các bản thu âm nhạc.
📋 QUY ƯỚC:
- Nhạc sĩ sáng tác bản nhạc: tên một nhạc sĩ hay tên một nhóm nhạc sĩ sáng tác bản nhạc đó.
- Ca sĩ thể hiện bản nhạc: một ca sĩ hay một nhóm ca sĩ biểu diễn tác phẩm.
Bảng 18.1 – Ví dụ về một bản ghi chép các bản thu âm nhạc
| STT | Tên bản nhạc | Tên nhạc sĩ | Tên ca sĩ |
|---|---|---|---|
| 1 | Du kích Sông Thao | Đỗ Nhuận | Đoàn Tân |
| 2 | Trường ca Sông Lô | Văn Cao | Lê Dung |
| 3 | Tình ca | Hoàng Việt | Trần Khánh |
| 4 | Xa khơi | Nguyễn Tài Tuệ | Tân Nhàn |
| 5 | Việt Nam quê hương tôi | Đỗ Nhuận | Quốc Hương |
| 6 | Tiến về Hà Nội | Văn Cao | Đoàn Tân |
| 7 | Nhạc rừng | Hoàng Việt | Quốc Hương |
| 8 | Tiếng hát giữa rừng Pác Bó | Nguyễn Tài Tuệ | Lê Dung |
| 9 | Trường ca Sông Lô | Văn Cao | Trần Khánh |
| 10 | Tiến về Hà Nội | Văn Cao | Quốc Hương |
⚠️ VẤN ĐỀ:
Một bản nhạc có thể có nhiều bản thu âm khác nhau do những ca sĩ khác nhau thể hiện. Ví dụ: "Trường ca Sông Lô" xuất hiện ở dòng 2 và 9, do Lê Dung và Trần Khánh thể hiện. → Xuất hiện dữ liệu lặp.
2. XÁC ĐỊNH CẤU TRÚC BẢNG
Bảng BAN THU ÂM:
banthuam(idBanthuam, tenBannhac, tenNhacsi, tenCasi)📐 CẤU TRÚC:
banthuam
├── idBanthuam ← KHÓA CHÍNH
├── tenBannhac
├── tenNhacsi
└── tenCasi3. TỔ CHỨC LẠI BẢNG DỮ LIỆU
⚠️ Vấn đề dữ liệu lặp:
Một ca sĩ có thể thể hiện nhiều bản nhạc. Một nhạc sĩ có thể sáng tác nhiều bản nhạc. → Tên ca sĩ, nhạc sĩ bị lặp lại nhiều lần.
✅ CÁCH GIẢI QUYẾT: Tách thành các bảng riêng
- casi – lưu thông tin ca sĩ
- nhacsi – lưu thông tin nhạc sĩ
- bannhac – lưu thông tin bản nhạc
- banthuam – lưu thông tin bản thu âm
Bảng 18.2 – Bảng casi
| idCasi | tenCasi |
|---|---|
| 1 | Trần Khánh |
| 2 | Lê Dung |
| 3 | Tân Nhàn |
| 4 | Quốc Hương |
| 5 | Đoàn Tân |
Bảng 18.3 – Bảng banthuam (thay tenCasi bởi idCasi)
| idBanthuam | tenBannhac | tenNhacsi | idCasi |
|---|---|---|---|
| 1 | Du kích Sông Thao | Đỗ Nhuận | 5 |
| 2 | Trường ca Sông Lô | Văn Cao | 2 |
| 3 | Tình ca | Hoàng Việt | 1 |
| 4 | Xa khơi | Nguyễn Tài Tuệ | 3 |
| 5 | Việt Nam quê hương tôi | Đỗ Nhuận | 4 |
Bảng 18.4 – Bảng bannhac
| idBannhac | tenBannhac | tenNhacsi |
|---|---|---|
| 1 | Du kích Sông Thao | Đỗ Nhuận |
| 2 | Trường ca Sông Lô | Văn Cao |
| 3 | Tình ca | Hoàng Việt |
| 4 | Xa khơi | Nguyễn Tài Tuệ |
| 5 | Việt Nam quê hương tôi | Đỗ Nhuận |
| 6 | Tiến về Hà Nội | Văn Cao |
| 7 | Nhạc rừng | Hoàng Việt |
| 8 | Tiếng hát giữa rừng Pác Bó | Nguyễn Tài Tuệ |
Bảng 18.5 – Bảng banthuam (sau khi dùng idBannhac)
| idBanthuam | idBannhac | idCasi |
|---|---|---|
| 1 | 1 | 5 |
| 2 | 2 | 2 |
| 3 | 3 | 1 |
| 4 | 4 | 3 |
| 5 | 5 | 4 |
| 6 | 6 | 5 |
| 7 | 7 | 4 |
| 8 | 8 | 2 |
| 9 | 2 | 1 |
| 10 | 6 | 4 |
Bảng 18.6 – Bảng nhacsi
| idNhacsi | tenNhacsi |
|---|---|
| 1 | Đỗ Nhuận |
| 2 | Văn Cao |
| 3 | Hoàng Việt |
| 4 | Nguyễn Tài Tuệ |
Bảng 18.7 – Bảng bannhac (sau khi dùng idNhacsi)
| idBannhac | tenBannhac | idNhacsi |
|---|---|---|
| 1 | Du kích Sông Thao | 1 |
| 2 | Trường ca Sông Lô | 2 |
| 3 | Tình ca | 3 |
| 4 | Xa khơi | 4 |
| 5 | Việt Nam quê hương tôi | 1 |
| 6 | Tiến về Hà Nội | 2 |
| 7 | Nhạc rừng | 3 |
| 8 | Tiếng hát giữa rừng Pác Bó | 4 |
4. CÁC LOẠI KHÓA
🔑 KHÓA CHÍNH (Primary Key)
Mỗi bảng có một khóa chính. Khóa chính là trường dùng để phân biệt duy nhất mỗi bản ghi. Giá trị khóa chính không được trùng nhau.
- casi → idCasi
- nhacsi → idNhacsi
- bannhac → idBannhac
- banthuam → idBanthuam
🔗 KHÓA NGOÀI (Foreign Key)
Khóa ngoài là trường ở một bảng tham chiếu đến khóa chính của bảng khác.
- banthuam.idBannhac → bannhac.idBannhac
- banthuam.idCasi → casi.idCasi
- bannhac.idNhacsi → nhacsi.idNhacsi
HÌNH 18.2 – CẤU TRÚC CÁC BẢNG
idCasi (PK) | tenCasi
idBanthuam (PK)
idBannhac (FK) | idCasi (FK)
idBannhac (PK) | tenBannhac
idNhacsi (FK)
idNhacsi (PK) | tenNhacsi
🚫 KHÓA CẤM TRÙNG LẶP (Unique):
- Cặp (tenBannhac, idNhacsi) trong bảng bannhac không được trùng.
- Cặp (idBannhac, idCasi) trong bảng banthuam không được trùng.
5. VỀ CÁC KIỂU DỮ LIỆU CỦA CÁC TRƯỜNG
Trường khóa chính:
INT – kiểu số nguyên, phù hợp để lưu các mã số định danh.
AUTO_INCREMENT – tự động tăng giá trị khi thêm bản ghi mới, giúp tạo mã khóa chính duy nhất.
Kết hợp: INT AUTO_INCREMENT. Ví dụ: idCasi, idNhacsi, idBannhac, idBanthuam.
Các trường tên:
VARCHAR(255) – kiểu chuỗi kí tự có độ dài thay đổi, lưu được tối đa 255 kí tự.
Dùng cho dữ liệu dạng văn bản như tên ca sĩ, tên nhạc sĩ và tên bản nhạc; dung lượng phù hợp với độ dài thực tế của chuỗi.
Ví dụ: tenNhacsi, tenCasi, tenBannhac.
❓ CÂU HỎI / HOẠT ĐỘNG TRONG BÀI
❓ Câu 1. Hãy xác định các bảng dữ liệu, cấu trúc của chúng và các trường khóa cho CSDL của website âm nhạc.
✅ TRẢ LỜI
Có thể tổ chức thành 4 bảng:
- casi(idCasi, tenCasi) – Khóa chính: idCasi
- nhacsi(idNhacsi, tenNhacsi) – Khóa chính: idNhacsi
- bannhac(idBannhac, tenBannhac, idNhacsi) – Khóa chính: idBannhac, Khóa ngoài: idNhacsi
- banthuam(idBanthuam, idBannhac, idCasi) – Khóa chính: idBanthuam, Khóa ngoài: idBannhac, idCasi
📝 LUYỆN TẬP
❓ Câu 1. Muốn quản lí thêm ngày sinh của nhạc sĩ, ca sĩ. CSDL cần thay đổi như thế nào?
✅ TRẢ LỜI
Bổ sung trường ngaySinh vào bảng nhacsi và casi:
nhacsi(idNhacsi, tenNhacsi, ngaySinh)
casi(idCasi, tenCasi, ngaySinh)
❓ Câu 2. Muốn quản lí thêm nơi sinh (tỉnh/thành phố). CSDL cần thay đổi như thế nào?
✅ TRẢ LỜI
Thêm trường noiSinh:
nhacsi(idNhacsi, tenNhacsi, ngaySinh, noiSinh)
casi(idCasi, tenCasi, ngaySinh, noiSinh)
🔎 VẬN DỤNG
Thực hiện các bước phân tích để thiết lập mô hình dữ liệu cho bài toán quản lí danh sách phường/xã của các tỉnh thành phố.
💡 GỢI Ý:
tinhthanh(idTinh, tenTinh) – KCh: idTinh
phuongxa(idPhuongXa, tenPhuongXa, idTinh) – KCh: idPhuongXa, KN: idTinh
Một tỉnh/thành phố có nhiều phường/xã (quan hệ 1–N).
🧠 BẢNG HỌC NHANH – GHI NHỚ
| Bảng | Chức năng | Khóa chính |
|---|---|---|
| casi | Lưu thông tin ca sĩ | idCasi |
| nhacsi | Lưu thông tin nhạc sĩ | idNhacsi |
| bannhac | Lưu thông tin bản nhạc | idBannhac |
| banthuam | Lưu thông tin bản thu âm | idBanthuam |
🧠 Khóa chính → xác định bản ghi | Khóa ngoài → nối các bảng | Unique → chống trùng | INT → mã số | VARCHAR(255) → tên | AUTO_INCREMENT → tự động tăng
🔑 SƠ ĐỒ NHỚ TOÀN BÀI
BÀI KIỂM TRA TIN HỌC THPT
Lựa chọn mức độ phù hợp với năng lực của em
📌 HƯỚNG DẪN
Em hãy lựa chọn mức độ phù hợp với yêu cầu của bài học. Sau khi chọn mức độ, bài kiểm tra trực tuyến sẽ được hiển thị ngay bên dưới.
💡 Mẹo: Hãy hoàn thành mức độ trước khi chuyển sang mức độ tiếp theo.
🌟 Mỗi câu hỏi là một cơ hội để em tiến bộ. Hãy tự tin, bình tĩnh và cố gắng hết mình!
Chúc em hoàn thành bài thật tốt!
