Bài 13: Cơ sở dữ liệu quan hệ – Tin học 11 | Lý thuyết

Mô tả liên kết dữ liệu ba bảng (Ảnh Sách KNTT)

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).
CSDL âm nhạc gồm 4 bảng: Nhạc sĩ, Ca sĩ, Bản nhạc, Bản thu âm (Ảnh Sách KNTT)
CSDL âm nhạc gồm 4 bảng: Nhạc sĩ, Ca sĩ, Bản nhạc, Bản thu âm (Ảnh Sách KNTT)

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.

Quan hệ giữa các bảng trong CSDL âm nhạc (Ảnh Sách KNTT)
Quan hệ giữa các bảng trong CSDL âm nhạc (Ảnh Sách KNTT)

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à AidTenNS. 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, AidTenBN.

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 MidSid 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).

Mô tả liên kết dữ liệu hai bảng Nhạc sĩ và Bản nhạc (Ảnh Sách KNTT)
Mô tả liên kết dữ liệu hai bảng Nhạc sĩ và Bản nhạc (Ảnh Sách KNTT)

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.

Mô tả liên kết dữ liệu ba bảng (Ảnh Sách KNTT)
Mô tả liên kết dữ liệu ba bảng (Ảnh Sách KNTT)

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ì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:

Bảng 13.1 – Bảng điểm thi tiếng Anh (Ảnh Sách KNTT)
Bảng 13.1 – Bảng điểm thi tiếng Anh (Ảnh Sách KNTT)
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

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