Bài 13. Cơ sở dữ liệu
LUYỆN TẬP
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 khoá chính và các khoá ngoài của từng bảng, có thể lấy số CCCD làm khoá chính được không.
TRẢ LỜI
so_the_hocsinh — khóa chính tốt nhất: vì là mã nội bộ do nhà trường chủ động cấp, dùng kiểu int cho tốc độ tìm kiếm cao nhất
so_CCCD — UNIQUE (không phải PRIMARY KEY)
vì vẫn có thể dùng để tìm kiếm học sinh
nhưng không nên làm khóa chính vì số CCCD có kiểu text, tốc độc tìm kiếm không cao bằng int
Khóa chính: ma_mon
- Đề xuất 1: khóa chính (gồm nhiều trường): (so_the_hocsinh, ma_mon, nam, hoc_ki, loai_diem)
Ý nghĩa:
Một học sinh
Cho một môn
Trong một năm học
Trong một học kỳ
Với một loại điểm (ĐĐG thường xuyên, giữa kỳ, cuối kỳ)
⇒ chỉ có một bản ghi duy nhất.
so_the_hocsinh → tham chiếu đến Hocsinh.so_the_hocsinh
ma_mon → tham chiếu đến Monhoc.ma_mon
FOREIGN KEY (so_the_hocsinh) REFERENCES Hocsinh(so_the_hocsinh)
FOREIGN KEY (ma_mon) REFERENCES Monhoc(ma_mon)
- Đề xuất 2: thêm cột id kiểu bigint làm khóa chính => giải pháp này cho tốc độ tìm kiếm nhanh nhất
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 khoá chính và khoá ngoài cho các bảng đó.
BẢNG THISINH
| Thuộc tính | Vai trò |
|---|---|
| so_bao_danh | PRIMARY KEY |
| ho_ten | |
| ngay_sinh | |
| noi_sinh | |
| truong_thpt |
BẢNG MONTHI
| Thuộc tính | Vai trò |
|---|---|
| ma_mon | PRIMARY KEY |
| ten_mon |
BẢNG DANGKIDUTHI
| Thuộc tính | Vai trò |
|---|---|
| so_bao_danh | FOREIGN KEY → THISINH(so_bao_danh) |
| ma_mon | FOREIGN KEY → MONTHI(ma_mon) |
| nam | |
khóa chính: (so_bao_danh, ma_mon, nam)
BẢNG PHONGTHI
| Thuộc tính | Vai trò |
|---|---|
| ma_phong | PRIMARY KEY |
| dia_diem | |
| suc_chua |
BẢNG SAPXEPDUTHI
| Thuộc tính | Vai trò |
|---|---|
| so_bao_danh | FOREIGN KEY → THISINH(so_bao_danh) |
| ma_phong | FOREIGN KEY → PHONGTHI(ma_phong) |
| ma_mon | FOREIGN KEY → MONTHI(ma_mon) |
Khóa chính: (so_bao_danh, ma_mon)
BẢNG DIEMTHI
| Thuộc tính | Vai trò |
|---|---|
| so_bao_danh | FOREIGN KEY → THISINH(so_bao_danh) |
| ma_mon | FOREIGN KEY → MONTHI(ma_mon) |
| nam | |
| diem | |
Khóa chính: (so_bao_danh, ma_mon, nam)
Sơ đồ liên kết thực thể

https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qUTFMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D