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ữ'} |
Lưu ý quan trọng
Trong mô hình quan hệ KHÔNG có các kiểu dữ liệu phức tạp như: tập hợp (set), danh sách (list), mảng (array), bản ghi (record). Mỗi giá trị phải là nguyên tố (atomic).
Giá trị NULL
Khi tại một thời điểm, một thuộc tính không có giá trị hoặc chưa xác định được, ta dùng giá trị đặc biệt là NULL.
MaSV | HoTen | GioiTinh | NoiSinh | MaLop
------|-----------------|----------|---------|----------
SV01 | Nguyễn Văn An | Nam | Tp.HCM | HTTT2020
SV02 | Trần Ngọc Minh | Nữ | NULL | CNPM2020
SV03 | Phạm Tiến Dũng | Nam | Cần Thơ | KHMT2020
NoiSinh = NULL.
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à:
Ví dụ:
Đâ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ᴿ
Giải thích
Quan hệ giống như một cái khuôn (lược đồ), còn thể hiện là dữ liệu thực tế đang có trong đó. Thể hiện thay đổi theo thời gian khi ta thêm/sửa/xóa dữ liệu.
T_SINHVIEN tại thời điểm hiện tại gồm 3 bộ SV01, SV02, SV03.
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:
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:
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).
Vì sao tân từ quan trọng?
Tên thuộc tính đôi khi chưa đủ rõ nghĩa. Tân từ giúp người đọc hiểu đúng quy tắc nghiệp vụ đằng sau dữ liệu — ví dụ, một sinh viên được thi lại nhiều lần, mỗi lần là một bộ riêng.
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:
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:
sv₁[HoTen] = ?
sv₂[HoTen, GioiTinh] = ?
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.
Nhận xét
Một quan hệ luôn có ít nhất một siêu khóa — đó là tập tất cả thuộc tính Rᵤ. Thực tế có thể có nhiều siêu khóa.
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)
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
Ràng buộc toàn vẹn tham chiếu
Điều kiện (3) chính là ràng buộc toàn vẹn tham chiếu (Referential Integrity): bạn không thể thêm một sinh viên với MaLop = 'XYZ' nếu lớp 'XYZ' chưa tồn tại trong bảng LOP.
Ví dụ:
Minh họa dữ liệu:
SINHVIEN:
SV01 → HTTT2020 ✓ (tồn tại trong LOP)
SV02 → CNPM2020 ✓
SV03 → KHMT2020 ✓
LOP:
HTTT2020, CNPM2020, KHMT2020, KTMT2020
Nếu vi phạm?
Nếu thêm SV04 → MaLop = 'CNTT9999' mà LOP không có CNTT9999 → vi phạm ràng buộc toàn vẹn tham chiếu, DBMS sẽ từ chối thao tác này.
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ₙ)
Phân biệt lược đồ và thể hiện
- Lược đồ (schema): cấu trúc bảng — ít thay đổi
- Thể hiện (instance): dữ liệu thực tế trong bảng — thay đổi liên tục
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 |
Thứ tự giá trị trong bộ
('SV01', 'Trần Ngọc Minh', 'Nữ', 'Lâm Đồng', 'CNPM2020')
≠
('SV01', 'Trần Ngọc Minh', 'Nữ', 'CNPM2020', 'Lâm Đồng')
NoiSinh và MaLop bị hoán đổi.
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.
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:
Chọn trường hợp nào?
- Ít thuộc tính riêng, ít NULL → gom lên (TH1, TH2)
- Nhiều thuộc tính riêng, nhiều NULL → tách ra (TH3) để tránh lãng phí lưu trữ và nhầm lẫn
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.
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 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 |