Chương 2: Mô Hình Dữ Liệu Quan Hệ

1. Giới thiệu

Mô hình Dữ liệu Quan hệ (Relational Data Model) được Edgar Frank Codd công bố năm 1970 trong bài báo “A Relational Model of Data for Large Shared Data Banks”. Đây là nền tảng lý thuyết cho hầu hết các hệ quản trị cơ sở dữ liệu thương mại hiện đại như MS SQL Server, MySQL, Oracle, DB2.

Ý tưởng cốt lõi: Dữ liệu được tổ chức dưới dạng các quan hệ (relation) — về mặt hình thức chính là các tập hợp các bộ giá trị (value tuples), có nền tảng chắc chắn từ lý thuyết tập hợp.


2. Các khái niệm trong Mô hình Dữ liệu Quan hệ

2.1. Thuộc tính (Attribute)

Thuộc tính mô tả đặc trưng, tính chất riêng biệt của đối tượng cần lưu trữ trong CSDL.

Mỗi thuộc tính gồm 3 thành phần:

Thành phầnMô tảVí dụ
Tên gọiDãy ký tự gợi nhớGioiTinh, MaSV
Kiểu dữ liệuSố, Chuỗi, Ngày tháng, Luận lý,…VARCHAR, INT, DATE
Miền giá trịTập giá trị mà thuộc tính có thể nhận, ký hiệu Dom(A)Dom(GioiTinh) = {'Nam', 'Nữ'}

2.2. Quan hệ (Relation)

Quan hệ là một tập hữu hạn các thuộc tính, kèm theo một tân từ để xác định mối quan hệ giữa các thuộc tính.

  • Ký hiệu: R(A₁, A₂, ..., Aₙ) — quan hệ R có n thuộc tính
  • Rᵤ = {A₁, A₂, ..., Aₙ} — tập thuộc tính của R

Về mặt trực quan, quan hệ chính là một bảng (table), trong đó:

  • Các cột là các thuộc tính
  • Các dòng là các bộ giá trị

Ví dụ:

SINHVIEN(MaSV, HoTen, GioiTinh, NgaySinh, NoiSinh, MaLop)
LOP(MaLop, TenLop, SiSo, LopTruong, Khoa)

2.3. Bộ giá trị (Tuple)

Một bộ là tập hợp thông tin của một đối tượng cụ thể trong quan hệ, còn gọi là mẫu tin (record) hay dòng (row).

Cho quan hệ R(A₁, A₂, ..., Aₙ), một bộ là:

r = (a₁, a₂, ..., aₙ)   với ∀aᵢ ∈ DOM(Aᵢ)

Ví dụ:

r = (SV03, Phạm Tiến Dũng, Nam, Cần Thơ, KHMT2020)

Đây là bộ thứ 3 trong quan hệ SINHVIEN — chứa đầy đủ thông tin của sinh viên Phạm Tiến Dũng.


2.4. Thể hiện của quan hệ

Thể hiện (instance) của quan hệ là tập hợp tất cả các bộ giá trị có trong quan hệ tại một thời điểm cụ thể.

  • Ký hiệu: Tᴿ

2.5. Tân từ (Predicate)

Tân từ là một quy tắc ngôn ngữ tự nhiên dùng để mô tả ý nghĩa và mối liên hệ giữa các thuộc tính trong một quan hệ. Nó làm rõ ngữ nghĩa của quan hệ đó.

Ví dụ 1:

SINHVIEN(MaSV, HoTen, GioiTinh, NoiSinh, MaLop)

Tân từ: Mỗi sinh viên có mã sinh viên duy nhất (MaSV) để phân biệt với các sinh viên khác, có họ tên (HoTen), giới tính (GioiTinh), nơi sinh (NoiSinh) và thuộc về một lớp (MaLop).

Ví dụ 2:

THI(MaSV, MaMH, LanThi, Diem)

Tân từ: Mỗi sinh viên được phép thi một môn học nhiều lần, mỗi lần thi lưu trữ thông tin sinh viên nào (MaSV) thi môn gì (MaMH), lần thi thứ mấy (LanThi), và điểm đạt được (Diem).


