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ần | Mô tả | Ví dụ |
|---|---|---|
| Tên gọi | Dãy ký tự gợi nhớ | GioiTinh, MaSV |
| Kiểu dữ liệu | Số, 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ệRcó 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ặcR.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ặct.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 RVí 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:
- K là siêu khóa
- 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à SKThê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} và {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) và S(V), với K₁ ⊆ U là khóa chính của R và K₂ ⊆ V.
K₂ là khóa ngoại của S tham chiếu đến khóa chính K₁ của R khi:
K₁vàK₂có cùng số thuộc tính và ngữ nghĩa tương đồng- Tồn tại mối quan hệ 1-n giữa R và S trên
K₁vàK₂ ∀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.MaLopMinh họa dữ liệu:
SINHVIEN:
SV01 → HTTT2020 ✓ (tồn tại trong LOP)
SV02 → CNPM2020 ✓
SV03 → KHMT2020 ✓
LOP:
HTTT2020, CNPM2020, KHMT2020, KTMT20202.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 đồ CSDL là tậ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ưng | Giải thích |
|---|---|
| Mỗi quan hệ có tên duy nhất | Không có hai bảng cùng tên trong một CSDL |
| Mỗi thuộc tính có tên khác nhau | Trong cùng một quan hệ, không có hai cột trùng tên |
| Mỗi bộ là duy nhất | Không có hai dòng hoàn toàn giống nhau |
| Giá trị trong bộ là nguyên tố hoặc NULL | Khô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ọng | Tên cột đại diện cho miền giá trị |
| Thứ tự giá trị trong một bộ là quan trọng | Phả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:
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 NULLTrườ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ớiBướ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 dung | Ký hiệu |
|---|---|
| Lược đồ quan hệ bậc n | R(A₁, A₂, ..., Aₙ) |
| Tập thuộc tính của R | Rᵤ = {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 A | DOM(A) hoặc MGT(A) |
| Giá trị của A tại bộ t | t.A hoặc t[A] |
| Chiếu quan hệ R lên tập X | R[X] hoặc R.X |
| Chiếu bộ t lên tập X | t[X] hoặc t.X |