Chuyển tới nội dung chính

Chương 2: Mô hình dữ liệu quan hệ

Mô hình dữ liệu dựa trên khái niệm quan hệ, mô hình tổ chức, lưu trữ và quản lý dữ liệu một cách logic, nhất quán trong các hệ thống cơ sở dữ liệu hiện đại.


1. Các khái niệm của mô hình quan hệ

1.1. Thuộc tính

Là mô tả đặc trưng của đối tượng cần quản lý. Thuộc tính được cấu thành từ 3 yếu tố: Tên gọi, Kiểu dữ liệu và Miền giá trị.

1.1.1. Tên gọi

Là một dãy ký tự, có tính chất gợi nhớ.
Ví dụ: MaNVMaNV, HoTenHoTen, GioiTinhGioiTinh, NgaySinhNgaySinh.

1.1.2. Kiểu dữ liệu

Là cách phân loại dữ liệu. Trong CSDL chỉ chấp nhận các kiểu dữ liệu cơ bản như số (integer), chuỗi (string), thời gian (datetime), luận lý (boolean),... Và không chấp nhận các kiểu dữ liệu phức tạp như danh sách, mảng, bản ghi,...
Ví dụ: MaNV: integer, HoTen: string, GioiTinh: string, NgaySinh: datetime.

1.1.3. Miền giá trị

Là tập giá trị mà thuộc tính có thể nhận. Với thuộc tính AA, kí hiệu miền giá trị của thuộc tính đó là Dom(A)\text{Dom}(A).
Ví dụ: GioiTinh có kiểu dữ liệu là chuỗi, giá trị nhận được là 'Nam' hoặc 'Nu'. Ký hiệu: Dom(GioiTinh) IN ('Nam', 'Nu').

Lưu ý: Tại một thời điểm, một thuộc tính nếu không có giá trị hoặc chưa xác định được giá trị thì giá trị của nó là null (không có giá trị).

1.2. Quan hệ

Là một tập hữu hạn các thuộc tính.

Kí hiệu: R(A1,A2,...,An)\text{R} (A_1, A_2,... , A_n). Trong đó:

  • R\text{R}: Tên quan hệ.
  • R+={A1,A2,...,An}\text{R}^+= \{A_1, A_2, ..., A_n\}: Tập các thuộc tính của quan hệ R.

Ví dụ:
SINHVIEN(MSSV,GioiTinh,HoTen,NgaySinh,DiaChi,LopSH)\text{SINHVIEN}(\underline{MSSV}, GioiTinh, HoTen, NgaySinh, DiaChi, LopSH)
LOPHOC(MaLop,MaMH,MaGV,SiSo)\text{LOPHOC}(\underline{MaLop}, MaMH, MaGV, SiSo)

1.3. Bộ

Là các thông tin của của một đối tượng thuộc quan hệ, còn được gọi là mẫu tin.

Kí hiệu: Một bộ của quan hệ R(A1,A2,...,An)\text{R} (A_1, A_2,... , A_n)t={a1,a2,...,an}t=\{a_1, a_2,... , a_n\}
Ví dụ: Quan hệ SINHVIEN(MSSV,GioiTinh,HoTen,NgaySinh,DiaChi,LopSH)\text{SINHVIEN}(\underline{MSSV}, GioiTinh, HoTen, NgaySinh, DiaChi, LopSH) có bộ t = ('24250001', 'Nam', 'Nguyen Van A', '2006-01-01', 'TP.HCM', 'MTKH2024'). Bộ này cho biết một sinh viên có MSSV24250001, giới tính Nam, họ tên là Nguyen Van A, sinh ngày 01/01/2006TP.HCM, thuộc lớp MTKH2024.

Lưu ý: Quan hệ được coi là một bảng với các cột là các thuộc tính, mỗi dòng là một bộ.

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

tập hợp các bộ giá trị của quan hệ tại một thời điểm nhất định.