2.6. Phép chiếu (Projection)

Phép chiếu dùng để trích xuất giá trị của một số thuộc tính từ một quan hệ hoặc từ một bộ cụ thể.

Chiếu của quan hệ lên tập thuộc tính

  • Ký hiệu: R[X] hoặc R.X — chiếu quan hệ R lên tập thuộc tính X
  • Kết quả là tập hợp các giá trị (hoặc bộ giá trị con), loại bỏ trùng lặp.

Ví dụ — chiếu 1 thuộc tính:

SINHVIEN[NoiSinh] = {'Tp.HCM', 'Lâm Đồng', 'Cần Thơ'}

Ví dụ — chiếu 2 thuộc tính:

SINHVIEN[HoTen, NoiSinh] = {
    ('Nguyễn Văn An',  'Tp.HCM'),
    ('Trần Ngọc Minh', 'Lâm Đồng'),
    ('Phạm Tiến Dũng', 'Cần Thơ')
}

Chiếu của bộ lên tập thuộc tính

  • Ký hiệu: t[X] hoặc t.X — chiếu bộ t lên tập thuộc tính X
  • Kết quả là giá trị cụ thể của bộ đó tại các thuộc tính chỉ định.

Câu hỏi từ slide — Hãy tính:


2.7. Khóa (Key)

Khóa là khái niệm trung tâm để xác định tính duy nhất của các bộ trong quan hệ. Có các loại khóa sau:

2.7.1. Siêu khóa (Super Key)

Siêu khóa SK là một tập con các thuộc tính của quan hệ R mà giá trị của chúng có thể phân biệt hai bộ bất kỳ khác nhau trong mọi thể hiện.

∀t₁, t₂ ∈ Tᴿ: t₁[SK] ≠ t₂[SK]  ⟺  SK là siêu khóa của R

Ví dụ — Quan hệ SINHVIEN(MaSV, HoTen, GioiTinh, NoiSinh, MaLop, CMND):

Các siêu khóa hợp lệ:
  {MaSV}
  {CMND}
  {MaSV, HoTen}
  {MaSV, HoTen, NoiSinh}
  {MaSV, HoTen, MaLop}
  ... (rất nhiều)

2.7.2. Khóa (Key)

Khóa K là một siêu khóa tối tiểu — tức là không thể bỏ bớt bất kỳ thuộc tính nào mà vẫn còn là siêu khóa.

Điều kiện:

  1. K là siêu khóa
  2. Không tồn tại K' ⊂ K, K' ≠ ∅ sao cho K’ cũng là siêu khóa

Các thuộc tính nằm trong khóa gọi là thuộc tính khóa, còn lại là thuộc tính không khóa.

Ví dụ:

Siêu khóa: {MaSV}, {CMND}, {MaSV, HoTen}, ...
           ↓ loại bỏ dư thừa
Khóa:      {MaSV}, {CMND}
  → {MaSV, HoTen} không phải khóa vì {MaSV} ⊂ {MaSV, HoTen} đã là SK

Thêm ví dụ:

LOP(MaLop, TenLop, MaKhoa, KhoaHoc, SiSo)
→ Khóa: {MaLop}

THI(MaSV, MaMH, LanThi, Diem)
→ Khóa: {MaSV, MaMH, LanThi}
  (vì một SV có thể thi nhiều lần, nhiều môn → cần cả 3 để xác định duy nhất)

2.7.3. Khóa chính (Primary Key)

Khi quan hệ có nhiều hơn một khóa, ta chọn một làm khóa chính.

  • Ký hiệu: gạch dưới các thuộc tính tạo thành khóa chính
SINHVIEN(MaSV, HoTen, GioiTinh, NoiSinh, MaLop, CMND)
LOP(MaLop, TenLop, MaKhoa, KhoaHoc, SiSo)
THI(MaSV, MaMH, LanThi, Diem)

(MaSV, MaLop, và {MaSV, MaMH, LanThi} là khóa chính tương ứng)

2.7.4. Khóa tương đương (Alternate Key)

Là các khóa không được chọn làm khóa chính.

Ví dụ: SINHVIEN có 2 khóa {MaSV}{CMND}.

  • Khóa chính: {MaSV}
  • Khóa tương đương: {CMND}

