tritue.edu.vn


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

1. Bảng Hocsinh (ho_ten, so_CCCD, so_the_hocsinh, ngay_sinh, dia_chi)

Khóa chính đề xuất

  • 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

Khóa khác có thể dùng (unique)

  • 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

 

2. Bảng Monhoc (ten_mon, ma_mon)

Khóa chính: ma_mon

 


3. Bảng Diem (so_the_hocsinh, ma_mon, nam, hoc_ki, loai_diem, diem)

- Đề 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.

Khóa ngoài

  • 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

VẬN DỤNG

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 đó.

TRẢ LỜI

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ể




Link chia sẻ bài viết
Copy
            https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qUTFMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D         

Bài viết liên quan