Kí hiệu: Thể hiện của quan hệ R\text{R}TRT_\text{R}.

Ví dụ: TSINHVIENT_\text{SINHVIEN} là thể hiện của quan hệ SINHVIEN\text{SINHVIEN} tại thời điểm hiện tại, có các bộ như dưới đây.

MSSVGioiTinhHoTenNgaySinhDiaChiLopSH
24250001NamNguyen Van A01/01/2006TP.HCMMTKH2024
24250002NuNguyen Thi B02/03/2005Tay NinhPMKT2024
24250003NamTran Van C05/04/2005Lam DongNTTT2024
24250004NuTran Thi D06/06/2006Da NangDLKH2024

1.5. Tân từ

Là quy tắc dùng để mô tả một quan hệ.

Kí hiệu: Tân từ của quan hệ R\text{R}R||\text{R}||.

Ví dụ:
LOPHOC(MaLop,MaMH,MaGV,SiSo)\text{LOPHOC}(\underline{MaLop}, MaMH, MaGV, SiSo)
LOPHOC||\text{LOPHOC}||: Một lớp học sẽ giảng dạy một môn học duy nhất, do một giảng viên phụ trách với sĩ số lớp đã được ấn định.

1.6. Lược đồ quan hệ

Dùng để mô tả cấu trúc của một quan hệmối liên hệ giữa các thuộc tính trong quan hệ đó. Lược đồ quan hệ đặc trưng bởi một tên phân biệt, một tập hữu hạn các thuộc tính và một mô tả xác định ý nghĩa và mối liên hệ giữa các thuộc tính.

Kí hiệu: Lược đồ quan hệ R\text{R} gồm nn thuộc tính A1,A2,...,AnA_1, A_2,... , A_nR(A1,A2,...,An)\text{R} (A_1, A_2,... , A_n).

Ví dụ:
SINHVIEN(MSSV,GioiTinh,HoTen,NgaySinh,DiaChi,LopSH)\text{SINHVIEN}(\underline{MSSV}, GioiTinh, HoTen, NgaySinh, DiaChi, LopSH)
Tân từ: Quan hệ này lưu trữ thông tin của sinh viên. Các thông tin bao gồm: giới tính (GioiTinhGioiTinh), họ và tên (HoTen), ngày sinh (NgaySinhNgaySinh), địa chỉ thường trú (DiaChiDiaChi) và lớp sinh hoạt của sinh viên đó (LopSHLopSH). Mỗi sinh viên có một mã số sinh viên (MSSVMSSV) để phân biệt với các sinh viên khác.

1.7. Lược đồ CSDL

tập hợp 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 quản lý.

Ví dụ: Lược đồ CSDL quản lý bán hàng của một cửa hàng.

KHACHHANG(MaKH,HoTen,DChi,SoDT,NgSinh,DoanhSo,NgDK)\text{KHACHHANG} (\underline{MaKH}, HoTen, DChi, SoDT, NgSinh, DoanhSo, NgDK)
Tân từ: Quan hệ khách hàng sẽ lưu trữ thông tin của khách hàng thành viên gồm có các thuộc tính: mã khách hàng, họ tên, địa chỉ, số điện thoại, ngày sinh, ngày đăng ký và doanh số (tổng trị giá các hóa đơn của khách hàng thành viên này).

NHANVIEN(MaNV,HoTen,NgVL,SoDT)\text{NHANVIEN} (\underline{MaNV}, HoTen, NgVL, SoDT)
Tân từ: Mỗi nhân viên bán hàng cần ghi nhận họ tên, ngày vào làm, điện thọai liên lạc, mỗi nhân viên phân biệt với nhau bằng mã nhân viên.

SANPHAM(MaSP,TenSP,DVT,NuocSX,Gia)\text{SANPHAM} (\underline{MaSP},TenSP, DVT, NuocSX, Gia)
Tân từ: Mỗi sản phẩm có một mã số, một tên gọi, đơn vị tính, nước sản xuất và một giá bán.