2.7.5. Khóa ngoại (Foreign Key)

Cho hai quan hệ R(U)S(V), với K₁ ⊆ U là khóa chính của R và K₂ ⊆ V.

K₂khóa ngoại của S tham chiếu đến khóa chính K₁ của R khi:

  1. K₁K₂ có cùng số thuộc tính và ngữ nghĩa tương đồng
  2. Tồn tại mối quan hệ 1-n giữa R và S trên K₁K₂
  3. ∀s ∈ S, ∃r ∈ R: r.K₁ = s.K₂ — mọi giá trị K₂ trong S phải có tương ứng trong R

Ví dụ:

SINHVIEN(MaSV, HoTen, GioiTinh, NoiSinh, MaLop)
LOP(MaLop, TenLop, MaKhoa, KhoaHoc, SiSo)
LOP.MaLop       ← khóa chính
SINHVIEN.MaLop  ← khóa ngoại, tham chiếu đến LOP.MaLop

Minh họa dữ liệu:

SINHVIEN:
  SV01 → HTTT2020   ✓ (tồn tại trong LOP)
  SV02 → CNPM2020   ✓
  SV03 → KHMT2020   ✓

LOP:
  HTTT2020, CNPM2020, KHMT2020, KTMT2020

2.8. Lược đồ quan hệ (Relation Schema)

Lược đồ quan hệ mô tả cấu trúc của một quan hệ — tức là tập thuộc tính và mối liên hệ giữa chúng, cùng tân từ xác định ý nghĩa.

  • Ký hiệu: R(A₁, A₂, ..., Aₙ)

Ví dụ:

SINHVIEN(MaSV, HoTen, GioiTinh, NoiSinh, MaLop)

Tân từ: Mỗi sinh viên có mã sinh viên duy nhất (MaSV) để phân biệt
với các sinh viên khác, có họ tên (HoTen), giới tính (GioiTinh),
nơi sinh (NoiSinh) và thuộc về một lớp (MaLop).

2.9. Lược đồ CSDL (Database Schema)

Lược đồ CSDLtập hợp tất cả các lược đồ quan hệ và các mối liên hệ giữa chúng trong cùng một hệ thống.

Ví dụ — Lược đồ CSDL Quản lý điểm thi:

SINHVIEN(MASV, HO, TEN, NGSINH, GIOITINH, NOISINH, MALOP)
LOP(MALOP, TENLOP, TRGLOP, SISO, MAGVCN)
KHOA(MAKHOA, TENKHOA, NGTLAP, TRGKHOA)
MONHOC(MAMH, TENMH, TCLT, TCTH, MAKHOA)
DIEUKIEN(MAMH, MAMH_TRUOC)
GIANGVIEN(MAGV, HOGV, TENGV, HOCVI, HOCHAM, GIOITINH,
          NGSINH, NGVL, HESO, MUCLUONG, MAKHOA)
GIANGDAY(MALOP, MAMH, MAGV, HOCKY, NAM, TUNGAY, DENNGAY)
KETQUATHI(MASV, MAMH, LANTHI, NGTHI, DIEM, KQUA)

2.10. Các đặc trưng của Quan hệ

Đặc trưngGiải thích
Mỗi quan hệ có tên duy nhấtKhông có hai bảng cùng tên trong một CSDL
Mỗi thuộc tính có tên khác nhauTrong cùng một quan hệ, không có hai cột trùng tên
Mỗi bộ là duy nhấtKhông có hai dòng hoàn toàn giống nhau
Giá trị trong bộ là nguyên tố hoặc NULLKhông cho phép giá trị phức tạp (list, array,…)
Thứ tự các bộ không quan trọngĐảo hàng nào lên trước cũng không ảnh hưởng
Thứ tự thuộc tính không thực sự quan trọngTên cột đại diện cho miền giá trị
Thứ tự giá trị trong một bộ là quan trọngPhải tương ứng đúng với thứ tự thuộc tính

3. Ánh xạ từ mô hình ER sang mô hình Quan hệ