HOADON(SoHD,NgHD,MaKH,MaNV,TriGia)\text{HOADON} (\underline{SoHD}, NgHD, MaKH, MaNV, TriGia)
Tân từ: Khi mua hàng, mỗi khách hàng sẽ nhận một hóa đơn tính tiền, trong đó sẽ có số hóa đơn, ngày mua, nhân viên nào bán hàng, trị giá của hóa đơn là bao nhiêu và mã số của khách hàng nếu là khách hàng thành viên.

CTHD(SoHD,MaSP,SL)\text{CTHD} (\underline{SoHD,MaSP},SL)
Tân từ: Diễn giải chi tiết trong mỗi hóa đơn gồm có những sản phẩm gì với số lượng là bao nhiêu.

2. Khóa

Chú ý: Các bộ trong quan hệ phải khác nhau từng đôi một.

2.1. Siêu khóa

Là một tập con các thuộc tính của R+\text{R}^+ mà giá trị của chúng có thể phân biệt được 2 bộ bất kì khác nhau trong cùng một thể hiện TRT_\text{R}

Một lược đồ có ít nhất là một siêu khóa và có thể có nhiều siêu khóa.

Ví dụ: Trong quan hệ SINHVIEN\text{SINHVIEN} có thể hiện như dưới đây, ta có thể chọn các siêu khóa là: {MSSV}\{MSSV\}, {HoTen,NgaySinh}\{HoTen, NgaySinh\}, {HoTen,NgaySinh,LopSH}\{HoTen, NgaySinh, LopSH\},...

MSSVGioiTinhHoTenNgaySinhDiaChiLopSH
24250001NamNguyen Van A01/01/2006TP.HCMMTKH2024
24250002NuNguyen Thi B02/03/2005Tay NinhPMKT2024
24250003NamTran Van C05/04/2005Lam DongNTTT2024
24250004NuTran Thi D06/06/2006Da NangDLKH2024

2.2. Khóa

Gọi KK là tập con các thuộc tính của R\text{R}. KK được gọi là khóa nếu thỏa mãn các điều kiện dưới đây:

  • KK là một siêu khóa của R\text{R}.
  • Không tồn tại siêu khóa K1K_1 có số thuộc tính thấp hơn là tập con khác rỗng của khóa KK (tức KKsiêu khóa "nhỏ nhất" của R\text{R}).

Thuộc tính tham gia vào một khóa được gọi là thuộc tính khóa, ngược lại là thuộc tính không khóa.

Ví dụ 1: Trong quan hệ SINHVIEN\text{SINHVIEN} ở trên, ta thấy các siêu khóa {MSSV}\{MSSV\}{HoTen,NgaySinh}\{HoTen, NgaySinh\} không có siêu khóa nào "nhỏ hơn" nó nên {MSSV}\{MSSV\}{HoTen,NgaySinh}\{HoTen, NgaySinh\} là các khóa của quan hệ.

Ví dụ 2: Trong quan hệ SINHVIEN\text{SINHVIEN} ở trên, siêu khóa {HoTen,NgaySinh,LopSH}\{HoTen, NgaySinh, LopSH\} không phải là khóa vì có siêu khóa {HoTen,NgaySinh}\{HoTen, NgaySinh\} "nhỏ hơn" siêu khóa {HoTen,NgaySinh,LopSH}\{HoTen, NgaySinh, LopSH\}.

2.3. Khóa chính

Trong quá trình cài đặt bảng cho quan hệ, ta chỉ được chọn một khóa để làm cơ sở nhận biết. Khóa được chọn được gọi là khóa chính.

Khóa chính có số lượng thuộc tính ít nhất trong tất cả các khóa.

Ví dụ 1: Trong quan hệ SINHVIEN\text{SINHVIEN} ở trên có hai khóa là {MSSV}\{MSSV\}{HoTen,NgaySinh}\{HoTen, NgaySinh\}. Khóa {MSSV}\{MSSV\} có số thuộc tính ít hơn nên nó là khóa chính.

Khi biểu diễn khóa chính trên lược đồ quan hệ, thường sẽ sử dụng đường gạch dưới. Nếu khóa chính có nhiều thuộc tính thì đường gạch dưới phải nối liền hết toàn bộ các thuộc tính đó.

Ví dụ 2:
SINHVIEN(MSSV,GioiTinh,HoTen,NgaySinh,DiaChi,LopSH)\text{SINHVIEN}(\underline{MSSV}, GioiTinh, HoTen, NgaySinh, DiaChi, LopSH)
LOPSINHHOAT(MaLop,TenLop,MaCVHT,SiSo)\text{LOPSINHHOAT}(\underline{MaLop}, TenLop, MaCVHT, SiSo)
GIANGDAY(MaLop,MaMH,MaGV,HocKy,NamHoc)\text{GIANGDAY}(\underline{MaLop, MaMH, MaGV}, HocKy, NamHoc)

2.4. Khóa ngoại

2.4.1. Tham chiếu

Quan hệ A\text{A} tham chiếu quan hệ B\text{B} nếu trong quan hệ A\text{A} có một thuộc tính XX nhận giá trị từ một thuộc tính YY của quan hệ B\text{B}.

Ví dụ: Giá trị của thuộc tính LopSHLopSH trong quan hệ SINHVIEN\text{SINHVIEN} có từ giá trị của thuộc tính MaLopMaLop trong quan hệ LOPSINHHOAT\text{LOPSINHHOAT}. Ta nói SINHVIEN\text{SINHVIEN} tham chiếu đến LOPSINHHOAT\text{LOPSINHHOAT}.

Anh 21

2.4.2. Khóa ngoại

Xét quan hệ R\text{R} có tập thuộc tính UU, quan hệ S\text{S} có tập thuộc tính VV. K1K_1 là khóa chính của R\text{R}, K2K_2 là tập hợp con thuộc tính của VV. Ta nói K2K_2 là khóa ngoại của S\text{S} tham chiếu đến khóa chính K1K_1 của R\text{R} nếu thỏa các điều kiện sau:

  • K1K_1K2K_2 có cùng số thuộc tính và cùng ngữ nghĩa.
  • Giữa R\text{R}S\text{S} tồn tại mối quan hệ 1-nhiều trên K1K_1K2K_2.
  • Với mọi bộ thuộc S\text{S}, có duy nhất một bộ thuộc R\text{R} mà tại đó, giá trị của K1K_1K2K_2 bằng nhau.

Ví dụ: Trong quan hệ LOPSINHHOAT\text{LOPSINHHOAT} ở trên, thuộc tính MaLopMaLop là khóa chính. Thuộc tính LopSHLopSH trong quan hệ SINHVIEN\text{SINHVIEN} là khóa ngoại, tham chiếu đến MaLopMaLop là khóa chính trong quan hệ LOPSINHHOAT\text{LOPSINHHOAT}.

Lưu ý:

  • Trong một lược đồ quan hệ, một thuộc tính vừa có thể tham gia vào khóa chính, vừa tham gia vào khóa ngoại.
  • Khóa ngoại có thể tham chiếu đến khóa chính trên cùng 1 lược đồ quan hệ.
  • Có thể có nhiều khóa ngoại tham chiếu đến cùng một khóa chính.

3. Các đặc trưng của quan hệ

  • Mỗi quan hệ có một tên duy nhất
  • Mỗi thuộc tính của một quan hệ đều có tên khác nhau
  • Mỗi bộ là duy nhất, không có 2 bộ nào trùng nhau
  • Mỗi giá trị trong một bộ hoặc là một giá trị nguyên tố, hoặc là giá trị rỗng (NULL)
  • Thứ tự của các bộ không quan trọng
  • Thứ tự của thuộc tính không thực sự quan trọng
  • Thứ tự giữa các giá trị trong một bộ là quan trọng