Khi đã có sơ đồ ER (Entity-Relationship Diagram), ta cần chuyển đổi thành lược đồ quan hệ theo 4 bước:

flowchart LR A[Bước 1\nÁnh xạ chuyên biệt hóa\ntổng quát hóa] --> B[Bước 2\nÁnh xạ loại\nthực thể] B --> C[Bước 3\nÁnh xạ các\nmối kết hợp] C --> D[Bước 4\nChuẩn hóa\ncác quan hệ]

Bước 1 — Ánh xạ chuyên biệt hóa / tổng quát hóa (IS-A)

Khi có quan hệ IS-A (thực thể cha - con), xử lý theo 3 trường hợp:

Trường hợp 1: Thực thể con không có thuộc tính riêng

Gom lên mức tổng quát, thêm thuộc tính Loai và ràng buộc toàn vẹn.

NHANVIEN(MaNV, HoTen, DiaChi, LoaiNV)
RBTV: DOM(LoaiNV) = {'Quản lý', 'Công nhân'}

Trường hợp 2: Thực thể con có ít thuộc tính riêng

Gom lên mức tổng quát, thêm Loai và các thuộc tính riêng, kèm ràng buộc.

NHANVIEN(MaNV, HoTen, DiaChi, LoaiNV, ChucVu, Bac)
RBTV: Nếu LoaiNV = 'Quản lý' thì ChucVu NOT NULL
      Nếu LoaiNV = 'Công nhân' thì Bac NOT NULL

Trường hợp 3: Thực thể con có nhiều thuộc tính riêng

Tách thành các quan hệ riêng biệt:

CONGNHAN(MaNV, HoTen, DiaChi, Bac)
QUANLY(MaNV, HoTen, DiaChi, HocHam, HocVi, ChucVu)

Bước 2 — Ánh xạ loại thực thể thành quan hệ

Mỗi loại thực thể trong ERD trở thành một quan hệ (bảng) riêng. Thuộc tính của thực thể thành cột, định danh thành khóa chính.

NHANVIEN(MaNV, HoTen, DiaChi)
PHONGBAN(MaPhong, TenPhong)

Bước 3 — Ánh xạ các mối kết hợp

Mối kết hợp 1-n

→ Lấy khóa chính của bên “1” làm khóa ngoại đặt vào bên “n”.

Thuộc: NHANVIEN (n) ←→ PHONGBAN (1)

Kết quả:
NHANVIEN(MaNV, HoTen, DiaChi, MaPhong)   ← thêm MaPhong làm FK
PHONGBAN(MaPhong, TenPhong)

Mối kết hợp n-n

→ Tạo quan hệ mới (bảng trung gian), khóa chính là tổ hợp khóa chính của hai bên, kèm các thuộc tính riêng của mối kết hợp.

NHANVIEN (n) ←ThamGia→ (n) DUAN   [thuộc tính: ThoiGian]

Kết quả:
NHANVIEN(MaNV, HoTen, DiaChi)
DUAN(MaDA, TenDA)
THAMGIA(MaNV, MaDA, ThoiGian)   ← bảng trung gian mới

Bước 4 — Chuẩn hóa các quan hệ

Sau khi ánh xạ xong, kiểm tra và chuẩn hóa để loại bỏ dư thừa dữ liệu. Kết quả cuối cùng:

NHANVIEN(MaNV, HoTen, DChi, LoaiNV, MaPhong)
PHONGBAN(MaPhong, TenPhong)
DUAN(MaDA, TenDA)
THAMGIA(MaNV, MaDA, ThoiGian)

4. Bảng tóm tắt ký hiệu

Nội dungKý hiệu
Lược đồ quan hệ bậc nR(A₁, A₂, ..., Aₙ)
Tập thuộc tính của RRᵤ = {A₁, A₂, ..., Aₙ}
Thể hiện của quan hệTᴿ
Bộ giá trịt = (a₁, a₂, ..., aₙ)
Miền giá trị của thuộc tính ADOM(A) hoặc MGT(A)
Giá trị của A tại bộ tt.A hoặc t[A]
Chiếu quan hệ R lên tập XR[X] hoặc R.X
Chiếu bộ t lên tập Xt[X] hoặc t.X