4. Chuyển lược đồ ER sang mô hình quan hệ

Trong phần này, trừ khi có ví dụ đặc biệt thì mặc định là chúng ta đang xét đến lược đồ ER đã được xây dựng ở cuối chương 1.

Anh 22

4.1. Tập thực thể

Các tập thực thể chuyển thành các quan hệ có cùng tên và tập thuộc tính.

Ví dụ: Trong lược đồ có các thực thể PHONGBAN\text{PHONGBAN}, NHANVIEN\text{NHANVIEN}DEAN\text{DEAN}.

Anh 23

  • PHONGBAN(MaPhong,TenPhong)\text{PHONGBAN}(\underline{MaPhong}, TenPhong)
  • NHANVIEN(MaNV,HoTen,GioiTinh,DiaChi,NgaySinh)\text{NHANVIEN}(\underline{MaNV}, HoTen, GioiTinh, DiaChi, NgaySinh)
  • DEAN(MaDA,TenDA,DiaDiem)\text{DEAN}(\underline{MaDA}, TenDA, DiaDiem)

4.2. Mối quan hệ Nhiều-Nhiều

Tạo một quan hệ mới có tên là tên của mối kết hợp, thuộc tính gồm các thuộc tính khóa của các tập thực thể liên quan và thuộc tính của mối kết hợp đó (nếu có).

Ví dụ: Trong lược đồ có mối kết hợp ThamGia\text{ThamGia} giữa DEAN\text{DEAN}NHANVIEN\text{NHANVIEN}. Tạo thêm quan hệ THAMGIA\text{THAMGIA} với các thuộc tính MaDAMaDA (thuộc tính khóa của DEAN\text{DEAN}), MaNVMaNV (thuộc tính khóa của NHANVIEN\text{NHANVIEN}) và SoGioLamViecSoGioLamViec.

Anh 24

  • THAMGIA(MaNV,MaDA,SoGioLamViec)\text{THAMGIA}(\underline{MaNV, MaDA}, SoGioLamViec)

4.3. Mối quan hệ Một-Nhiều

Thêm vào quan-hệ-nhiều thuộc tính khóa của quan-hệ-một.

Ví dụ: Trong lược đồ có mối kết hợp ChuTri\text{ChuTri} giữa PHONGBAN\text{PHONGBAN}DEAN\text{DEAN}, mối kết hợp Thuoc\text{Thuoc} giữa PHONGBAN\text{PHONGBAN}NHANVIEN\text{NHANVIEN}. Thêm thuộc tính MaPhongMaPhong (thuộc tính khóa của PHONGBAN\text{PHONGBAN}) vào quan hệ DEAN\text{DEAN}NHANVIEN\text{NHANVIEN}.

Anh 25

  • NHANVIEN(MaNV,HoTen,GioiTinh,DiaChi,NgaySinh,MaPhong)\text{NHANVIEN}(\underline{MaNV}, HoTen, GioiTinh, DiaChi, NgaySinh, MaPhong)
  • DEAN(MaDA,TenDA,DiaDiem,MaPhong)\text{DEAN}(\underline{MaDA}, TenDA, DiaDiem, MaPhong)

4.4. Mối quan hệ Một-Một

Có hai cách:

  • Thêm vào quan hệ này thuộc tính khóa của quan hệ kia.
  • Thêm thuộc tính khóa vào cả hai quan hệ.

Chúng ta thống nhất sẽ sử dụng cách thứ nhất, và thêm khóa vào quan hệ có ít thuộc tính hơn.

Ví dụ: Trong lược đồ có mối kết hợp TruongPhong\text{TruongPhong} giữa PHONGBAN\text{PHONGBAN}NHANVIEN\text{NHANVIEN}. Thêm thuộc tính TruongPhongTruongPhong (là MaNVMaNV, thuộc tính khóa của NHANVIEN\text{NHANVIEN}) và NgayNhanChucNgayNhanChuc vào quan hệ PHONGBAN\text{PHONGBAN}.

Anh 26

  • PHONGBAN(MaPhong,TenPhong,TruongPhong,NgayNhanChuc)\text{PHONGBAN}(\underline{MaPhong}, TenPhong, TruongPhong, NgayNhanChuc)

4.5. Mối kết hợp 1 ngôi (Đệ quy)

Thêm vào quan hệ tham gia vào mối kết hợp đó thuộc tính khóa cùng ngữ nghĩa nhưng với tên gọi khác để tránh nhầm lẫn.

Ví dụ: Trong lược đồ có mối kết hợp QuanLy\text{QuanLy}, mối kết hợp này chỉ có thực thể NHANVIEN\text{NHANVIEN} tham gia. Thêm thuộc tính MaNVQLMaNVQL (là MaNVMaNV, thuộc tính khóa của NHANVIEN\text{NHANVIEN}) vào NHANVIEN\text{NHANVIEN} để phân biệt với MaNVMaNV đã có từ trước.

Anh 27

  • NHANVIEN(MaNV,HoTen,GioiTinh,DiaChi,NgaySinh,MaPhong,MaNVQL)\text{NHANVIEN}(\underline{MaNV}, HoTen, GioiTinh, DiaChi, NgaySinh, MaPhong, MaNVQL)

4.6. Mối kết hợp 3 ngôi

Chuyển mối kết hợp thành một quan hệ mới (bất kể bản số), có khoá chính gồm 3 thuộc tính khoá của 3 thực thể tham gia mối kết hợp. Thuộc tính mối kết hợp (nếu có) trở thành thuộc tính của quan hệ mới.

Ví dụ: Trong lược đồ dưới đây, mối kết hợp GiangDay\text{GiangDay} có 3 thực thể MONHOC\text{MONHOC}, LOPHOC\text{LOPHOC}GIANGVIEN\text{GIANGVIEN} tham gia. Tạo quan hệ GIANGDAY\text{GIANGDAY} bao gồm MaMHMaMH (thuộc tính khóa của MONHOC\text{MONHOC}), MaLHMaLH (thuộc tính khóa của LOPHOC\text{LOPHOC}), MaGVMaGV (thuộc tính khóa của GIANGVIEN\text{GIANGVIEN}), HocKyHocKyNamHocNamHoc (thuộc tính của mối kết hợp GiangDay\text{GiangDay}).

Anh 28

Ta có mô hình quan hệ của lược đồ trên như sau:

  • MONHOC(MaMH,TenMH)\text{MONHOC}(\underline{MaMH}, TenMH)
  • LOPHOC(MaLH,SiSo)\text{LOPHOC}(\underline{MaLH}, SiSo)
  • GIANGVIEN(MaGV,HoTen)\text{GIANGVIEN}(\underline{MaGV}, HoTen)
  • GIANGDAY(MaMH,MaLH,MaGV,HocKy,NamHoc)\text{GIANGDAY}(\underline{MaMH}, MaLH, MaGV, HocKy, NamHoc)

Ta cũng có mô hình quan hệ của lược đồ được nhắc đến ở đầu phần này là:

  • PHONGBAN(MaPhong,TenPhong,TruongPhong,NgayNhanChuc)\text{PHONGBAN}(\underline{MaPhong}, TenPhong, TruongPhong, NgayNhanChuc)
  • NHANVIEN(MaNV,HoTen,GioiTinh,DiaChi,NgaySinh,MaPhong,MaNVQL)\text{NHANVIEN}(\underline{MaNV}, HoTen, GioiTinh, DiaChi, NgaySinh, MaPhong, MaNVQL)
  • DEAN(MaDA,TenDA,DiaDiem,MaPhong)\text{DEAN}(\underline{MaDA}, TenDA, DiaDiem, MaPhong)
  • THAMGIA(MaNV,MaDA,SoGioLamViec)\text{THAMGIA}(\underline{MaNV, MaDA}, SoGioLamViec)