You are on page 1of 272

BÀI GIẢNG

CƠ SỞ DỮ LIỆU
2. Dữ liệu và cơ sở dữ liệu

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Dữ liệu và CSDL https://bit.ly/2zhe043 1/5


Dữ liệu

Dữ liệu là những gì chúng ta biết có thể ghi lại được và có ý nghĩa


(By data, we mean known facts that can be recorded and that have
implicit meaning - Elmasri, Navathe).
Ví dụ:
Dữ liệu về nhân viên, quá trình công tác và chuyên môn trong một
công ty
Dữ liệu về thời tiết, khí hậu
Dữ liệu về công dân của một quốc gia

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Dữ liệu và CSDL https://bit.ly/2zhe043 2/5


Cơ sở dữ liệu

Một cơ sở dữ liệu (database) là một tập hợp dữ liệu có liên quan với
nhau, được lưu trữ trên máy tính, có nhiều người sử dụng và được tổ
chức theo một mô hình.
Ví dụ cơ sở dữ liệu SOHUUOTO có các bảng:
CONGDAN: thông tin về công dân có thể sở hữu xe ô tô
OTO: thông tin về ô tô
SOHUU: thông tin về sở hữu ô tô của công dân

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Dữ liệu và CSDL https://bit.ly/2zhe043 3/5


Ví dụ: Cơ sở dữ liệu sở hữu xe ô tô
Số CMND Họ tên Ngày sinh Giới tính
1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ

Biển số Số máy Số khung Số chỗ Nhãn hiệu Màu sơn


BS1 1 3 5 Honda Đen
BS2 5 9 5 Mazda Đỏ
BS3 3 2 2 Hyundai Xám
BS4 10 7 7 Toyota Vàng

Số CMND Biển số Ngày sở hữu


1 BS1 2020-01-01
1 BS4 2019-06-09
3 BS3 2016-07-09
2 BS2 2018-01-20
5 BS3 2016-07-09
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Dữ liệu và CSDL https://bit.ly/2zhe043 4/5
Các tính chất của một cơ sở dữ liệu (CSDL)

Một CSDL biểu thị một khía cạnh nào đó của thế giới thực. Thông
tin được đưa vào trong CSDL tạo thành một không gian CSDL hoặc
một “thế giới nhỏ” (miniworld)
Một cơ sở dữ liệu được thiết kế và được phổ biến cho một mục đích
riêng
Một cơ sở dữ liệu là một tập hợp dữ liệu liên kết với nhau một cách
logic và mang một ý nghĩa nào đó.
Một CSDL không phải là một tập hợp dữ liệu tùy tiện.

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Dữ liệu và CSDL https://bit.ly/2zhe043 5/5


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
3. Hệ quản trị cơ sở dữ liệu

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 1/6


Hệ quản trị cơ sở dữ liệu

Một hệ quản trị cơ sở dữ liệu (Database management system –


DBMS) là một tập hợp các chương trình giúp cho người sử dụng tạo
ra, duy trì và khai thác CSDL một cách dễ dàng:
Định nghĩa CSDL: Đặc tả các kiểu dữ liệu, các cấu trúc và các ràng
buộc
Xây dựng CSDL: là quá trình lưu trữ dữ liệu trên các phương tiện lưu
trữ được hệ quản trị CSDL kiểm soát
Thao tác trên CSDL: truy vấn CSDL, cập nhật dữ liệu và tạo ra các
báo cáo
Các hệ quản trị CSDL có thể là phổ dụng hoặc chuyên dụng
Hệ cơ sở dữ liệu (database systems) = Cơ sở dữ liệu + hệ
quản trị cơ sở dữ liệu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 2/6


Chức năng của một hệ quản trị cơ sở dữ liệu

1 Lưu trữ các định nghĩa, các mối liên kết dữ liệu (gọi là siêu dữ liệu -
metadata) vào trong một từ điển dữ liệu
2 Tạo ra các cấu trúc phức tạp theo yêu cầu để lưu trữ dữ liệu
3 Biến đổi các dữ liệu được nhập vào để phù hợp với các cấu trúc dữ
liệu ở điểm trên
4 Tạo ra một hệ thống bảo mật và áp đặt tính bảo mật và riêng tư
trong cơ sở dữ liệu
5 Tạo ra các cấu trúc phức tạp cho phép nhiều người sử dụng truy cập
đến dữ liệu
6 Cung cấp các thủ tục sao lưu và phục hồi dữ liệu để đảm bảo sự an
toàn và toàn vẹn dữ liệu
7 Thực hiện các quy tắc an toàn để đảm bảo toàn vẹn dữ liệu
8 Cung cấp việc truy cập dữ liệu thông qua một ngôn ngữ truy vấn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 3/6


Ngôn ngữ và giao diện cơ sở dữ liệu

Các ngôn ngữ của hệ quản trị cơ sở dữ liệu:


Ngôn ngữ định nghĩa dữ liệu (data definition language – DDL):
Dùng để định nghĩa các lược đồ
Ngôn ngữ thao tác dữ liệu (data manipulation language – DML):
Dùng để thao tác cơ sở dữ liệu
Các loại giao diện hệ quản trị cơ sở dữ liệu
Giao diện dựa trên bảng chọn (Menu)
Giao diện dựa trên mẫu biểu
Giao diện đồ hoạ (Graphic User Interface - GUI)
Giao diện cho người quản trị hệ thống

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 4/6


Con người và cơ sở dữ liệu

Người thiết kế và cài đặt hệ quản trị dữ liệu


Người thiết kế cơ sở dữ liệu (Database Designer)
Người phân tích hệ thống và lập trình ứng dụng
Người quản trị hệ cơ sở dữ liệu (Database Administrator – DBA)
Người vận hành
Người bảo trì
Người sử dụng (End User)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 5/6


Các đặc trưng của giải pháp cơ sở dữ liệu

Khả năng tự mô tả của hệ cơ sở dữ liệu


Tính độc lập của chương trình và dữ liệu
Hỗ trợ nhiều khung nhìn khác nhau đối với dữ liệu
Cho phép nhiều người sử dụng đồng thời trên một CSDL

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Hệ quản trị CSDL https://bit.ly/3hi2Ihp 6/6


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
Chuyển đổi liên kết cấp 3 thành các liên kết cấp 2

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Chuyển đổi liên kết cấp 3 sang cấp 2 https://youtu.be/WXGRgE8z9dI 1/2
Chuyển đổi liên kết cấp 3 sang các liên kết cấp 2 1

Tạo một kiểu thực thể mới E và 3 kiểu liên kết cấp 2 RA , RB , RC
Tỷ số lực lượng giữa A và E trong liên kết RA là 1 : N
Tỷ số lực lượng giữa B và E trong liên kết RB là 1 : N
Tỷ số lực lượng giữa C và E trong liên kết RC là 1 : N
E tham gia toàn bộ vào RA , RB , RC
1
A. Silberschatz, H. F. Korth, S. Sudarshan, Database system concepts, 7th edition, McGraw Hill
Education, 2011, pp. 283–284.
N. H. Châu (VNU-UET) Chuyển đổi liên kết cấp 3 sang cấp 2 https://youtu.be/WXGRgE8z9dI 2/2
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
4. Mô hình và lược đồ cơ sở dữ liệu

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình CSDL https://bit.ly/3cPeOLa 1/4


Định nghĩa mô hình cơ sở dữ liệu

Một mô hình cơ sở dữ liệu là một tập hợp các khái niệm dùng để
biểu diễn các cấu trúc của cơ sở dữ liệu
Một số mô hình CSDL còn có thêm một tập hợp các phép toán cơ
bản để đặc tả các thao tác trên CSDL

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình CSDL https://bit.ly/3cPeOLa 2/4


Các loại mô hình cơ sở dữ liệu

Các mô hình dữ liệu bậc cao hoặc mô hình dữ liệu mức quan
niệm cung cấp các khái niệm gắn liền với cách cảm nhận dữ liệu của
nhiều người sử dụng
Các mô hình dữ liệu bậc thấp hoặc các mô hình dữ liệu vật lý
cung cấp các khái niệm mô tả chi tiết về việc dữ liệu được lưu trữ
trong máy tính như thế nào
Các mô hình dữ liệu thể hiện (mô hình dữ liệu mức logic) cung
cấp những khái niệm mà người sử dụng có thể hiểu được, đồng thời
không xa với cách tổ chức dữ liệu bên trong máy tính
Mô hình quan hệ là một trong các mô hình dữ liệu mức logic được
sử dụng nhiều nhất hiện nay
Một số mô hình dữ liệu khác: mô hình dữ liệu đồ thị (graph database
model), mô hình dữ liệu địa lý (geographical database model)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình CSDL https://bit.ly/3cPeOLa 3/4


Lược đồ và trạng thái cơ sở dữ liệu

Mô tả của một cơ sở dữ liệu được gọi là lược đồ cơ sở dữ liệu, nó


được xác định rõ trong quá trình thiết kế cơ sở dữ liệu và không bị
thay đổi thường xuyên
Các dữ liệu trong một cơ sở dữ liệu tại một thời điểm cụ thể được gọi
là một trạng thái cơ sở dữ liệu hoặc là ảnh (snapshot) của cơ sở dữ
liệu
Trạng thái CSDL thường xuyên thay đổi trong quá trình sử dụng
CSDL
Cần phải phân biệt rõ giữa mô tả của cơ sở dữ liệu và bản thân cơ sở
dữ liệu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình CSDL https://bit.ly/3cPeOLa 4/4


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
5. Mô hình thực thể-liên kết: các khái niệm

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 1 / 20


Mô hình thực thể-liên kết

Mô hình thực thể-liên kết (Entity-Relationship, viết tắt ER) là


một mô hình dữ liệu mức quan niệm nhằm mô tả các đối tượng trong
thế giới thực và quan hệ giữa chúng
Thực thể là một đối tượng trong thế giới thực, có sự tồn tại độc lập:
Thực thể cụ thể: có thể cảm nhận bằng giác quan, ví dụ xe đạp, bàn,
ghế
Thực thể trừu tượng: có thể nhận biết bằng nhận thức, ví dụ công ty,
trường học

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 2 / 20


Thuộc tính của thực thể

Mỗi một thực thể có các thuộc tính, đó là các đặc trưng cụ thể mô
tả thực thể đó; chẳng hạn màu sơn của xe ô tô, số nhân viên một
công ty là các thuộc tính
Phân loại các thuộc tính:
Thuộc tính đơn là thuộc tính không thể phân chia ra được thành các
thành phần nhỏ hơn
Thuộc tính phức hợp là thuộc tính có thể phân chia được thành các
thành phần nhỏ hơn, biểu diễn các thuộc tính cơ bản hơn với các ý
nghĩa độc lập
Những thuộc tính có giá trị duy nhất cho một thực thể cụ thể gọi là
các thuộc tính đơn trị
Một thuộc tính có thể có một tập giá trị cho cùng một thực thể:
thuộc tính đa trị

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 3 / 20


Thuộc tính của thực thể

Thuộc tính có giá trị có thể tính được thông qua giá trị của các
thuộc tính khác gọi là thuộc tính suy diễn được
Trong một số trường hợp, một số thuộc tính của một thực thể cụ thể
không xác định được giá trị. Trong trường hợp như vậy, ta phải tạo ra
một giá trị đặc biệt gọi là giá trị null. Các thuộc tính nói trên là
thuộc tính có thể nhận giá trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 4 / 20


Thuộc tính của kiểu thực thể: định nghĩa hình thức

Một thuộc tính A có tập giá trị V của kiểu thực thể E là một hàm
A : E → P(V ),
trong đó P(V ) = {S, S ⊆ V } là tập hợp tất cả các tập con của V .
P(V ) còn được gọi là tập lực lượng của V .
Ký hiệu giá trị của thuộc tính A với thực thể e là A(e)
Định nghĩa trên đúng cho các thuộc tính đơn, đa trị và thuộc tính có
thể nhận giá trị null
Với các thuộc tính đơn trị, A(e) có duy nhất một phần tử
Với các thuộc tính có thể nhận giá trị null, A(e) là tập rỗng

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 5 / 20


Kiểu thực thể và tập thực thể

Một kiểu thực thể là một nhóm các thực thể có các thuộc tính như
nhau được mô tả bằng tên và các thuộc tính. Ví dụ: NHÂNVIÊN
(Họtên, Tuổi, Lương) là một kiểu thực thể
Một tập hợp các thực thể của một kiểu thực thể trong cơ sở dữ liệu
tại một thời điểm bất kỳ được gọi là một tập thực thể

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 6 / 20


Khóa và tập giá trị

Thuộc tính mà các giá trị của nó là khác nhau đối với mỗi thực thể
riêng biệt trong một tập thực thể gọi là thuộc tính khóa → khóa
dùng để phân biệt hai thực thể
Nhiều thuộc tính kết hợp với nhau tạo thành một khóa phức hợp.
Khóa phức hợp phải tối thiểu
Một kiểu thực thể có thể có nhiều hơn một khóa
Kiểu thực thể không có khóa gọi là kiểu thực thể yếu
Mỗi thuộc tính đơn của một kiểu thực thể được kết hợp với một
miền giá trị

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 7 / 20


Kiểu liên kết, tập liên kết và các thể hiện

Liên kết mô tả mối liên quan, quan hệ của các thực thể
Một kiểu liên kết R của n kiểu thực thể E1 , E2 , . . . , En là một quan
hệ toán học trên E1 , E2 , . . . , En hay R ⊆ E1 × E2 × . . . × En với Ei là
các kiểu thực thể ∀i
Một kiểu liên kết R giữa n kiểu thực thể E1 , E2 , . . . , En xác định một
tập liên kết giữa các thực thể của các kiểu đó tại một thời điểm bất
kỳ
Tập liên kết R = {ri , i = 1, n} trong đó:
mỗi ri (được gọi là một thể hiện liên kết) liên kết n thực thể riêng biệt
e1 , e2 , . . . , en , và
mỗi một thực thể ej là một thành phần của kiểu thực thể Ej , 1 ≤ j ≤ n
và có mặt trong thể hiện liên kết ri

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 8 / 20


Kiểu liên kết, tập liên kết và các thể hiện

Mỗi kiểu thực thể E1 , E2 , . . . , En được gọi là tham gia vào kiểu liên
kết R, và tương tự, mỗi thực thể riêng biệt e1 , e2 , . . . , en được gọi là
tham gia vào thể hiện liên kết ri = (e1 , e2 , . . . , en )

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 9 / 20


Ví dụ thể hiện liên kết

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 10 / 20


Cấp liên kết, tên vai trò và kiểu liên kết đệ qui

Cấp của một kiểu liên kết là số các kiểu thực thể tham gia vào
kiểu liên kết đó.
Tên vai trò dùng để chỉ rõ vai trò của các kiểu thực thể tham gia
liên kết
Trong nhiều trường hợp, các vai trò là rõ ràng và không cần chỉ ra
Khi một kiểu thực thể có thể tham gia vào một kiểu liên kết với nhiều
vai trò khác nhau, tên vai trò là cần thiết để phân biệt ý nghĩa của
việc tham gia. Các kiểu liên kết như vậy gọi là kiểu liên kết đệ quy

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 11 / 20


Ví dụ thể hiện liên kết cấp 3

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 12 / 20


Ví dụ thể hiện liên kết đệ qui

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 13 / 20


Các ràng buộc trên các kiểu liên kết

Các kiểu liên kết thường có một số ràng buộc để chỉ ra số tổ hợp có thể
của các thực thể tham gia trong tập hợp các thể hiện liên kết. Có hai loại
ràng buộc chính:
Tỷ số lực lượng
Sự tham gia

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 14 / 20


Ràng buộc tỷ số lực lượng

Tỷ số lực lượng cho một kiểu liên kết chỉ ra số các thể hiện liên kết
mà một thực thể có thể tham gia.
Với các kiểu liên kết cấp 2, có thể ba kiểu tỷ số lực lượng 1 : 1, 1 : N,
và M : N

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 15 / 20


Ràng buộc tham gia

Các ràng buộc tham gia và sự phụ thuộc tồn tại: các thực thể của
một kiểu thực thể có phải tham toàn bộ vào các thể hiện liên kết hay
không. Có hai kiểu ràng buộc tham gia:
Ràng buộc tham gia toàn bộ (phụ thuộc tồn tại)
Ràng buộc tham gia bộ phận

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 16 / 20


Ví dụ: Ràng buộc tỷ số lực lượng và tham gia

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 17 / 20


Ví dụ: Ràng buộc tỷ số lực lượng và tham gia

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 18 / 20


Thuộc tính của các kiểu liên kết

Các kiểu liên kết cũng có các thuộc tính, giống như các thuộc tính
của các kiểu thực thể
Ví dụ: Kiểu liên kết LAMVIEC giữa các thực thể NHANVIEN và
DUAN có thể có thuộc tính SoGio, để ghi lại số giờ làm việc của một
nhân viên trên một dự án

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 19 / 20


Cách xác định kiểu thực thể yếu

Các kiểu thực thể không có thuộc tính khóa được gọi là kiểu thực thể
yếu (W )
Các kiểu thực thể có thuộc tính khóa được gọi là kiểu thực thể mạnh
Các thực thể của một kiểu thực thể yếu được xác định (phân biệt)
bằng cách liên kết với các thực thể của một kiểu thực thể mạnh (S)
khác
Kiểu thực thể mạnh S còn được gọi là kiểu thực thể chủ của W
Ví dụ: TREEM là một kiểu thực thể yếu, cần được xác định dựa vào
kiểu thực thể chủ NHANVIEN với liên kết CON

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (1) https://bit.ly/3kLZAvX 20 / 20


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
6. Mô hình thực thể-liên kết mở rộng

Nguyễn Hải Châu


Email: chaunh@vnu.edu.vn

Trường Đại học Công nghệ


Đại học Quốc gia Hà Nội

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 1 / 19


Mô hình thực thể-liên kết mở rộng

Mô hình thực thể liên kết mở rộng (Enhanced Entity-Relationship -


EER) là mở rộng của mô hình ER nhằm đáp ứng các yêu cầu phức
tạp của các ứng dụng cơ sở dữ liệu
Mô hình EER bao gồm tất cả các khái niệm của mô hình ER và các
khái niệm mở rộng:
Lớp cha (superclass), lớp con (subclass) và các khái niệm liên quan:
chuyên biệt hóa (specialization) và tổng quát hóa (generalization)
Kiểu hợp (union) hoặc phân loại (category)
Thừa kế thuộc tính và liên kết (attribute and relationship inheritance)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 2 / 19


Lớp con, lớp cha

Trong nhiều trường hợp một kiểu thực thể có nhiều kiểu con
(subtype) hoặc lớp con (subclass) cần phải biểu diễn rõ ràng
Ví dụ: các thực thể trong kiểu thực thể NHANVIEN có thể được chia
thành các nhóm nhỏ hơn như THUKY, KYSU, KYTHUATVIEN;
BIENCHE, HOPDONG...
Các nhóm trên được gọi là một lớp con hay kiểu con của kiểu thực
thể NHANVIEN và NHANVIEN là kiểu cha hay lớp cha của các lớp
con đó
Một thực thể có thể thuộc một hoặc nhiều lớp con, ví dụ: một kỹ sư
có thể thuộc hai lớp con KYSU và HOPDONG
Một thực thể không thể tồn tại ở dạng một lớp con độc lập mà phải có
lớp cha
Giữa lớp cha và các lớp con của nó có các liên kết, được gọi là liên
kết lớp cha/con
Kiểu liên kết lớp cha/lớp con có tỷ số lực lượng 1:1

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 3 / 19


Thừa kế

Một thực thể thuộc một lớp con thừa kế tất cả các thuộc tính của
lớp cha và tham gia vào liên kết của lớp cha
Một thực thể ở lớp con là một thực thể như trong mô hình ER

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 4 / 19


Chuyên biệt hóa

Chuyên biệt hóa (specialization) là quá trình xác định một tập các lớp
con của một kiểu thực thể E ; E được gọi là lớp cha của chuyên biệt
hóa
Ví dụ:
THUKY, KYSU, KYTHUATVIEN là chuyên biệt hóa của lớp cha
NHANVIEN căn cứ vào loại công việc
BIENCHE, HOPDONG là một chuyên biệt hóa khác của NHANVIEN
căn cứ vào cách trả lương
Quá trình chuyên biệt hóa cho phép:
Xác định một tập các lớp con của một kiểu thực thể
Thiết lập các thuộc tính riêng của mỗi lớp con
Thiết lập các kiểu liên kết riêng của mỗi lớp con với các kiểu thực thể
hoặc các lớp con khác

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 5 / 19


Ví dụ: chuyên biệt hóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 6 / 19


Tổng quát hóa

Tổng quát hóa (generalization) là quá trình ngược với chuyên biệt hóa
Xác định các đặc điểm chung của một số kiểu thực thể đã tồn tại
E1 , E2 , ..., En và tổng quát hóa chúng thành một lớp cha (mới) E
E có các lớp con là E1 , E2 , ..., En

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 7 / 19


Ví dụ: tổng quát hóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 8 / 19


Phân cấp chuyên biệt hóa và dàn chuyên biệt hóa

Một lớp con có thể có các lớp con → hình thành phân cấp
(hierarchy) hoặc dàn (lattice) chuyên biệt hóa
Nếu mỗi lớp con chỉ tham gia vào một liên kết cha/con với vai trò lớp
con (tức là lớp con đó chỉ có một lớp cha), ta có phân cấp chuyên
biệt hóa
Ngược lại, nếu lớp con tham gia vào hai liên kết cha/con trở lên với
vai trò lớp con, ta có dàn chuyên biệt hóa
Một lớp con có từ hai lớp cha trở lên được gọi là lớp con chung
(shared subclass) → thừa kế bội / dàn
Nếu không tồn tại lớp con chung nào: thừa kế đơn / phân cấp

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 9 / 19


Ví dụ: phân cấp chuyên biệt hóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 10 / 19


Ví dụ: dàn chuyên biệt hóa và lớp con chung

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 11 / 19


Cách xác định các lớp con

Trong một số chuyên biệt hóa, có thể xác định chính xác các thực thể
sẽ là thành viên của một lớp con bằng một điều kiện trên một số
thuộc tính của lớp cha: các lớp con xác định bằng điều kiện
Nếu các lớp con của một chuyên biệt hóa có điều kiện thành viên trên
cùng một thuộc tính của lớp cha thì chuyên biệt hóa đó còn được gọi
là chuyên biệt hóa xác định bằng thuộc tính
Nếu việc xác định một lớp con không thực hiện được theo một điều
kiện nào: các lớp con được người sử dụng xác định

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 12 / 19


Ví dụ: chuyên biệt hóa xác định bằng thuộc tính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 13 / 19


Các ràng buộc của chuyên biệt hóa/tổng quát hóa

Có hai loại ràng buộc khác áp dụng cho chuyên biệt hóa:
Ràng buộc rời rạc: Ràng buộc này được thỏa mãn khi mỗi thực thể chỉ
là thành viên của nhiều nhất một lớp con, ngược lại mỗi thực thể có
thể thuộc vào hai lớp con trở lên
Ràng buộc đầy đủ: Ràng buộc này được thỏa mãn khi mỗi thực thể
của lớp cha phải thuộc vào một lớp con nào đó, ngược lại sẽ có một số
thực thể của lớp cha không thuộc bất kỳ lớp con nào
Hai loại ràng buộc rời rạc và đầy đủ là độc lập với nhau

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 14 / 19


Ví dụ: chuyên biệt hóa không rời rạc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 15 / 19


Kiểu hợp (kiểu phân loại)

Trong một số bài toán, ta cần biểu diễn một tập thực thể từ các kiểu
thực thể khác nhau
Khi đó một lớp con sẽ biểu diễn một tập thực thể là tập con của hợp
của các loại thực thể khác nhau
Các lớp con như vậy được gọi là lớp con của kiểu hợp (union) hay
kiểu phân loại (category)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 16 / 19


Ví dụ: kiểu hợp

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 17 / 19


Các ký hiệu dùng trong sơ đồ EER (1)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 18 / 19


Các ký hiệu dùng trong sơ đồ EER (2)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình EER https://bit.ly/3JMLXIL 19 / 19


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
6. Mô hình thực thể-liên kết: sơ đồ

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 1 / 13


Sơ đồ ER theo ký hiệu của
Peter Chen

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 2 / 13


Peter Chen

Peter Pin-Shan Chen (sinh năm 1947 tại Đài Trung, Đài Loan) là một
nhà khoa học máy tính xuất sắc người Mỹ gốc Đài Loan, giáo sư của
Đại học Canergie Mellon University (CMU), Mỹ
Peter Chen là tác giả của mô hình thực thể-liên kết1 (1976)

1
P. Chen, The Entity-Relationship Model - Toward a Unified View of Data, ACM Transactions on
Database Systems. 1 (1), 1976, 9–36. doi:10.1145/320434.320440
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 3 / 13
Sơ đồ ER: Thực thể và các thuộc tính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 4 / 13


Sơ đồ ER: Liên kết và các ràng buộc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 5 / 13


Sơ đồ ER theo ký hiệu
"chân chim" (crow’s foot)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 6 / 13


Ký hiệu ER theo kiểu “chân chim“ (crow’s foot)

Gordon Everest là giáo sư ngành khoa học thông tin và ra quyết định
của Đại học Minnesota
https://carlsonschool.umn.edu/faculty/gordon-everest-0
Gordon Everest là người đề xuất sử dụng ký hiệu "chân chim"2 trong
mô hình ER (1976)
2
G. Everest, Basic data structure models explained with a common example, in Computing Systems
1976, Proceedings Fifth Texas Conference on Computing Systems, Austin,TX, 1976 October 18-19,
pages 39-46.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 7 / 13
Thực thể và liên kết

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 8 / 13


Thể hiện thuộc tính của thực thể

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 9 / 13


Ràng buộc tỷ số lực lượng và tham gia

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 10 / 13


"Chân chim"

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 11 / 13


So sánh ký hiệu của P. Chen và "chân chim"

Ký hiệu của P. Chen mô tả được các liên kết cấp ≥ 2


Ký hiệu "chân chim" chỉ mô tả các liên kết cấp 2, tuy nhiên:
Trong thực tế, hầu hết các liên kết đều là cấp 2, và
Luôn có thể thay thế một liên kết cấp n ≥ 3 bằng các liên kết cấp 23

3
A. Silberschatz, H. F. Korth, S. Sudarshan, Database system concepts, 7th edition, McGraw Hill
Education, 2011, pp. 283–284.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 12 / 13
Ví dụ: Chuyển đổi liên kết cấp 3 sang các liên kết cấp 2 4

Tạo một thực thể mới E


Tạo liên kết RA có tỷ số lực lượng 1 : N giữa A và E
Tạo liên kết RB có tỷ số lực lượng 1 : N giữa B và E
Tạo liên kết RC có tỷ số lực lượng 1 : N giữa C và E
E tham gia toàn bộ vào RA , RB , RC
4
A. Silberschatz, H. F. Korth, S. Sudarshan, Database system concepts, 7th edition, McGraw Hill
Education, 2011, pp. 283–284.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (2) https://bit.ly/2zfYNjI 13 / 13
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
6. Mô hình thực thể-liên kết: Ví dụ

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (3) https://bit.ly/2ZpIdrm 1/3


Lược đồ ER CONGTY

Các kiểu thực thể: NHANVIEN, DONVI, DUAN và CON


Các kiểu liên kết: LAMVIEC, QUANLY, KIEMSOAT, THAMGIA,
GIAMSAT và CO
Ràng buộc tham gia được thể hiện bằng ký hiệu (min, max )

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (3) https://bit.ly/2ZpIdrm 2/3


Lược đồ ER CONGTY

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (3) https://bit.ly/2ZpIdrm 3/3


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
6. Mô hình thực thể-liên kết:
lựa chọn thực thể, liên kết từ yêu cầu như thế nào?

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 1/5


Lược đồ ER COMPANY1

Các kiểu thực thể: EMPLOYEE,


DEPARTMENT, PROJECT,
DEPENDENT
Các kiểu liên kết: WORKS_FOR,
WORKS_ON, MANAGES,
CONTROLS, DEPENDENTS_OF,
SUPERVISION

1
Ramez A. Elmasri, Shamkant Navathe, Fundamentals of Database Systems, 7th edition, John Wiley &
Sons, Inc., 2016, p. 64.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 2/5
Lược đồ ER UNIVERSITY2

Các kiểu thực thể: COLLEGE,


INSTRUCTOR, DEPT, STUDENT,
SECTION, COURSE
Các kiểu liên kết: DEAN, ADMINS,
CHAIR, EMPLOYS, HAS, OFFERS,
TAKES, TEACHES, SECS

2
Ramez A. Elmasri, Shamkant Navathe, Fundamentals of Database Systems, 7th edition, John Wiley &
Sons, Inc., 2016, p. 94.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 3/5
Lược đồ ER BANK3

Các kiểu thực thể: BANK,


BANK_BRANCH, LOAN, ACCOUNT,
CUSTOMER
Các kiểu liên kết: BRANCHES, LOANS,
ACCTS, A_C, L_C

3
Ramez A. Elmasri, Shamkant Navathe, Fundamentals of Database Systems, 7th edition, John Wiley &
Sons, Inc., 2016, p. 99.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 4/5
Gợi ý cách lựa chọn kiểu thực thể, kiểu liên kết

Trong các ví dụ trên:


Các kiểu thực thể: EMPLOYEE, DEPARTMENT, PROJECT,
DEPENDENT, COLLEGE, INSTRUCTOR, DEPT, STUDENT,
SECTION, COURSE, BANK, BANK_BRANCH, LOAN, ACCOUNT,
CUSTOMER
Các kiểu liên kết: WORKS_FOR, WORKS_ON, MANAGES,
CONTROLS, DEPENDENTS_OF, SUPERVISION, DEAN, ADMINS,
CHAIR, EMPLOYS, HAS, OFFERS, TAKES, TEACHES, SECS,
BRANCHES, LOANS, ACCTS, A_C, L_C

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 5/5


Gợi ý cách lựa chọn kiểu thực thể, kiểu liên kết

Trong các ví dụ trên:


Các kiểu thực thể: EMPLOYEE, DEPARTMENT, PROJECT,
DEPENDENT, COLLEGE, INSTRUCTOR, DEPT, STUDENT,
SECTION, COURSE, BANK, BANK_BRANCH, LOAN, ACCOUNT,
CUSTOMER
Các kiểu liên kết: WORKS_FOR, WORKS_ON, MANAGES,
CONTROLS, DEPENDENTS_OF, SUPERVISION, DEAN, ADMINS,
CHAIR, EMPLOYS, HAS, OFFERS, TAKES, TEACHES, SECS,
BRANCHES, LOANS, ACCTS, A_C, L_C
Gợi ý cách lựa chọn:
Danh từ −→ kiểu thực thể
Động từ, sở hữu −→ kiểu liên kết

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình ER (4) https://bit.ly/37TY3lg 5/5


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ: Giới thiệu

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (0) 1/4


Lược đồ ER CONGTY

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (0) 2/4


Liên kết NHANVIEN-LAMVIEC-DONVI

NHANVIEN(MaNV , NgaySinh, Gioitinh, HoDem, Ten, Luong, DiaChi)


?
DONVI(MaDV , TenDV , DiaDiem)
?
LAMVIEC(MaNV , MaDV , ...)←−NHANVIEN × DONVI

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (0) 3/4


Các vấn đề cần mô hình hóa

Kiểu thực thể, thuộc tính, xác định một thực thể là duy nhất ←−
lược đồ quan hệ, quan hệ (thể hiện của lược đồ quan hệ), siêu khóa
và khóa
Kiểu liên kết ←− khóa ngoài của lược đồ quan hệ
Các ràng buộc quan hệ
Chuyển đổi ER sang quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (0) 4/4


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ: Các khái niệm

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 1 / 16


Miền, lược đồ quan hệ

Một miền D (hoặc miền giá trị) là một tập hợp các giá trị nguyên tố:
mỗi giá trị trong miền là không thể phân chia được
Để đặc tả một miền, người ta chỉ ra một tên, một kiểu dữ liệu và
khuôn dạng dữ liệu, ví dụ:
Miền D1 : kiểu dữ liệu số nguyên có dấu 16 bit
Miền D2 : kiểu dữ liệu nhãn thời gian (timestamp: 2020-03-07 10:01:30)
Miền D3 : kiểu dữ liệu chuỗi ký tự có độ dài nhỏ hơn 32
Một lược đồ quan hệ R, ký hiệu là R(A1 , A2 , ..., An ), được tạo nên
từ một tên R và một danh sách các thuộc tính A1 , A2 , . . . , An với
Dom(Ai ) là miền giá trị của Ai

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 2 / 16


Quan hệ, cấp của quan hệ

Một quan hệ (hoặc trạng thái quan hệ) của lược đồ quan hệ
R(A1 , A2 , . . . , An ) được ký hiệu là r (R), là tập hợp
r (R) = {t1 , t2 , ..., tm }, trong đó mỗi ti được gọi là một n-bộ:
Mỗi n-bộ t =< v1 , v2 , . . . , vn > là một danh sách có thứ tự của n giá
trị vi , i = 1, n, trong đó mỗi vi , 1 ≤ i ≤ n, là một phần tử của
Dom(Ai ) hoặc là một giá trị không xác định null
Giá trị thứ i của bộ t được ký hiệu là t[Ai ]: t[Ai ] = vi
Hai bộ t, s trong r (R) được định nghĩa là bằng nhau t = s khi và chỉ
khi t[Ai ] = s[Ai ]∀i = 1, n
Cấp (hoặc ngôi) của một quan hệ là số các thuộc tính của lược đồ
quan hệ của nó
Cấp của lược đồ quan hệ R chúng ta đang xem xét là n

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 3 / 16


Ví dụ: Lược đồ quan hệ và quan hệ

Lược đồ quan hệ CONGDAN(SoCMND, HoTen, NgaySinh, GioiTinh)


Miền của các thuộc tính của lược đồ quan hệ CONGDAN:
Dom(SoCMND) = {Số tự nhiên có ít hơn 13 chữ số}
Dom(HoTen) = {Chuỗi ký tự độ dài nhỏ hơn 32},
Dom(NgaySinh) = Date và
Dom(GioiTinh) = {’Nam’, ’Nữ’}
Quan hệ r1 (CONGDAN) của lược đồ quan hệ CONGDAN:
SoCMND HoTen NgaySinh GioiTinh
1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ
t1 [SoCMND] = 1, t1 [SoCMND, HoTen] =< 1, Đỗ Nam Trung >,
t3 [HoTen, NgaySinh, GioiTinh] =< Trần Thu Ngân, 1995-10-17, Nữ >
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 4 / 16
Siêu khóa và khóa của lược đồ quan hệ

Một siêu khoá SK là một tập các thuộc tính của R thỏa mãn:
Không có hai bộ khác nhau trong một trạng thái r (R) có cùng một giá
trị cho SK , hay nói cách khác:
∀ti , tj ∈ r (R), i 6= j; ti 6= tj thì ti [SK ] 6= tj [SK ]
Một khóa K là một siêu khóa tối thiểu, nghĩa là nếu bỏ đi một tập
con S bất kỳ của K , K sẽ không còn là siêu khóa nữa:
K \ S không là siêu khóa ∀S ⊂ K

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 5 / 16


Ví dụ siêu khóa và khóa

Lược đồ quan hệ CONGDAN(SoCMND, HoTen, NgaySinh, GioiTinh):


Siêu khóa: SK = {SoCMND, HoTen, NgaySinh}
Khóa: K = {SoCMND}
Chỉ ra khóa trong lược đồ quan hệ:
CONGDAN(SoCMND, HoTen, NgaySinh, GioiTinh)
Một lược đồ quan hệ có thể có nhiều siêu khóa và nhiều khóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 6 / 16


Khóa ngoài của lược đồ quan hệ

Một tập hợp thuộc tính FK1 trong lược đồ quan hệ R1 là một khoá
ngoài của R1 tham chiếu đến lược đồ quan hệ R2 nếu nó thoả mãn
các điều kiện sau:
1 Các thuộc tính trong FK1 có cùng miền giá trị với các thuộc tính của
khoá chính PK2 trong R2 .
2 Giả sử t1 là một bộ bất kỳ của r1 (R1 ). Khi đó:
t1 [FK1 ] nhận giá trị null, hoặc
∃t2 ∈ r2 (R2 ) : t1 [FK1 ] = t2 [PK2 ]. Khi đó ta nói bộ t1 tham chiếu đến
bộ t2
R1 được gọi là lược đồ quan hệ tham chiếu và R2 được gọi là lược đồ
quan hệ bị tham chiếu
Tập FK1 được gọi là tập thuộc tính tham chiếu đến lược đồ quan hệ
R2

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 7 / 16


Ví dụ khóa ngoài: Lược đồ quan hệ

Xét lược đồ quan hệ VATNUOI(Loai, MauLong, SoCMNDChu), trong


đó miền của Loai và MauLong là chuỗi ký tự có độ dài nhỏ hơn 20,
SoCMNDChu là tập số tự nhiên có ít hơn 13 chữ số
SoCMND là khóa chính của lược đồ quan hệ CONGDAN
SoCMNDChu là khóa ngoài của lược đồ quan hệ VATNUOI tham
chiếu đến SoCMND là khóa chính của lược đồ quan hệ CONGDAN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 8 / 16


Ví dụ khóa ngoài: Trạng thái quan hệ

Quan hệ r1 (CONGDAN) (bị tham chiếu):


SoCMND HoTen NgaySinh GioiTinh
1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ
Quan hệ r2 (VATNUOI) (tham chiếu):
Loai MauLong SoCMNDChu
Mèo đen-trắng 1
Chó Trắng 3
Chó Vàng null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 9 / 16


Ví dụ khóa ngoài: Trạng thái quan hệ

SoCMND HoTen NgaySinh GioiTinh


1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ

Loai MauLong SoCMNDChu Giải thích


Mèo đen-trắng 1 Đỗ Nam Trung
Chó Trắng 3 Trần Thu Ngân
Chó Vàng null null
Không đúng với định
Mèo Tam thể 10
nghĩa khóa ngoài

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 10 / 16


Các ràng buộc quan hệ

Các ràng buộc miền: Các ràng buộc miền chỉ ra rằng giá trị của mỗi
thuộc tính A phải là một giá trị nguyên tố thuộc miền giá trị Dom(A)
Ràng buộc khóa: Với hai bộ khác nhau bất kỳ t1 và t2 trong một
trạng thái quan hệ r của R chúng ta có ràng buộc là t1 [SK ] 6= t2 [SK ]
Ràng buộc trên giá trị không xác định chỉ ra khi nào miền giá trị của
một thuộc tính được phép chứa giá trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 11 / 16


Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ

Một lược đồ cơ sở dữ liệu quan hệ S là một tập hợp các lược đồ


quan hệ S = {R1 , R2 , . . . , Rn } và một tập các ràng buộc toàn vẹn C
Một trạng thái cơ sở dữ liệu quan hệ (hoặc một cơ sở dữ liệu
quan hệ) DB(S) là một tập hợp các trạng thái quan hệ
DB(S) = {r1 , r2 , . . . , rn } sao cho mỗi ri là một trạng thái của Ri và
sao cho các trạng thái quan hệ ri thoả mãn các ràng buộc toàn vẹn
chỉ ra trong C

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 12 / 16


Các ràng buộc toàn vẹn

Các ràng buộc toàn vẹn bao gồm:


Ràng buộc toàn vẹn thực thể được phát biểu là: khoá chính phải
luôn luôn có giá trị xác định, nghĩa là không được phép có giá trị null
Ràng buộc toàn vẹn tham chiếu được phát biểu là: một bộ giá trị
trong một quan hệ có tham chiếu đến một quan hệ khác phải tham
chiếu đến một bộ giá trị tồn tại trong quan hệ đó, hoặc nhận các giá
trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 13 / 16


Ví dụ lược đồ cơ sở dữ liệu quan hệ

Lược đồ cơ sở dữ liệu S:
Tập các lược đồ quan hệ:
S = {CONGDAN(SoCMND, HoTen, NgaySinh, GioiTinh),
VATNUOI = (Loai, MauLong, SoCMNDChu)}
Tập các ràng buộc toàn vẹn C = {C1 , C2 }:
Ràng buộc toàn vẹn thực thể C1 : thuộc tính SoCMND là khóa chính
của CONGDAN, không được nhận giá trị null
Ràng buộc toàn vẹn tham chiếu C2 : thuộc tính SoCMNDChu là khóa
ngoài của VATNUOI tham chiếu đến khóa chính SoCMND của
CONGDAN; các giá trị của thuộc tính SoCMNDChu phải tham chiếu
đến một giá trị có trong SoCMND của quan hệ r1 (CONGDAN) hoặc là
null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 14 / 16


Ví dụ cơ sở dữ liệu quan hệ 1

Cơ sở dữ liệu (hoặc trạng thái cơ sở dữ liệu) DB1 (S):


Các trạng thái quan hệ:
SoCMND HoTen NgaySinh GioiTinh
1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ
Loai MauLong SoCMNDChu
Mèo đen-trắng 1
Chó Trắng 3
Chó Vàng null
Trạng thái DB1 (S) thỏa mãn các ràng buộc toàn vẹn thực thể C1 và
ràng buộc toàn vẹn tham chiếu C2

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 15 / 16


Ví dụ cơ sở dữ liệu quan hệ 2
Cơ sở dữ liệu (hoặc trạng thái cơ sở dữ liệu) DB2 (S):
Các trạng thái quan hệ:
SoCMND HoTen NgaySinh GioiTinh
1 Đỗ Nam Trung 1990-06-07 Nam
2 Nguyễn Đông Anh 1991-02-10 Nam
3 Trần Thu Ngân 1995-10-17 Nữ
4 Hoàng Vũ 1980-01-01 Nam
5 Lê Quỳnh Chi 2000-10-10 Nữ
Loai MauLong SoCMNDChu
Mèo đen-trắng 1
Chó Trắng 3
Chó Vàng null
Mèo Tam thể 10
Trạng thái DB2 (S) thỏa mãn ràng buộc toàn vẹn thực thể C1 , nhưng
không thỏa mãn ràng buộc toàn vẹn tham chiếu C2
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (1) https://bit.ly/37k5cab 16 / 16
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ: Các phép toán

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 1 / 25


Các lược đồ và trạng thái quan hệ
Lược đồ: DONVI(MaDV , TenDV , MaNV , NgayBatDau) và
DUAN(MaDA, TenDA, DiaDiem, MaDV )
Thuộc tính MaDV của DUAN là khóa ngoài tham chiếu tới khóa
chính MaDV của DONVI
Quan hệ DONVI:
MaDV TenDV MaNV NgayBatDau
DV1 Tài chính NV1 2020-01-09
DV2 Nhân sự NV5 2017-07-15
DV3 Kinh doanh NV2 2018-09-10
DV4 Quản trị NV8 2018-09-10
Quan hệ DUAN:
MaDA TenDA DiaDiem MaDV
DA1 Tuyển dụng Cần Thơ DV2
DA2 Quảng cáo trực tuyến Toàn quốc DV3
DA3 Xây dựng phần mềm tài chính Hà Nội DV1
DA4 Qui trình nghiệp vụ Hà Nội null
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 2 / 25
Các phép toán cập nhật

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 3 / 25


Phép chèn (insert)

Phép chèn (insert) đưa một bộ mới t vào một quan hệ R, với tham
số là bộ giá trị của các thuộc tính. Phép chèn có thể vi phạm các
ràng buộc miền, khóa và toàn vẹn tham chiếu:
Lược đồ DUAN(MaDA, TenDA, DiaDiem, MaDV ):
Phép chèn bộ < null,’Phát tờ rơi’,’Đà Nẵng’,’DV3’> vào DUAN vi
phạm ràng buộc toàn vẹn thực thể: giá trị null cho khóa chính
Phép chèn bộ < ’DA2’,’Phát tờ rơi’,’Đà Nẵng’,’DV3’> vào DUAN vi
phạm ràng buộc khóa: giá trị khóa ’DA2’ đã tồn tại
Phép chèn bộ < ’DA5’,’Phát tờ rơi’,’Đà Nẵng’,’DV7’> vào DUAN vi
phạm ràng buộc tham chiếu: không có giá trị khóa ’DV7’ trong quan
hệ bị tham chiếu DONVI
Phép chèn bộ < ’DA5’,’Phát tờ rơi’,’Đà Nẵng’,’DV3’> vào DUAN
được chấp nhận vì thoả mãn tất cả các ràng buộc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 4 / 25


Phép chèn (insert)

Nếu chèn bộ < ’DA5’,’Phát tờ rơi’,’Đà Nẵng’,’DV3’> vào DUAN, quan


hệ này trở thành:

MaDA TenDA DiaDiem MaDV


DA1 Tuyển dụng Cần Thơ DV2
DA2 Quảng cáo trực tuyến Toàn quốc DV3
DA3 Xây dựng phần mềm tài chính Hà Nội DV1
DA4 Qui trình nghiệp vụ Hà Nội null
DA5 Phát tờ rơi Đà Nẵng DV3

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 5 / 25


Phép xóa (delete)

Phép xoá (delete) được sử dụng để xoá một hoặc nhiều bộ giá trị của
một quan hệ. Phép xoá có thể vi phạm ràng buộc tham chiếu trong
trường hợp bộ bị xoá được tham chiếu từ các bộ khác trong cơ sở dữ liệu
Xóa bộ <’DV3’, ’Kinh doanh’, ’NV2’, ’2018-09-10’> trong DONVI vi
phạm toàn vẹn tham chiếu, do giá trị khóa chính ’DV3’ được tham
chiếu từ bộ <’DA2’, ’Quảng cáo trực tuyến’, ’Toàn quốc’, ’DV3’ >
của DUAN, do đó không được chấp nhận
Xóa bộ <’DV4’, ’Quản trị’, ’NV8’, ’2018-09-10’ > trong DONVI
được chấp nhận vì không vi phạm ràng buộc tham chiếu: không có
tham chiếu đến giá trị khóa chính ’DV4’

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 6 / 25


Phép xóa (delete)

Nếu xóa bộ < ’DV4’,’Quản trị’,’NV8’,’2018-09-10’ > từ DONVI, quan hệ


này trở thành:

MaDA TenDV MaNV NgayBatDau


DV1 Tài chính NV1 2020-01-09
DV2 Nhân sự NV5 2017-07-15
DV3 Kinh doanh NV2 2018-09-10

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 7 / 25


Phép sửa (update)

Phép sửa (update) được dùng để thay đổi các giá trị của một hoặc
nhiều thuộc tính trong một (hoặc nhiều) bộ của một quan hệ
Việc sửa một thuộc tính không phải là khóa hoặc khóa ngoài thường
không gây ra các vi phạm ràng buộc, hệ quản trị cơ sở dữ liệu chỉ
kiểm tra giá trị mới thuộc miền
Sửa giá trị khóa chính tương đương với xóa bộ cũ và chèn bộ mới:
Các vi phạm ràng buộc tuân theo các ràng buộc của phép chèn và xóa
Sửa giá trị khóa ngoài: cần đảm bảo giá trị mới thỏa mãn ràng buộc
tham chiếu, tức là giá trị mới hoặc là null hoặc phải tham chiếu đến
một bộ tồn tại trong quan hệ bị tham chiếu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 8 / 25


Các phép toán đại số quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 9 / 25


Phép chọn (select)

Phép chọn (select) được sử dụng để chọn một tập hợp các bộ thỏa
mãn điều kiện chọn từ một quan hệ
Có thể xem phép chọn như một bộ lọc, nó chỉ giữ lại các bộ thỏa
mãn điều kiện đặt ra
Phép chọn được ký hiệu là σ<cond> (R), trong đó < cond > là điều
kiện chọn
Danh sách dự án có địa điểm ở Hà Nội: σ<DiaDiem=’Hà Nội’> (DUAN),
kết quả:
MaDA TenDA DiaDiem MaDV
DA3 Xây dựng phần mềm tài chính Hà Nội DV1
DA4 Qui trình nghiệp vụ Hà Nội null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 10 / 25


Phép chiếu (project)

Nếu ta xem một quan hệ như một bảng thì phép chiếu (project) là
phép toán chọn một số cột của bảng
Phép chiếu được ký hiệu là: π<attr > (R) trong đó < attr > là tập con
các thuộc tính của R.
Liệt kê tên và địa điểm các dự án: π<TenDA,DiaDiem> (DUAN), kết quả:
TenDA DiaDiem
Tuyển dụng Cần Thơ
Quảng cáo trực tuyến Toàn quốc
Xây dựng phần mềm tài chính Hà Nội
Qui trình nghiệp vụ Hà Nội

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 11 / 25


Phép đổi tên (rename)

Phép đổi tên được ký hiệu là ρS(B1 ,B2 ,...,Bn ) (R), ρS (R) hoặc
ρ(B1 ,B2 ,...,Bn ) (R), trong đó:
ρS(B1 ,B2 ,...,Bn ) (R) đổi tên quan hệ R(A1 , A2 , ..., An ) thành
S(B1 , B2 , ..., Bn ) với tên các thuộc tính mới là B1 , B2 , ..., Bn ,
ρS (R) chỉ đổi tên quan hệ R thành S và
ρ(B1 ,B2 ,...,Bn ) (R) chỉ đổi tên các thuộc tính của R từ A1 , A2 , ..., An
thành B1 , B2 , ..., Bn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 12 / 25


Phép đổi tên (rename)

Để tìm mã và tên các dự án ở Hà Nội trong quan hệ DUAN, chúng


ta có thể làm một trong hai cách:
Tenduan ← π<MaDA,TenDA> (σ<DiaDiem=’Hà Nội’> (DUAN)), hoặc
HN ← σ<DiaDiem=’Hà Nội’> (DUAN)
Tenduan ← π<MaDA,TenDA> (HN)
Hai cách trên đều cho kết quả:
MaDA TenDA
DA3 Xây dựng phần mềm tài chính
DA4 Qui trình nghiệp vụ

Đổi tên quan hệ kết quả: ρProject(PrCode,PrName) (Tenduan)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 13 / 25


Các phép toán lý thuyết tập hợp

Các phép toán lý thuyết tập hợp chỉ áp dụng được cho các quan hệ
R(A1 , A2 , ..., An ) và S(B1 , B2 , ..., Bn ) thỏa mãn điều kiện tương thích
đồng nhất: Dom(Ai ) = Dom(Bi )∀i = 1, n
Phép hợp: Hợp của hai quan hệ R và S, được ký hiệu là R ∪ S, cho
kết quả là một quan hệ chứa tất cả các bộ có trong R hoặc ở trong S
hoặc ở trong cả hai. Các bộ trùng lặp bị loại bỏ
Phép giao: Giao của hai quan hệ R và S, được ký hiệu là R ∩ S, cho
kết quả là một quan hệ chứa tất các các bộ có trong cả hai quan hệ
R và S
Phép trừ: Phép trừ R và S, được ký hiệu là R − S, cho kết quả là
một quan hệ chứa tất cả các bộ có trong R nhưng không có trong S

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 14 / 25


Tích Đề-các (×)

Tích Đề-các của hai quan hệ R(A1 , A2 , ..., An ) và S(B1 , B2 , ..., Bm ),


ký hiệu là R(A1 , A2 , ..., An ) × S(B1 , B2 , ..., Bm ), được dùng để kết
hợp mọi bộ của R với mọi bộ của S
Kết quả của tích Đề-các là quan hệ Q(A1 , A2 , ..., An , B1 , B2 , ..., Bm )
có m + n thuộc tính
Giả sử R có nR bộ, S có nS bộ, khi đó Q có nR × nS bộ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 15 / 25


Tích Đề-các (×)
Tích Đề-các của DONVI và DUAN có 16 bộ như sau:

MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem DUAN.MaDV


DV1 Tài chính NV1 2020-01-09 DA1 Tuyển dụng Cần Thơ DV2
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ DV2
DV3 Kinh doanh NV2 2018-09-10 DA1 Tuyển dụng Cần Thơ DV2
DV4 Quản trị NV8 2018-09-10 DA1 Tuyển dụng Cần Thơ DV2
Quảng cáo trực
DV1 Tài chính NV1 2020-01-09 DA2 Toàn quốc DV3
tuyến
Quảng cáo trực
DV2 Nhân sự NV5 2017-07-15 DA2 Toàn quốc DV3
tuyến
Quảng cáo trực
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc DV3
tuyến
Quảng cáo trực
DV4 Quản trị NV8 2018-09-10 DA2 Toàn quốc DV3
tuyến
Xây dựng phần mềm
DV1 Tài chính NV1 2020-01-09 DA3 Hà Nội DV1
tài chính
Xây dựng phần mềm
DV2 Nhân sự NV5 2017-07-15 DA3 Hà Nội DV1
tài chính
Xây dựng phần mềm
DV3 Kinh doanh NV2 2018-09-10 DA3 Hà Nội DV1
tài chính
Xây dựng phần mềm
DV4 Quản trị NV8 2018-09-10 DA3 Hà Nội DV1
tài chính
DV1 Tài chính NV1 2020-01-09 DA4 Qui trình nghiệp vụ Hà Nội null
DV2 Nhân sự NV5 2017-07-15 DA4 Qui trình nghiệp vụ Hà Nội null
DV3 Kinh doanh NV2 2018-09-10 DA4 Qui trình nghiệp vụ Hà Nội null
DV4 Quản trị NV8 2018-09-10 DA4 Qui trình nghiệp vụ Hà Nội null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 16 / 25


Phép nối (join)

Phép nối (join) Phép nối được ký hiệu là 1 và được dùng để kết
hợp các bộ có liên hệ với nhau từ hai quan hệ thành một bộ. Phép
toán này rất quan trọng đối với cơ sở dữ liệu quan hệ có nhiều bảng
bởi vì nó cho phép ta xử lý các mối liên kết giữa các quan hệ
Dạng tổng quát của phép nối trên hai quan hệ R(A1 , A2 , . . . , An ) và
S(B1 , B2 , . . . , Bm ) là R 1 S trong đó < cond > là điều kiện nối.
<cond>
Kết quả của phép nối là một quan hệ
Q(A1 , A2 , . . . , An , B1 , B2 , . . . , Bm ) có n + m thuộc tính.
Mỗi bộ của Q là một kết nối giữa một bộ của R và một bộ của S
thoả mãn điều kiện nối
R 1 S = σ<cond> (R × S)
<cond>
Hầu hết các phép nối đều có < cond > là so sánh bằng; các phép nối
đó được gọi là phép nối bằng (equi-join)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 17 / 25


Phép nối (join)

Phép nối Q ← DONVI 1 DUAN cho kết quả:


<DONVI.MaDV =DUAN.MaDV >

MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem DUAN.MaDV


Xây dựng
DV1 Tài chính NV1 2020-01-09 DA3 phần mềm Hà Nội DV1
tài chính
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ DV2
Quảng cáo
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc DV3
trực tuyến

trong đó ký hiệu DONVI.MaDV nhằm chỉ rõ thuộc tính MaDV là của quan
hệ DONVI.

Kết quả của phép nối là một quan hệ Q có 8 thuộc tính, trong đó 4
thuộc tính đầu được lấy từ các thuộc tính của DONVI, 4 thuộc tính
còn lại lấy từ DUAN
Ở mỗi bộ của Q, chúng ta thấy điều kiện nối được thỏa mãn:
MaDV = DUAN.MaDV , với MaDV được hiểu là DONVI.MaDV

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 18 / 25


Phép nối tự nhiên (*)
Trong ví dụ phép nối, có hai thuộc tính của hai quan hệ DONVI và
DUAN trùng tên, đó là MaDV , do đó chúng ta chỉ rõ DUAN.MaDV
trong cột cuối để tránh nhầm lẫn
Quan hệ Q là kết quả của phép nối bằng, nên cả hai cột MaDV có
mặt trong Q là dư thừa → người ta đề nghị phép nối tự nhiên, ký
hiệu là ∗, nhằm loại bỏ các thuộc tính thừa
Phép nối tự nhiên đòi hỏi các quan hệ tham gia phải có các thuộc
tính trùng tên
Phép nối tự nhiên Q∗ ← DONVI ∗ DUAN cho kết quả:
<MaDV >

MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem


Xây dựng
DV1 Tài chính NV1 2020-01-09 DA3 phần mềm tài Hà Nội
chính
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ
Quảng cáo
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc
trực tuyến

MaDV dư thừa đã bị loại bỏ


N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 19 / 25
Tập hợp đầy đủ các phép toán quan hệ

Tập các phép toán P = {σ, π, ∪, −, ×} là một tập đầy đủ: Mọi phép
toán đại số quan hệ khác đều có thể được biểu diễn qua các phép
toán trong P
Ví dụ:
Phép nối: R 1 S = σ<cond> (R × S)
<cond>
Phép giao: R ∩ S = (R ∪ S) − ((R − S) ∪ (S − R))

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 20 / 25


Các phép toán nối mở rộng

Có ba phép nối mở rộng là nối ngoài trái (left outer join), nối
ngoài phải (right outer join) và nối ngoài đầy đủ (full outer
join), ký hiệu tương ứng là: ./, ./ , ./
Phép nối ngoài trái của R(A1 , A2 , ..., An ) và S(B1 , B2 , ..., Bm ) được
định nghĩa như sau:
R ./ S = (R 1 S) ∪ T , trong đó T là một quan hệ gồm các
<cond> <cond>
bộ < a1 , a2 , ..., an , null, ..., null > (m giá trị null), trong đó
< a1 , a2 , ..., an >∈ R không thỏa mãn điều kiện < cond >
Tương tự như vậy đối với các phép nối ngoài phải và các phép nối
ngoài đầy đủ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 21 / 25


Phép nối ngoài trái ./

Kết quả của DONVI ./ DUAN:


DONVI.MaDV =DUAN.MaDV
MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem
Xây dựng phần
DV1 Tài chính NV1 2020-01-09 DA3 Hà Nội
mềm tài chính
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ
Quảng cáo trực
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc
tuyến
DV4 Quản trị NV8 2018-09-10 null null null

Các đơn vị không giám sát dự án nào: MaDA nhận giá trị null trong
kết quả phép nối ngoài trái

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 22 / 25


Phép nối ngoài phải ./

Kết quả của DONVI ./ DUAN:


DONVI.MaDV =DUAN.MaDV
MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem
null null null null DA4 Qui trình nghiệp vụ Hà Nội
Xây dựng phần
DV1 Tài chính NV1 2020-01-09 DA3 Hà Nội
mềm tài chính
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ
Quảng cáo trực
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc
tuyến

Các dự án chưa có đơn vị nào quản lý: MaDV nhận giá trị null trong
kết quả phép nối ngoài phải

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 23 / 25


Phép nối ngoài đầy đủ ./

Kết quả của DONVI ./ DUAN:


DONVI.MaDV =DUAN.MaDV
MaDV TenDV MaNV NgayBatDau MaDA TenDA DiaDiem
null null null null DA4 Qui trình nghiệp vụ Hà Nội
Xây dựng phần
DV1 Tài chính NV1 2020-01-09 DA3 Hà Nội
mềm tài chính
DV2 Nhân sự NV5 2017-07-15 DA1 Tuyển dụng Cần Thơ
Quảng cáo trực
DV3 Kinh doanh NV2 2018-09-10 DA2 Toàn quốc
tuyến
DV4 Quản trị NV8 2018-09-10 null null null

Các đơn vị không giám sát dự án nào: MaDA nhận giá trị null trong
kết quả phép nối ngoài trái
Các dự án chưa có đơn vị nào quản lý: MaDV nhận giá trị null trong
kết quả phép nối ngoài phải

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 24 / 25


Các hàm nhóm và phép nhóm

Phép nhóm: <attr > J<f > (R) (ký hiệu J trong tiếng Anh là
"calligraphic J")
J là ký hiệu phép nhóm, < attr > là danh sách các thuộc tính nhóm,
< f > là danh sách các cặp (<hàm><thuộc tính>) với <hàm> là
một trong các hàm SUM, AVERAGE, MIN, MAX, COUNT và
<thuộc tính> là một trong các thuộc tính của R
Kết quả của DiaDiem JCOUNT () (DUAN):

DiaDiem Tongso
Cần Thơ 1
Hà Nội 2
Toàn quốc 1
Ý nghĩa: Đếm tổng số dự án ở mỗi địa điểm

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (2) https://bit.ly/3hi5Hq7 25 / 25


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ:
Chuyển đổi mô hình ER thành mô hình quan hệ

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 1 / 23


Lược đồ ER CONGTY

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 2 / 23


1. Chuyển đổi thực thể mạnh

Với mỗi kiểu thực thể thông thường E trong lược đồ ER, tạo một
lược đồ quan hệ R(E ) chứa mọi thuộc tính đơn của E
Với các thuộc tính phức hợp của E , chỉ lấy các thành phần đơn đưa
vào làm thuộc tính của R(E )
Chọn một trong các thuộc tính khoá của E làm khoá chính cho R(E )

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 3 / 23


Chuyển đổi thực thể mạnh

Các lược đồ quan hệ tương ứng với các thực thể mạnh:
NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi)
DONVI(MaDV , TenDV , DiaDiem), DiaDiem là thuộc tính đa trị, sẽ được
chuyển đổi ở bước 6
DUAN(MaDA, TenDA, DiaDiem)
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 4 / 23
2. Chuyển đổi thực thể yếu

Giả sử W là một kiểu thực thể yếu có kiểu thực thể chủ là E trong
lược đồ ER. Giả sử lược đồ quan hệ tương ứng của E là R(E )
Tạo một lược đồ quan hệ R(W ) có các thuộc tính là:
Tất cả các thuộc tính đơn
Tất cả các thành phần đơn của các thuộc tính phức hợp của W
Đưa các thuộc tính khoá chính KR(E ) của R(E ) làm khoá ngoài của
R(W ), tham chiếu đến R(E ). Các thuộc tính này sẽ xác định kiểu
liên kết của W .
Khoá chính của R(W ) là một tổ hợp bao gồm KR(E ) và khoá bộ
phận của R(W ) nếu có

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 5 / 23


Chuyển đổi thực thể yếu

Lược đồ quan hệ tương ứng với thực thể yếu: CON(Ten, Ngaysinh, GioiTinh,
MaNV , MaNV 2) có khóa chính là {Ten, Ngaysinh, GioiTinh, MaNV }, đồng thời
MaNV là khóa ngoài tham chiếu tới NHANVIEN. Do bố mẹ của CON có thể
cùng làm ở công ty hoặc không, chúng ta thêm thuộc tính MaNV 2 cũng là khóa
ngoài tham chiếu đến NHANVIEN, nhưng thuộc tính này có thể nhận giá trị null.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 6 / 23
3. Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : 1

Giả sử E , F là hai kiểu thực thể trong lược đồ ER có liên kết 1:1 R,
chúng ta xác định hai lược đồ quan hệ tương ứng R(E ), R(F ). Lưu ý
hai lược đồ này đã được xác định ở bước 1
Đưa khoá chính của R(F ) vào làm khoá ngoài của R(E ) tham chiếu
đến R(F )
Nên chọn E là một kiểu thực thể tham gia toàn bộ vào R (nếu có
thể). Đưa tất cả các thuộc tính đơn và các thành phần đơn của các
thuộc tính phức hợp của R vào làm các thuộc tính của E
Khóa ngoài nên đặt ở phía lược đồ quan hệ tương ứng với thực thể
tham gia toàn bộ (nếu có thể)
Nếu cả E và F đều tham gia toàn bộ vào R, có một cách khác để
chuyển đổi là nhập cả hai kiểu thực thể và liên kết thành một quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 7 / 23


Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : 1

Lược đồ quan hệ tương ứng với liên kết 1 : 1 QUANLY , chúng ta thêm thuộc
tính cho lược đồ quan hệ DONVI:
DONVI(MaDV , TenDV , DiaDiem, MaNV , NgayBatDau); MaNV chỉ ra
người quản lý của DONVI, đồng thời là khóa ngoài tham chiếu đến
NHANVIEN, NgayBatDau cho biết ngày nhân viên có mã MaNV bắt đầu
tham gia quản lý đơn vị. Thuộc tính DiaDiem sẽ được xử lý ở bước 6.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 8 / 23
4. Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : N

Với mỗi kiểu liên kết hai ngôi R1n kiểu 1 : N của hai kiểu thực thể E1
và En , trước hết chúng ta xác định lược đồ quan hệ R(En ) biểu diễn
kiểu thực thể En tham gia ở phía N của R1n
Đưa khoá chính của lược đồ quan hệ R(E1 ) biểu diễn kiểu thực thể
tham gia vào R1n ở phía 1 vào làm khoá ngoài trong En .
Khóa ngoài nằm ở phía N
Đưa các thuộc tính đơn và các thành phần đơn của các thuộc tính
phức hợp của R1n vào làm các thuộc tính của En

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 9 / 23


Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : N

Các lược đồ quan hệ tương ứng với liên kết 1 : N:

Liên kết LAMVIEC : chúng ta bổ sung thuộc tính MaDV vào NHANVIEN
để thể hiện liên kết LAMVIEC , chỉ ra nhân viên đang làm việc cho đơn vị nào:
NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi, MaDV ).
MaDV là khóa ngoài của NHANVIEN tham chiếu đến DONVI.

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 10 / 23


Giải thích ký hiệu (min, max ) và tỷ số lực lượng
NHANVIEN DONVI
NV 1 ĐV 1
NV 2 ĐV 1
NV 3 ĐV 1
NV 4 ĐV 1
NV 5 ĐV 1
NV 6 ĐV 2
NV 7 ĐV 2
NV 8 ĐV 2
NV 9 ĐV 2

NHANVIEN-(1, 1)-LAMVIEC : thực thể trong kiểu nhân viên tham gia ít nhất 1 và
nhiều nhất 1 trong liên kết - mỗi nhân viên làm việc cho 1 đơn vị duy nhất
DONVI-(4, N)-LAMVIEC : thực thể trong kiểu DONVI tham gia ít nhất 4 và nhiều
nhất N trong liên kết - mỗi đơn vị có ít nhất 4 nhân viên, nhiều nhất N nhân viên
Tỷ số lực lượng NHANVIEN : DONVI = N : 1 → Khóa ngoài nằm ở phía N
(NHANVIEN)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 11 / 23


Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : N

Liên kết đệ qui GIAMSAT : chúng ta bổ sung thuộc tính NguoiGS ở vai trò
"bị giám sát" để chỉ ra người đang giám sát một nhân viên. NguoiGS là
khóa ngoài của NHANVIEN tham chiếu đến NHANVIEN, thuộc tính này
nhận giá trị null nếu nhân viên không bị ai giám sát:
NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi,
MaDV , NguoiGS)
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 12 / 23
Chuyển đổi liên kết cấp 2 có tỷ số lực lượng 1 : N

Liên kết KIEMSOAT : chúng ta bổ sung MaDV vào DUAN để thể hiện liên
kết KIEMSOAT , chỉ ra dự án đang do đơn vị nào kiểm soát:
DUAN(MaDA, TenDA, DiaDiem, MaDV ). MaDV là khóa ngoài của DUAN
tham chiếu đến DONVI.
Tỷ số lực lượng DUAN : DONVI = N : 1 → Khóa ngoài nằm ở phía N

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 13 / 23


5. Chuyển đổi liên kết cấp 2 có tỷ số lực lượng M : N

Với mỗi kiểu liên kết M : N hai ngôi của hai thực thể Em , En , tạo ra
một lược đồ quan hệ mới Rmn để biểu diễn kiểu liên kết đó
Đưa các khoá chính của Em , En làm khoá ngoài của Rmn , tham chiếu
tương ứng đến Em , En . Tổ hợp các khoá chính của Em , En sẽ tạo nên
khoá chính của Rmn
Đưa tất cả các thuộc tính đơn, các thành phần đơn của các thuộc
tính phức hợp của kiểu liên kết vào làm các thuộc tính của Rmn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 14 / 23


Chuyển đổi liên kết cấp 2 có tỷ số lực lượng M : N

Lược đồ quan hệ tương ứng với liên kết M : N:


Liên kết THAMGIA: chúng ta tạo một lược đồ quan hệ mới
THAMGIA(MaNV , MaDA, SoGio) với {MaNV , MaDA} là khóa chính, đồng
thời MaNV là khóa ngoài tham chiếu đến NHANVIEN, MaDA là khóa
ngoài tham chiếu đến DUAN. SoGio là thuộc tính của liên kết THAMGIA
chỉ ra số giờ tham gia dự án của nhân viên.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 15 / 23
6. Chuyển đổi các thuộc tính đa trị

Với mỗi thuộc tính đa trị A của một thực thể hoặc liên kết, tạo ra
một lược đồ quan hệ mới RA
Gọi lược đồ quan hệ ứng với thực thể hoặc liên kết nói trên là R (đã
được tạo ra ở các bước trước). Giả sử khóa của R là K
Các thuộc tính của RA gồm một thuộc tính tương ứng với A và K
K là khoá ngoài của RA tham chiếu đến R
Khoá chính của RA là tổ hợp của A và K
Bỏ thuộc tính đa trị A ra khỏi R
Chú ý: Nếu A là phức hợp thì chúng ta chỉ đưa vào RA các thành
phần đơn của A

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 16 / 23


Chuyển đổi các thuộc tính đa trị

Chúng ta có một thuộc tính đa trị cần chuyển đổi: DiaDiem của lược đồ quan hệ
DONVI:
Chúng ta tạo một lược đồ mới DIADIEMDV (MaDV , DiaDiem) và thay đổi
DONVI(MaDV , TenDV , DiaDiem, MaNV , NgayBatDau) thành
DONVI(MaDV , TenDV , MaNV , NgayBatDau). Thuộc tính MaDV của
DIADIEMDV là một thành phần của khóa chính và là khóa ngoài tham
chiếu đến DONVI.
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 17 / 23
Lược đồ cơ sở dữ liệu quan hệ CONGTY

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/2XOmF7D 18 / 23


7. Chuyển đổi các kiểu liên kết cấp n ≥ 3

Với mỗi kiểu liên kết n ngôi (cấp n) của n kiểu thực thể E1 , E2 , ..., En ;
n ≥ 3, tạo ra một lược đồ quan hệ R12...n để biểu diễn kiểu liên kết đó
Các lược đồ quan hệ biểu diễn các kiểu thực thể E1 , E2 , ..., En là
R(E1 ), R(E2 ), ..., R(En ) có khóa chính tương ứng là K1 , K2 , ..., Kn
Đưa K1 , K2 , ..., Kn tham gia làm khoá ngoài của R12...n
Đưa tất cả các thuộc tính đơn, các thành phần đơn của các thuộc
tính phức hợp của kiểu liên kết n-ngôi vào làm thuộc tính của R12...n .
Khoá chính của R12...n thường là tổ hợp của K1 , K2 , ..., Kn
Tuy nhiên, nếu ràng buộc lực lượng của một kiểu thực thể
Ei ; 1 ≥ i ≥ n nào đó khi tham gia vào liên kết là 1 thì khoá chính của
R12...n không chứa Ki

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/3qzZ4DN 19 / 23


Ví dụ chuyển đổi kiểu liên kết cấp 3 (1)

Ràng buộc: Với mỗi loại vật tư v ở mỗi dự án p, chúng ta có nhiều


đại lý d cung cấp
Ràng buộc này tương đương với: mỗi cặp {v , p} có thể xuất hiện
nhiều lần trong tập liên kết CUNGCAP
Khi đó chúng ta thể hiện ràng buộc lực lượng với L ở DAILY , M ở
DUAN và N ở VATTU
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/3qzZ4DN 20 / 23
Các lược đồ quan hệ cho kiểu liên kết cấp 3 (1)

Các lược đồ quan hệ của các thực thể: DAILY (SoDangKy , TenDL),
VATTU(MaVT , TenVT ) và DUAN(MaDA, TenDA, DiaDiem)
Lược đồ quan hệ của liên kết cấp 3:
CUNGCAP(MaDL, MaVT , MaDA, SoLuong), trong đó
MaDL, MaVT , MaDA là các khóa ngoài tương ứng tham chiếu đến
DAILY , VATTU và DUAN
{MaDL, MaVT , MaDA} là khóa của CUNGCAP, nên
{MaVT , MaDA} không là khóa → {v , p} không xác định duy nhất d
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/3qzZ4DN 21 / 23
Ví dụ chuyển đổi kiểu liên kết cấp 3 (2)

Ràng buộc: Với mỗi loại vật tư v ở mỗi dự án p, chúng ta chỉ có một
đại lý d cung cấp duy nhất
Ràng buộc này tương đương với: mỗi cặp {v , p} chỉ xuất hiện một
lần trong tập liên kết CUNGCAP
Khi đó chúng ta thể hiện ràng buộc lực lượng với 1 ở DAILY , M ở
DUAN và N ở VATTU
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/3qzZ4DN 22 / 23
Các lược đồ quan hệ cho kiểu liên kết cấp 3 (2)

Các lược đồ quan hệ của các thực thể: DAILY (SoDangKy , TenDL),
VATTU(MaVT , TenVT ) và DUAN(MaDA, TenDA, DiaDiem)
Lược đồ quan hệ của liên kết cấp 3:
CUNGCAP(MaDL, MaVT , MaDA, SoLuong) trong đó
MaDL, MaVT , MaDA là các khóa ngoài (MaDL không phải là thuộc
tính khóa) tương ứng tham chiếu đến DAILY , VATTU và DUAN
{MaVT , MaDA} là khóa của CUNGCAP do đó {v , p} xác định duy
nhất d
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (3) https://bit.ly/3qzZ4DN 23 / 23
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ: SQL cơ bản

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 1 / 35


Cơ sở dữ liệu quan hệ và các lược đồ quan hệ

Cơ sở dữ liệu quan hệ dvda có hai lược đồ:


DONVI(MaDV , TenDV , MaNV , NgayBatDau) và
DUAN(MaDA, TenDA, DiaDiem, MaDV )
Thuộc tính MaDV của DUAN là khóa ngoài tham chiếu tới khóa
chính MaDV của DONVI
Mã lệnh tạo và sử dụng cơ sở dữ liệu:
PostgreSQL:

1 create database dvda; -- Tạo CSDL


2 \c dvda; -- Sử dụng CSDL

MySQL:

3 create database dvda -- Tạo CSDL


4 default character set utf8 -- bộ mã
5 default collate utf8_general_ci; -- qui tắc so sánh ký tự
6 use dvda; -- Sử dụng CSDL

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 2 / 35


Cơ sở dữ liệu quan hệ và các lược đồ quan hệ

Mã lệnh SQL để tạo các lược đồ và tham chiếu:

1 create table DONVI(MaDV varchar(16), TenDV varchar(128),


2 MaNV varchar(16), NgayBatDau date, primary key(MaDV));
3 CREATE TABLE
4
5 create table DUAN(MaDA varchar(16), TenDA varchar(256),
6 DiaDiem varchar(128), MaDV varchar(16), primary key(MaDA));
7 CREATE TABLE
8
9 alter table DUAN add constraint FK_DUAN_DONVI
10 foreign key (MaDV) references DONVI(MaDV);
11 ALTER TABLE

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 3 / 35


Thông tin về các lược đồ quan hệ

1 \d DONVI -- MySQL: desc DONVI;


2 Table "public.donvi"
3 Column | Type | Collation | Nullable | Default
4 ------------+------------------------+-----------+----------+---------
5 madv | character varying(16) | | not null |
6 tendv | character varying(128) | | |
7 manv | character varying(16) | | |
8 ngaybatdau | date | | |
9 Indexes:
10 "donvi_pkey" PRIMARY KEY, btree (madv)
11 Referenced by:
12 TABLE "duan" CONSTRAINT "fk_duan_donvi" FOREIGN KEY (madv) REFERENCES donvi(madv)
13
14 \d DUAN -- MySQL: desc DUAN;
15 Table "public.duan"
16 Column | Type | Collation | Nullable | Default
17 ---------+------------------------+-----------+----------+---------
18 mada | character varying(16) | | not null |
19 tenda | character varying(256) | | |
20 diadiem | character varying(128) | | |
21 madv | character varying(16) | | |
22 Indexes:
23 "duan_pkey" PRIMARY KEY, btree (mada)
24 Foreign-key constraints:
25 "fk_duan_donvi" FOREIGN KEY (madv) REFERENCES donvi(madv)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 4 / 35


Tạo trạng thái ban đầu cho các quan hệ

1 insert into DONVI (MaDV, TenDV, MaNV, NgayBatDau) values


2 ('DV1', 'Tài chính', 'NV1', '2020-01-09'),
3 ('DV2', 'Nhân sự', 'NV5', '2017-07-15'),
4 ('DV3', 'Kinh doanh', 'NV2', '2018-09-10'),
5 ('DV4', 'Quản trị', 'NV8', '2018-09-10');
6 INSERT 0 4
7
8 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values
9 ('DA1', 'Tuyển dụng', 'Cần Thơ', 'DV2'),
10 ('DA2', 'Quảng cáo trực tuyến', 'Toàn quốc', 'DV3'),
11 ('DA3', 'Xây dựng phần mềm tài chính', 'Hà Nội', 'DV1'),
12 ('DA4', 'Qui trình nghiệp vụ', 'Hà Nội', NULL);
13 INSERT 0 4

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 5 / 35


Trạng thái ban đầu của các quan hệ
Quan hệ (bảng) DONVI:

1 select * from DONVI;


2 madv | tendv | manv | ngaybatdau
3 ------+------------+------+------------
4 DV1 | Tài chính | NV1 | 2020-01-09
5 DV2 | Nhân sự | NV5 | 2017-07-15
6 DV3 | Kinh doanh | NV2 | 2018-09-10
7 DV4 | Quản trị | NV8 | 2018-09-10
8 (4 rows)

Quan hệ (bảng) DUAN:

9 select * from DUAN;


10 mada | tenda | diadiem | madv
11 ------+-----------------------------+-----------+------
12 DA1 | Tuyển dụng | Cần Thơ | DV2
13 DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
14 DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
15 DA4 | Qui trình nghiệp vụ | Hà Nội |
16 (4 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 6 / 35


Các phép toán cập nhật

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 7 / 35


Phép chèn (insert)

Phép chèn có thể vi phạm các ràng buộc miền, toàn vẹn thực thể, khóa và
toàn vẹn tham chiếu:
Phép chèn vi phạm ràng buộc miền:

1 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values


2 ('DA10', repeat('Ten du an', 30),'Đà Nẵng','DV3');
3 ERROR: value too long for type character varying(256)

Phép chèn vi phạm ràng buộc toàn vẹn thực thể (giá trị null cho
khóa chính):

4 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values


5 (NULL, 'Phát tờ rơi','Đà Nẵng','DV3');
6 ERROR: null value in column "mada" of relation "duan" violates not-null
,→ constraint
7 DETAIL: Failing row contains (null, Phát tờ rơi, Đà Nẵng, DV3).

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 8 / 35


Phép chèn (insert)

Phép chèn vi phạm ràng buộc khóa (giá trị khóa ’DA2’ đã tồn tại):

1 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values


2 ('DA2', 'Phát tờ rơi','Đà Nẵng','DV3');
3 ERROR: duplicate key value violates unique constraint "duan_pkey"
4 DETAIL: Key (mada)=(DA2) already exists.

Phép chèn vi phạm ràng buộc tham chiếu (không có giá trị khóa
’DV7’ trong quan hệ bị tham chiếu DONVI):

5 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values


6 ('DA5', 'Phát tờ rơi','Đà Nẵng','DV7');
7 ERROR: insert or update on table "duan" violates foreign key constraint
,→ "fk_duan_donvi"
8 DETAIL: Key (madv)=(DV7) is not present in table "donvi".

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 9 / 35


Phép chèn (insert)
Phép chèn bộ < ’DA5’,’Phát tờ rơi’,’Đà Nẵng’,’DV3’> vào DUAN
được chấp nhận vì thoả mãn tất cả các ràng buộc:

1 insert into DUAN (MaDA, TenDA, DiaDiem, MaDV) values


2 ('DA5','Phát tờ rơi','Đà Nẵng','DV3');
3 INSERT 0 1

Nếu chèn thành công bộ < ’DA5’,’Phát tờ rơi’,’Đà Nẵng’,’DV3’>


vào DUAN, quan hệ này sẽ có 5 bộ như sau:

4 select * from DUAN;


5 mada | tenda | diadiem | madv
6 ------+-----------------------------+-----------+------
7 DA1 | Tuyển dụng | Cần Thơ | DV2
8 DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
9 DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
10 DA4 | Qui trình nghiệp vụ | Hà Nội |
11 DA5 | Phát tờ rơi | Đà Nẵng | DV3
12 (5 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 10 / 35


Phép xóa (delete)

Phép xoá có thể vi phạm ràng buộc tham chiếu trong trường hợp bộ bị
xoá được tham chiếu từ các bộ khác trong cơ sở dữ liệu
Xóa bộ <’DV3’, ’Kinh doanh’, ’NV2’, ’2018-09-10’> trong DONVI vi
phạm toàn vẹn tham chiếu, do giá trị khóa chính ’DV3’ được tham
chiếu từ bộ <’DA2’, ’Quảng cáo trực tuyến’, ’Toàn quốc’, ’DV3’ >
của DUAN, do đó không được chấp nhận

1 delete from DONVI where MaDV='DV3';


2 ERROR: update or delete on table "donvi" violates foreign key constraint
,→ "fk_duan_donvi" on table "duan"
3 DETAIL: Key (madv)=(DV3) is still referenced from table "duan".

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 11 / 35


Phép xóa (delete)

Xóa bộ <’DV4’, ’Quản trị’, ’NV8’, ’2018-09-10’ > trong DONVI


được chấp nhận vì không vi phạm ràng buộc tham chiếu: không có
tham chiếu từ quan hệ DUAN đến giá trị khóa chính ’DV4’

1 delete from DONVI where MaDV='DV4';


2 DELETE 1

Nếu xóa thành công bộ <’DV4’,’Quản trị’,’NV8’,’2018-09-10’ > từ


DONVI, quan hệ này có trạng thái mới như sau:

3 select * from DONVI;


4 madv | tendv | manv | ngaybatdau
5 ------+------------+------+------------
6 DV1 | Tài chính | NV1 | 2020-01-09
7 DV2 | Nhân sự | NV5 | 2017-07-15
8 DV3 | Kinh doanh | NV2 | 2018-09-10
9 (3 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 12 / 35


Khôi phục các trạng thái quan hệ

Xóa bộ có khóa DA5 vừa được chèn vào DUAN:

1 delete from DUAN where MaDA='DA5';


2 DELETE 1

Tạo lại bộ có khóa DV4 trong DONVI:

3 insert into DONVI (MaDV, TenDV, MaNV, NgayBatDau) values


4 ('DV4', 'Quản trị', 'NV8', '2018-09-10');
5 INSERT 0 1

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 13 / 35


Phép sửa (update)

Việc sửa một thuộc tính không phải là khóa hoặc khóa ngoài thường
không gây ra các vi phạm ràng buộc, hệ quản trị cơ sở dữ liệu chỉ
kiểm tra giá trị mới thuộc miền hay không
Sửa giá trị khóa chính tương đương với xóa bộ cũ và chèn bộ mới:
Các vi phạm ràng buộc tuân theo các ràng buộc của phép chèn và xóa
Sửa giá trị khóa ngoài: cần đảm bảo giá trị mới thỏa mãn ràng buộc
tham chiếu, tức là giá trị mới hoặc là null hoặc phải tham chiếu đến
một bộ tồn tại trong quan hệ bị tham chiếu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 14 / 35


Phép sửa (update)

Sửa thuộc tính không phải là khóa hoặc khóa ngoài:

1 update DONVI set NgayBatDau='2021-09-31' where MaDV='DV3';


2 ERROR: date/time field value out of range: "2021-09-31"
3 LINE 1: update DONVI set NgayBatDau='2021-09-31' where madv='DV3';
4 ^
5 update DONVI set NgayBatDau='2021-09-30' where MaDV='DV3';
6 UPDATE 1
7
8 update DONVI set NgayBatDau='2018-09-10' where MaDV='DV3';
9 UPDATE 1

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 15 / 35


Phép sửa (update)

Sửa giá trị khóa chính:

1 update DONVI set MaDV='DV6' where MaDV='DV3';


2 ERROR: update or delete on table "donvi" violates foreign key constraint
,→ "fk_duan_donvi" on table "duan"
3 DETAIL: Key (madv)=(DV3) is still referenced from table "duan".
4
5 update DONVI set MaDV='DV5' where MaDV='DV4';
6 UPDATE 1
7
8 update DONVI set MaDV='DV4' where MaDV='DV5';
9 UPDATE 1

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 16 / 35


Phép sửa (update)

Sửa giá trị khóa ngoài:

1 update DUAN set MaDV='DV7' where MaDA='DA1';


2 ERROR: insert or update on table "duan" violates foreign key constraint
,→ "fk_duan_donvi"
3 DETAIL: Key (madv)=(DV7) is not present in table "donvi".
4
5 update DUAN set MaDV=NULL where MaDA='DA1';
6 UPDATE 1
7
8 update DUAN set MaDV='DV2' where MaDA='DA1';
9 UPDATE 1

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 17 / 35


Các phép toán đại số quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 18 / 35


Phép chọn (select)

Phép chọn (select) được sử dụng để chọn một tập hợp các bộ thỏa
mãn điều kiện chọn từ một quan hệ
Danh sách dự án có địa điểm ở Hà Nội:

1 select * from DUAN where DiaDiem='Hà Nội';


2 mada | tenda | diadiem | madv
3 ------+-----------------------------+---------+------
4 DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
5 DA4 | Qui trình nghiệp vụ | Hà Nội |
6 (2 rows)

Giới hạn số lượng bộ trong kết quả của phép chọn:

7 select * from DUAN where DiaDiem='Hà Nội' limit 1;


8 mada | tenda | diadiem | madv
9 ------+-----------------------------+---------+------
10 DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
11 (1 row)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 19 / 35


Phép chiếu (project)
Nếu ta xem một quan hệ như một bảng thì phép chiếu (project) là
phép toán chọn một số cột của bảng
Liệt kê tên và địa điểm các dự án:
1 select TenDA, DiaDiem from DUAN;
2 tenda | diadiem
3 -----------------------------+-----------
4 Quảng cáo trực tuyến | Toàn quốc
5 Xây dựng phần mềm tài chính | Hà Nội
6 Qui trình nghiệp vụ | Hà Nội
7 Tuyển dụng | Cần Thơ
8 (4 rows)

Liệt kê tên và mã các dự án ở Hà Nội (kết hợp phép chiếu và chọn):


9 select TenDA, MaDA from DUAN where DiaDiem='Hà Nội';
10 tenda | mada
11 -----------------------------+------
12 Xây dựng phần mềm tài chính | DA3
13 Qui trình nghiệp vụ | DA4
14 (2 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 20 / 35


Sắp xếp kết quả của phép chọn và chiếu

1 select mada, diadiem, tenda from DUAN order by diadiem asc, tenda asc;
2 mada | diadiem | tenda
3 ------+-----------+-----------------------------
4 DA1 | Cần Thơ | Tuyển dụng
5 DA4 | Hà Nội | Qui trình nghiệp vụ
6 DA3 | Hà Nội | Xây dựng phần mềm tài chính
7 DA2 | Toàn quốc | Quảng cáo trực tuyến
8 (4 rows)
9
10 select mada, diadiem, tenda from DUAN order by diadiem asc, tenda desc;
11 mada | diadiem | tenda
12 ------+-----------+-----------------------------
13 DA1 | Cần Thơ | Tuyển dụng
14 DA3 | Hà Nội | Xây dựng phần mềm tài chính
15 DA4 | Hà Nội | Qui trình nghiệp vụ
16 DA2 | Toàn quốc | Quảng cáo trực tuyến
17 (4 rows)
18
19 select mada, diadiem, tenda from DUAN order by length(diadiem) asc, tenda desc;
20 mada | diadiem | tenda
21 ------+-----------+-----------------------------
22 DA3 | Hà Nội | Xây dựng phần mềm tài chính
23 DA4 | Hà Nội | Qui trình nghiệp vụ
24 DA1 | Cần Thơ | Tuyển dụng
25 DA2 | Toàn quốc | Quảng cáo trực tuyến
26 (4 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 21 / 35


Phép đổi tên (rename)

Đổi tên quan hệ:


1 alter table DONVI rename to DV;
2 ALTER TABLE
3
4 \d DV -- MySQL: desc DV;
5 Table "public.dv"
6 Column | Type | Collation | Nullable | Default
7 ------------+------------------------+-----------+----------+---------
8 madv | character varying(16) | | not null |
9 tendv | character varying(128) | | |
10 manv | character varying(16) | | |
11 ngaybatdau | date | | |
12 Indexes:
13 "donvi_pkey" PRIMARY KEY, btree (madv)
14 Referenced by:
15 TABLE "duan" CONSTRAINT "fk_duan_donvi" FOREIGN KEY (madv) REFERENCES dv(madv)
16
17 alter table DV rename to DONVI;
18 ALTER TABLE

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 22 / 35


Phép đổi tên (rename)

Đổi tên các thuộc tính của một quan hệ:


1 alter table DONVI rename column MaDV to MaDonVi;
2 ALTER TABLE
3
4 \d DONVI -- MySQL: desc DONVI;
5 Table "public.donvi"
6 Column | Type | Collation | Nullable | Default
7 ------------+------------------------+-----------+----------+---------
8 madonvi | character varying(16) | | not null |
9 tendv | character varying(128) | | |
10 manv | character varying(16) | | |
11 ngaybatdau | date | | |
12 Indexes:
13 "donvi_pkey" PRIMARY KEY, btree (madonvi)
14 Referenced by:
15 TABLE "duan" CONSTRAINT "fk_duan_donvi" FOREIGN KEY (madv) REFERENCES
,→ donvi(madonvi)
16
17 alter table DONVI rename column MaDonVi to MaDV;
18 ALTER TABLE

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 23 / 35


Phép đổi tên (rename)

Đổi tên cả quan hệ và thuộc tính:

1 alter table TEN_BANG rename to TEN_BANG_MOI;


2 alter table TEN_BANG_MOI rename column TEN_COT to TEN_COT_MOI;

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 24 / 35


Phép đổi tên (rename)

Sử dụng phép đổi tên để tìm mã và tên các dự án ở Hà Nội trong


quan hệ dự án

1 create temporary table TenDuAn as


2 select MaDA, TenDA from DUAN where DiaDiem='Hà Nội';
3 SELECT 2
4
5 select * from TenDuAn;
6 mada | tenda
7 ------+-----------------------------
8 DA3 | Xây dựng phần mềm tài chính
9 DA4 | Qui trình nghiệp vụ
10 (2 rows)
11 -- Hệ quản trị cơ sở dữ liệu sẽ tự động
12 -- xóa bảng tạm TenDuAn khi hết phiên làm việc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 25 / 35


Các phép toán lý thuyết tập hợp
Tạo hai quan hệ R và S:
1 create table R as
2 select * from DONVI where extract(year from ngaybatdau) < 2019;
3 SELECT 3
4
5 create table S as
6 select * from DONVI where extract(year from ngaybatdau) > 2017;
7 SELECT 3
8
9 select * from R;
10 madonvi | tendv | manv | ngaybatdau
11 ---------+------------+------+------------
12 DV2 | Nhân sự | NV5 | 2017-07-15
13 DV3 | Kinh doanh | NV2 | 2018-09-10
14 DV4 | Quản trị | NV8 | 2018-09-10
15 (3 rows)
16
17 select * from S;
18 madonvi | tendv | manv | ngaybatdau
19 ---------+------------+------+------------
20 DV1 | Tài chính | NV1 | 2020-01-09
21 DV3 | Kinh doanh | NV2 | 2018-09-10
22 DV4 | Quản trị | NV8 | 2018-09-10
23 (3 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 26 / 35


Các phép toán lý thuyết tập hợp
Phép hợp:
1 select * from R
2 union
3 select * from S;
4 madonvi | tendv | manv | ngaybatdau
5 ---------+------------+------+------------
6 DV3 | Kinh doanh | NV2 | 2018-09-10
7 DV1 | Tài chính | NV1 | 2020-01-09
8 DV4 | Quản trị | NV8 | 2018-09-10
9 DV2 | Nhân sự | NV5 | 2017-07-15
10 (4 rows)

Phép giao:
11 select * from R
12 intersect
13 select * from S;
14 madonvi | tendv | manv | ngaybatdau
15 ---------+------------+------+------------
16 DV3 | Kinh doanh | NV2 | 2018-09-10
17 DV4 | Quản trị | NV8 | 2018-09-10
18 (2 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 27 / 35


Các phép toán lý thuyết tập hợp

Phép trừ:

1 select * from R
2 except
3 select * from S;
4 madonvi | tendv | manv | ngaybatdau
5 ---------+---------+------+------------
6 DV2 | Nhân sự | NV5 | 2017-07-15
7 (1 row)

Có thể thay * bằng danh sách các cột và thêm mệnh đề where vào
các câu lệnh trên

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 28 / 35


Tích Đề-các

Tích Đề-các của DONVI và DUAN:


1 select * from DONVI, DUAN;
2 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem | madv
3 ------+------------+------+------------+------+-----------------------------+-----------+------
4 DV1 | Tài chính | NV1 | 2020-01-09 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
5 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
6 DV1 | Tài chính | NV1 | 2020-01-09 | DA4 | Qui trình nghiệp vụ | Hà Nội |
7 DV1 | Tài chính | NV1 | 2020-01-09 | DA1 | Tuyển dụng | Cần Thơ | DV2
8 DV2 | Nhân sự | NV5 | 2017-07-15 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
9 DV2 | Nhân sự | NV5 | 2017-07-15 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
10 DV2 | Nhân sự | NV5 | 2017-07-15 | DA4 | Qui trình nghiệp vụ | Hà Nội |
11 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ | DV2
12 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
13 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
14 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA4 | Qui trình nghiệp vụ | Hà Nội |
15 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA1 | Tuyển dụng | Cần Thơ | DV2
16 DV4 | Quản trị | NV8 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
17 DV4 | Quản trị | NV8 | 2018-09-10 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
18 DV4 | Quản trị | NV8 | 2018-09-10 | DA4 | Qui trình nghiệp vụ | Hà Nội |
19 DV4 | Quản trị | NV8 | 2018-09-10 | DA1 | Tuyển dụng | Cần Thơ | DV2
20 (16 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 29 / 35


Phép nối

Phép nối DONVI và DUAN với điều kiện nối


DONVI.MaDV = DUAN.MaDV :
1 select * from DONVI inner join DUAN on DONVI.MaDV=DUAN.MaDV;
2 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem | madv
3 ------+------------+------+------------+------+-----------------------------+-----------+------
4 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
5 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ | DV2
6 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
7 (3 rows)

Dư thừa cột madv (cột 8) trong kết quả phép nối

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 30 / 35


Phép nối tự nhiên

Phép nối tự nhiên DONVI với DUAN:


1 select * from DONVI natural join DUAN;
2 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem
3 ------+------------+------+------------+------+-----------------------------+-----------
4 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội
5 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ
6 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc
7 (3 rows)

Cột thừa madv đã bị loại bỏ khỏi kết quả phép nối

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 31 / 35


Phép nối ngoài trái

Phép nối ngoài trái của DONVI và DUAN với điều kiện nối
DONVI.MaDV = DUAN.MaDV :
1 select * from DONVI left join DUAN on DONVI.MaDV=DUAN.MaDV;
2 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem | madv
3 ------+------------+------+------------+------+-----------------------------+-----------+------
4 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
5 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ | DV2
6 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
7 DV4 | Quản trị | NV8 | 2018-09-10 | | | |
8 (4 rows)

Các đơn vị không giám sát dự án nào: mada (cột 5) nhận giá trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 32 / 35


Phép nối ngoài phải

Phép nối ngoài phải của DONVI và DUAN với điều kiện nối
DONVI.MaDV = DUAN.MaDV :
1 select * from DONVI right join DUAN on DONVI.MaDV=DUAN.MaDV;
2 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem | madv
3 ------+------------+------+------------+------+-----------------------------+-----------+------
4 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
5 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ | DV2
6 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
7 | | | | DA4 | Qui trình nghiệp vụ | Hà Nội |
8 (4 rows)

Các dự án chưa có đơn vị nào quản lý: madv (cột 1) nhận giá trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 33 / 35


Phép nối ngoài đầy đủ
Phép nối ngoài đầy đủ của DONVI và DUAN với điều kiện nối
DONVI.MaDV = DUAN.MaDV :
1 -- Lưu ý: MySQL không hỗ trợ phép nối ngoài đầy đủ, tuy nhiên có thể thực hiện phép toán này
2 -- trong MySQL bằng phép hợp kết quả của các phép toán nối ngoài trái và nối ngoài phải
3 -- select * from DONVI left join DUAN on DONVI.MaDV=DUAN.MaDV
4 -- union
5 -- select * from DONVI right join DUAN on DONVI.MaDV=DUAN.MaDV;
6 select * from DONVI full join DUAN on DONVI.MaDV=DUAN.MaDV;
7 madv | tendv | manv | ngaybatdau | mada | tenda | diadiem | madv
8 ------+------------+------+------------+------+-----------------------------+-----------+------
9 DV1 | Tài chính | NV1 | 2020-01-09 | DA3 | Xây dựng phần mềm tài chính | Hà Nội | DV1
10 DV2 | Nhân sự | NV5 | 2017-07-15 | DA1 | Tuyển dụng | Cần Thơ | DV2
11 DV3 | Kinh doanh | NV2 | 2018-09-10 | DA2 | Quảng cáo trực tuyến | Toàn quốc | DV3
12 DV4 | Quản trị | NV8 | 2018-09-10 | | | |
13 | | | | DA4 | Qui trình nghiệp vụ | Hà Nội |
14 (5 rows)

Các đơn vị không giám sát dự án nào: mada (cột 5) nhận giá trị null
Các dự án chưa có đơn vị nào quản lý: madv (cột 1) nhận giá trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 34 / 35


Các hàm nhóm và phép nhóm

Đếm tổng số dự án ở mỗi địa điểm:


1 select DiaDiem, count(*) from DUAN group by DIADIEM;
2 diadiem | count
3 -----------+-------
4 Cần Thơ | 1
5 Hà Nội | 2
6 Toàn quốc | 1
7 (3 rows)

Đếm tổng số dự án ở mỗi địa điểm nhưng chỉ liệt kê các dự án có số địa
điểm từ 2 trở lên:
8 select DiaDiem, count(*) from DUAN group by DIADIEM having count(*)>1;
9 diadiem | count
10 ---------+-------
11 Hà Nội | 2
12 (1 row)

Các hàm nhóm: COUNT, SUM, MIN, MAX, AVG


N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (5) https://bit.ly/3ukaNc9 35 / 35
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
7. Mô hình quan hệ:
Chuyển đổi mô hình EER thành mô hình quan hệ

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 1 / 13


8. Chuyển đổi chuyên biệt hóa/tổng quát hóa

Có nhiều cách chuyển đổi chuyên biệt hóa/tổng quát hóa: chuyên
biệt hóa có thể chuyển thành một hoặc nhiều lược đồ quan hệ
Ký hiệu:
Attrs(R) là các thuộc tính của một lược đồ quan hệ R bất kỳ, PK (R)
là khóa chính của R
Lớp cha C có m lớp con {S1 , S2 , ..., Sm }
Tập các thuộc tính của C là {k, a1 , a2 , ..., an } và khóa chính của C là k

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 2 / 13


8A. Lớp cha/con ⇒ nhiều lược đồ quan hệ

Tương ứng với lớp cha C, tạo lược đồ quan hệ L với


Attrs(L) = {k, a1 , a2 , ..., an } và PK (L) = k
Tương ứng với mỗi lớp con Si , i = 1, m, tạo lược đồ quan hệ Li với
Attrs(Li ) = {k} ∪ Attrs(Si ) và PK (Li ) = k
Cách chuyển đổi này áp dụng được cho mọi loại chuyên biệt hóa, bao
gồm: đầy đủ/không đầy đủ và rời rạc/không rời rạc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 3 / 13


Ví dụ chuyển đổi 8A

NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi)


THUKY (MaNV , TocDoGo), KYTHUATVIEN(MaNV , Bac),
KYSU(MaNV , ChuyenNganh)
QUANLY (MaNV , MaDA)
BIENCHE (MaNV , NgayVao), HOPDONG(MaNV , Thoihan)
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 4 / 13
8B. Các lớp con ⇒ nhiều lược đồ quan hệ

Tương ứng với mỗi lớp con Si , i = 1, m, tạo lược đồ quan hệ Li với
Attrs(Li ) = {k, a1 , a2 , ..., an } ∪ Attrs(Si ) và PK (Li ) = k
Cách chuyển đổi này chỉ áp dụng được cho chuyên biệt hóa có các
lớp con tham gia đầy đủ, tức là mỗi thực thể trong lớp cha phải
thuộc ít nhất một lớp con nào đó
Chỉ nên sử dụng cách chuyển đổi này nếu các lớp con là rời rạc
Nếu áp dụng cho các lớp con không rời rạc, một thực thể có thể xuất
hiện nhiều lần trong các quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 5 / 13


Ví dụ chuyển đổi 8B

Không có lược đồ quan hệ riêng cho lớp cha NHANVIEN


Các lớp con THUKY, KYTHUATVIEN, KYSU, QUANLY không tham gia đầy đủ
BIENCHE (MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi, NgayVao),
HOPDONG(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi, Thoihan)
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 6 / 13
8C. Một lược đồ quan hệ có một thuộc tính kiểu

Tạo lược đồ quan hệ L có


Attrs(L) = {k, a1 , a2 , ..., an } ∪ Attrs(S1 ) ∪ Attrs(S2 )... ∪ Attrs(Sm ) ∪ {t}
và PK (L) = k.
Thuộc tính t được gọi là thuộc tính kiểu (hoặc thuộc tính phân biệt).
Giá trị của t chỉ ra các bộ thuộc lớp con nào
Cách chuyển đổi này chỉ áp dụng được cho chuyên biệt hóa có các lớp
con rời rạc
Có thể sinh ra nhiều giá trị NULL

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 7 / 13


Ví dụ chuyển đổi 8C

NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi,


TocDoGo, Bac, ChuyenNganh, MaDA, NgayVao, Thoihan, Kieu)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 8 / 13


8D. Một lược đồ quan hệ có nhiều thuộc tính kiểu

Tạo lược đồ quan hệ L có Attrs(L) =


{k, a1 , a2 , ..., an } ∪ Attrs(S1 ) ∪ Attrs(S2 )... ∪ Attrs(Sm ) ∪ {t1 , t2 , ..., tm }
và PK (L) = k
Mỗi ti , i = 1, m là một thuộc tính kiểu Boolean, chỉ ra một bộ có
thuộc lớp con Si hay không
Cách chuyển đổi này áp dụng được cho chuyên biệt hóa có các lớp
con không rời rạc và rời rạc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 9 / 13


Ví dụ chuyển đổi 8D

NHANVIEN(MaNV , NgaySinh, GioiTinh, HoDem, Ten, Luong, DiaChi,


TocDoGo, Bac, ChuyenNganh, MaDA, NgayVao, Thoihan,
Thuky, Kythuatvien, Kysu, Quanly, Bienche, Hopdong)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 10 / 13


Chuyển đổi các lớp con chung (thừa kế bội)

Chúng ta có thể áp dụng các cách chuyển đổi 8A, 8B, 8C, 8D cho
các lớp con chung
Lưu ý: Các lớp con phải có cùng thuộc tính khóa
Nếu các lớp con không có cùng thuộc tính khóa: chuyển đổi kiểu hợp
(union)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 11 / 13


9. Chuyển đổi kiểu hợp (kiểu phân loại)

Tạo các lược đồ quan hệ U tương ứng với kiểu hợp và Li , i = 1, m


tương ứng với các lớp con Si , i = 1, m
Tạo một thuộc tính khóa SR, gọi là khóa đại diện (surrogate key) cho
U
Với mỗi lược đồ Li , i = 1, m, tạo khóa ngoài SRi tham chiếu đến
khóa chính SR của U
Trong một số trường hợp đặc biệt, có thể không cần tạo khóa đại diện
nếu lớp cha và các lớp con có các thuộc tính khóa cùng ngữ nghĩa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 12 / 13


Ví dụ chuyển đổi kiểu hợp

CONGDAN(SoCMND, Hoten, Ngaysinh, Gioitinh, MaSH),


CONGTY (MaCT , Diachi, MaSH), CHUSOHUU(MaSH)
XETAI(Somay, Sokhung, Trongtai, Sotruc),
XEGIADINH(Somay, Sokhung, Socua, Socho),
OTO(Somay, Sokhung, DungtichXL)
SOHUU(MaSH, Somay, Sokhung, Ngaysohuu)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Mô hình quan hệ (6) https://bit.ly/3KqRCEI 13 / 13


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
8. Nguyên tắc thiết kế lược đồ quan hệ

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 1/9


Các giải pháp thiết kế cơ sở dữ liệu quan hệ

Có hai giải pháp chính:


Thiết kế dưới lên:
Điểm xuất phát là quan hệ giữa các thuộc tính riêng rẽ
Sử dụng quan hệ giữa các thuộc tính này để xây dựng các lược
đồ quan hệ
Đây là phương pháp thiết kế bằng tổng hợp (design by synthesis)
Thiết kế trên xuống, hay thiết kế bằng phân tích (design by analyse):
Xuất phát từ các lược đồ quan hệ có được từ thiết kế quan niệm
Tách các quan hệ cho đến khi đạt mục đích mong muốn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 2/9


Các nguyên tắc thiết kế lược đồ quan hệ

NT1. (Ngữ nghĩa của các thuộc tính): Thiết kế một lược đồ quan hệ sao
cho dễ giải thích ý nghĩa của nó. Không nên tổ hợp các thuộc tính từ
nhiều kiểu thực thể và kiểu liên kết vào một lược đồ quan hệ
NT2. (Thông tin dư thừa trong các bộ và dị thường cập nhật): Thiết kế
các lược đồ quan hệ cơ sở sao cho không sinh ra những dị thường cập
nhật trong các quan hệ
NT3. (Các giá trị không xác định trong các bộ): Tránh sử dụng các thuộc
tính của các lược đồ quan hệ mà giá trị của các thuộc tính này
thường xuyên là null
NT4. (Sinh ra các bộ giả): Thiết kế các lược đồ quan hệ sao cho chúng có
thể được nối với điều kiện bằng trên các thuộc tính là khoá chính
hoặc khoá ngoài để đảm bảo không sinh ra các bộ "giả"

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 3/9


NT1: Các lược đồ quan hệ cần có ý nghĩa rõ ràng

Ngữ nghĩa của lược đồ rõ ràng thì dễ thiết kế được lược đồ quan hệ
tốt
Không tổ hợp các thuộc tính từ nhiều kiểu thực thể và kiểu liên kết
vào trong một quan hệ
Nếu một lược đồ quan hệ tương ứng với một kiểu thực thể hoặc một
kiểu liên kết thì ý nghĩa của lược đồ đó và các thuộc tính trở nên rõ
ràng

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 4/9


NT2: Tránh các dị thường cập nhật
Giả sử ta có quan hệ NHANVIEN_DONVI như sau:

MaNV Hodem Ten Ngaysinh Diachi MaDV TenDV MaNQL


NV001 Lê Vân 1979-02-12 Hà Nội 5 Nghiên cứu NV002
NV002 Trần Đức Nam 1976-02-14 Hà Nội 5 Nghiên cứu NV002
NV010 Hoàng Thanh 1979-08-05 Nghệ An 4 Hành chính NV014
NV014 Phạm Bằng 1952-06-26 Bắc Ninh 4 Hành chính NV014
NV016 Nguyễn Sơn 1973-08-14 Hà Nam 5 Nghiên cứu NV002
NV018 Vũ Hương Giang 1983-03-26 Nam Định 5 Nghiên cứu NV002
NV025 Trần Lê Hoa 1980-03-15 Phú Thọ 4 Hành chính NV014
NV061 Hoàng Giang 1967-05-02 Hà Tĩnh 1 Lãnh đạo NV061

Có dư thừa thông tin trong quan hệ


Có thể xảy ra các dị thường cập nhật:
Dị thường chèn: Chèn một nhân viên mới chưa làm việc cho đơn vị nào, hoặc
chèn một đơn vị vừa thành lập chưa có nhân viên → phải chèn nhiều giá trị
null vào quan hệ
Dị thường xóa: Xóa thông tin một nhân viên duy nhất của đơn vị → xóa đơn
vị
Dị thường sửa đổi: Đơn vị đổi tên hoặc đổi người quản lý → phải sửa nhiều
bộ trong quan hệ
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 5/9
NT3: Tránh các giá trị null

Nếu một quan hệ chứa nhiều giá trị null


Tốn không gian lưu trữ
Kết quả của các phép nối bị giảm ý nghĩa
Các hàm nhóm như COUNT, SUM... không tính toán được trên giá
trị null

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 6/9


NT4: Tránh sinh các bộ giả

Giả sử chúng ta có hai quan hệ:


NHANVIEN_DIADIEM:
Ten DiadiemDA
Vân Hà Nội
Vân Nam Định
Sơn Bắc Ninh
Giang Hà Nội
và NHANVIEN_DUAN:
MaNV MaDA Sogio TenDA DiadiemDA
NV001 1 32 DA01 Hà Nội
NV001 2 7 DA02 Nam Định
NV016 3 40 DA03 Bắc Ninh
NV018 1 20 DA01 Hà Nội

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 7/9


NT4: Tránh sinh các bộ giả
Kết quả NHANVIEN_DIADIEM ∗ NHANVIEN_DUAN:
DiadiemDA

DiadiemDA MaNV MaDA Sogio TenDA Ten


Bắc Ninh NV016 3 40 DA03 Sơn
Hà Nội NV001 1 32 DA01 Vân
Hà Nội NV001 1 32 DA01 Giang
Hà Nội NV018 1 20 DA01 Vân
Hà Nội NV018 1 20 DA01 Giang
Nam Định NV001 2 7 DA02 Vân

Bộ thứ 3 là bộ giả: Nhân viên có mã số NV001 làm việc ở 2 dự án


DA01 và DA02 ở Hà Nội và Nam Định → tên là Vân
Bộ thứ 4 là bộ giả: Nhân viên có mã số NV018 làm việc cho dự án
DA01 ở Hà Nội → tên là Giang
Nên thiết kế các lược đồ để thực hiện các phép nối với điều kiện bằng
trên khóa chính và/hoặc khóa ngoài để tránh các bộ giả
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 8/9
Cơ sở lý thuyết cho thiết kế

Phụ thuộc hàm (functional dependency)


Chuẩn hóa (normalization)
Các thuật toán thiết kế cơ sở dữ liệu quan hệ

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Nguyên tắc thiết kế https://bit.ly/3hbYFD6 9/9


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
8. Phụ thuộc hàm: các khái niệm, qui tắc suy diễn và
thuật toán

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 1 / 25


Định nghĩa phụ thuộc hàm

Giả sử X và Y là hai tập thuộc tính của lược đồ quan hệ R


Một phụ thuộc hàm từ X vào Y là một ràng buộc trên các bộ của
mọi trạng thái hợp lệ r (R) sao cho với hai bộ bất kỳ t1 , t2 ∈ r (R),
nếu t1 [X ] = t2 [X ] thì t1 [Y ] = t2 [Y ]
Phụ thuộc hàm từ X vào Y được ký hiệu là X → Y với X là vế trái
và Y là vế phải của phụ thuộc hàm
Các cách diễn đạt khác: Y phụ thuộc hàm vào X hoặc X xác định
hàm Y
Một phụ thuộc hàm là một tính chất của lược đồ quan hệ R và
không phải là tính chất của trạng thái quan hệ r (R)
Một phụ thuộc hàm không thể được phát hiện một cách tự động từ
các trạng thái r (R) mà phải xác định từ ngữ nghĩa của lược đồ quan
hệ R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 2 / 25


Ví dụ phụ thuộc hàm 1
Lược đồ quan hệ
MUONSACH(Sothe, MaSach, Nguoimuon, Tensach, Ngaymuon) có các
phụ thuộc hàm:
Sothe → Nguoimuon
Masach → Tensach
Sothe, Masach → Ngaymuon

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 3 / 25


Ví dụ phụ thuộc hàm 2

Lược đồ quan hệ CONGDAN(SoCMND, Hoten, Ngaysinh, Gioitinh) có các


phụ thuộc hàm:
SoCMND → Hoten
SoCMND → Ngaysinh
SoCMND → Gioitinh

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 4 / 25


Phụ thuộc hàm suy diễn được

Giả sử F là một tập phụ thuộc hàm trên lược đồ quan hệ R


Một phụ thuộc hàm X → Y được gọi là suy diễn được từ F nếu
X → Y đúng trong mỗi trạng thái hợp lệ r (R). Điều này có nghĩa là
khi r (R) thỏa mãn các phụ thuộc hàm trong F, r (R) cũng thỏa mãn
X →Y
X → Y suy diễn được từ F được ký hiệu là F |= X → Y
Bao đóng của tập phụ thuộc hàm F, ký hiệu là F + , được định
nghĩa như sau:

F + = F ∪ {X → Y , F |= X → Y } (1)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 5 / 25


Các qui tắc suy diễn đối với các phụ thuộc hàm

Armstrong1 đưa ra 6 qui tắc suy diễn đối với phụ thuộc hàm (1974):
QT1. (phản xạ): Nếu X ⊇ Y thì X → Y
QT2. (tăng): {X → Y } |= XZ → YZ 2

QT3. (bắc cầu): {X → Y , Y → Z } |= X → Z


QT4. (chiếu): {X → YZ } |= X → Y và X → Z
QT5. (hợp): {X → Y , X → Z } |= X → YZ
QT6. (tựa bắc cầu): {X → Y , WY → Z } |= WX → Z

1
William Ward Armstrong là nhà toán học và khoa học máy tính người Canada. Ông nhận bằng
tiến sĩ năm 1966 tại trường Đại học British Columbia (University of British Columbia).
2
Để cho tiện, {X , Y } được viết tắt là XY
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 6 / 25
Chứng minh QT1, QT2

QT1: Nếu X ⊇ Y thì X → Y


Giả sử X ⊇ Y và t1 , t2 là hai bộ bất kỳ trong r (R) thỏa mãn
t1 [X ] = t2 [X ]. Khi đó, do X ⊇ Y nên t1 [Y ] = t2 [Y ]. Vậy X → Y .
QT2: {X → Y } |= XZ → YZ
Giả sử X → Y nhưng XZ 6→ YZ . Khi đó theo định nghĩa phụ thuộc
hàm, tồn tại hai bộ t1 , t2 ∈ r (R) sao cho:
t1 [X ] = t2 [X ], (2)
t1 [Y ] = t2 [Y ], (3)
t1 [XZ ] = t2 [XZ ] (4)
nhưng
t1 [YZ ] 6= t2 [YZ ] (5)
Từ (2) và (4) ta có:
t1 [Z ] = t2 [Z ] (6)
Từ (3) và (6) suy ra t1 [YZ ] = t2 [YZ ] =⇒ mâu thuẫn với (5).
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 7 / 25
Chứng minh QT3

QT3: {X → Y , Y → Z } |= X → Z
Giả sử ta có
X →Y (7)

Y →Z (8)
Khi đó, với hai bộ t1 , t2 ∈ r (R) bất kỳ sao cho t1 [X ] = t2 [X ], từ (7)
chúng ta suy ra:
t1 [Y ] = t2 [Y ] (9)
Từ (8) và (9) ta có:
t1 [Z ] = t2 [Z ] (10)
Từ t1 [X ] = t2 [X ] và (10) chúng ta có X → Z

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 8 / 25


Chứng minh QT4

QT4: {X → YZ } |= X → Y và X → Z
Ta có
X → YZ (11)
Do YZ ⊇ Y nên theo QT1:

YZ → Y (12)

Áp dụng QT3 cho (11) và (12): X → Y . Tương tự, ta có: X → Z .

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 9 / 25


Chứng minh QT5

QT5: {X → Y , X → Z } |= X → YZ
Giả sử ta có
X →Y (13)

X →Z (14)
Áp dụng QT2 cho (13):
XX → YX (15)
Áp dụng QT2 cho (14):
YX → YZ (16)
Áp dụng QT3 cho (15), (16) và do XX = X : X → YZ .

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 10 / 25


Chứng minh QT6

QT6: {X → Y , WY → Z } |= WX → Z
Giả sử ta có:
X →Y (17)

WY → Z (18)
Áp dụng QT2 cho (17):
WX → WY (19)
Áp dụng QT3 cho (19): WX → Z .

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 11 / 25


Các qui tắc suy diễn đối với phụ thuộc hàm

Amstrong đã chứng minh rằng các quy tắc suy diễn QT1, QT2 và QT3 là
đúng và đầy đủ:
Đúng: cho trước một tập phụ thuộc hàm F trên một lược đồ quan hệ
R, bất kỳ một phụ thuộc hàm nào suy diễn được bằng cách áp dụng
các quy tắc từ từ QT1 đến QT3 cũng đúng trong mỗi trạng thái
quan hệ r (R) thoả mãn các phụ thuộc hàm trong F
Đầy đủ: việc sử dụng các quy tắc từ QT1 đến QT3 lặp lại nhiều lần
để suy diễn các phụ thuộc hàm cho đến khi không còn suy diễn được
nữa sẽ cho kết quả là một tập hợp đầy đủ các phụ thuộc hàm có thể
được suy diễn từ F
Các qui tắc QT1, QT2 và QT3 được gọi là các qui tắc suy diễn
Armstrong

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 12 / 25


Bao đóng của tập thuộc tính

Giả sử F là một tập phụ thuộc hàm trên lược đồ quan hệ R và X là


một tập thuộc tính của R
Bao đóng của tập thuộc tính X dưới F, ký hiệu là X + được định
nghĩa như sau:

X + = {A, A là thuộc tính của R, F |= X → A} (20)

Khi cần chỉ rõ tập phụ thuộc hàm, chúng ta ký hiệu bao đóng của X
dưới F là XF+

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 13 / 25


Tìm bao đóng của tập thuộc tính

Thuật toán 1: Tìm bao đóng X + của X dưới F


Vào: Lược đồ quan hệ R, tập phụ thuộc hàm F và tập thuộc tính X
Ra: Tập thuộc tính X + là bao đóng của X
1 X+ = X;
2 repeat
3 OldX + = X + ;
4 for mỗi phụ thuộc hàm Y → Z trong F do
5 if X + ⊃ Y then
6 X+ = X+ ∪ Z;
7 end
8 end
9 until OldX + = X + ;

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 14 / 25


Ví dụ bao đóng của tập thuộc tính
Lược đồ quan hệ R(MaNV , Hoten, MaDA, TenDA, Diadiem, Sogio) có tập
phụ thuộc hàm: F = {MaNV → Hoten,
MaDA → {TenDA, Diadiem}, {MaNV , MaDA} → Sogio}

MaNV + = {MaNV , Hoten}, MaDA+ = {MaDA, TenDA, Diadiem}


{MaNV , MaDA}+ = {MaNV , Hoten, MaDA, TenDA, Diadiem, Sogio}
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 15 / 25
Bao đóng của tập thuộc tính và khóa

Giả sử ta có lược đồ quan hệ R(A1 , A2 , ..., An )


Nếu X + = {A1 , A2 , ..., An } thì X xác định hàm các thuộc tính còn
lại, điều này tương đương với X là siêu khóa
Có thể kiểm tra một tập thuộc tính X có là khóa hay không bằng
cách:
1 Kiểm tra X là siêu khóa hay không: X + = {A1 , A2 , ..., An }?
2 Nếu có, kiểm tra X có là siêu khóa tối thiểu hay không: Có tồn
tại tập thuộc tính S ( X sao cho S + = {A1 , A2 , ..., An }?

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 16 / 25


Ví dụ bao đóng và khóa
Lược đồ quan hệ R(MaNV , Hoten, MaDA, TenDA, Diadiem, Sogio)

{MaNV , MaDA}+ = {MaNV , Hoten, MaDA, TenDA, Diadiem, Sogio},


MaNV + = {MaNV , Hoten}, MaDA+ = {MaDA, TenDA, Diadiem}

{MaNV , MaDA} là siêu khóa tối thiểu =⇒ {MaNV , MaDA} là khóa


N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 17 / 25
Tìm khóa của lược đồ quan hệ

Thuật toán 2: Tìm một khóa của lược đồ quan hệ


Vào: Lược đồ quan hệ R(A1 , A2 , ..., An ) và tập phụ thuộc hàm F
Ra: Một khóa của lược đồ quan hệ R
1 K = {A1 , A2 , ..., An };
2 for mỗi thuộc tính A của K do
3 Xác định (K − A)+ F ; // Thực hiện thuật toán 1
4 if (K − A)+
F = {A1 , A2 , ..., An } then
5 K = K − {A}
6 end
7 end
Thời gian thực hiện bước 3 phụ thuộc số lượng phụ thuộc hàm trong F
(xem vòng for bước 4–8, thuật toán 1) =⇒ có thể loại bỏ các phụ thuộc
hàm "dư thừa" trong F?

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 18 / 25


Sự tương đương của các tập phụ thuộc hàm

Một tập phụ thuộc hàm E được phủ bởi một tập phụ thuộc
hàm F hay F phủ E nếu E ⊂ F + . Điều này có nghĩa là:
∀X → Y ∈ E, F |= X → Y
Hai tập phụ thuộc hàm E và F được gọi là tương đương nếu
E+ = F+
Để kiểm tra F phủ E (E ⊂ F + ), với mỗi X → Y là phụ thuộc hàm
trong E:
Tính X + dưới F ∀X → Y ∈ E
Nếu X + ⊃ Y đúng với tất cả các phụ thuộc hàm X → Y trong
E thì F phủ E

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 19 / 25


Ví dụ hai tập phụ thuộc hàm tương đương
Lược đồ quan hệ R(A, C , D, E , H); ký hiệu {A, E }+
E là bao đóng của tập thuộc tính
{A, E } dưới tập phụ thuộc hàm E:

F = {A → C , AC → D, E → AD, E → H}
E = {A → CD, E → AH}
{A}+
E = {A, C , D} ⊃ {C }
{A}+
F = {A, C , D} ⊃ {C , D}
{A, C }+
E = {A, C , D} ⊃ {D}
{E }+
F = {E , A, H, C , D} ⊃
{A, H} {E }+
E = {E , A, H, C , D}:
{E }+ +
E ⊃ {A, D} và {E }E ⊃ {H}
=⇒ E tương đương với F
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 20 / 25
Tập phụ thuộc hàm tối thiểu và phủ tối thiểu

Một tập phụ thuộc hàm F là tối thiểu nếu thoả mãn các điều
kiện sau:
(vế phải tối thiểu) Vế phải của các phụ thuộc hàm trong F chỉ
có một thuộc tính.
(vế trái tối thiểu) Chúng ta không thể thay thế bất kỳ một phụ
thuộc hàm X → A trong F bằng phụ thuộc hàm Y → A, trong
đó Y là tập con đúng của X mà vẫn còn là một tập phụ thuộc
hàm tương đương với F.
(số lượng phụ thuộc hàm tối thiểu) Chúng ta không thể bỏ đi
bất kỳ phụ thuộc hàm nào ra khỏi F mà vẫn có một tập phụ
thuộc hàm tương đương với F
Một phủ tối thiểu của một tập phụ thuộc hàm F là một tập phụ
thuộc hàm tối thiểu G tương đương với F (tức là G + = F + )
Một tập phụ thuộc hàm bất kỳ có thể có nhiều phủ tối thiểu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 21 / 25


Tìm phủ tối thiểu
Thuật toán 3: Tìm một phủ tối thiểu cho tập phụ thuộc hàm
Vào: Lược đồ quan hệ R, tập phụ thuộc hàm F
Ra: Một tập phụ thuộc hàm G là phủ tối thiểu của F
1 G = F;
2 Thay thế mỗi phụ thuộc hàm X → {A1 , A2 , ..., An } trong G bằng n phụ thuộc
hàm X → A1 , X → A2 , . . . , X → An ;
3 for mỗi phụ thuộc hàm X → A trong G do
4 for mỗi thuộc tính B là một phần tử của X do
5 if (G − (X → A)) ∪ ((X − {B}) → A) là tương đương với G then
6 thay thế X → A bằng (X − {B}) → A ở trong G;
7 end
8 end
9 end
10 for mỗi phụ thuộc hàm X → A còn lại trong G do
11 if (G − {X → A}) là tương đương với G then
12 loại bỏ X → A ra khỏi G;
13 end
14 end

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 22 / 25


Ví dụ tìm phủ tối thiểu
Lược đồ quan hệ R(A, B, C , D, E ) có tập phụ thuộc hàm F = {A → BCDE , CD → E }:

G=F
Tách vế phải của các phụ thuộc hàm:
G = {A → B, A → C , A → D, A → E , CD → E }
Vế trái của CD → E là tối thiểu
A → C , A → D |= A → CD
A → CD, CD → E |= A → E =⇒ A → E dư thừa và có thể loại bỏ khỏi G =⇒
G = {A → B, A → C , A → D, CD → E }
Chúng ta không bỏ được bất kỳ phụ thuộc hàm nào khỏi G để có một tập phụ
thuộc hàm tương đương, do đó G là tối thiểu
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 23 / 25
Ví dụ tìm phủ tối thiểu

G = {A → B, A → C , A → D, CD → E }
F = {A → BCDE , CD → E } là phủ tối thiểu của F

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 24 / 25


Tóm tắt

Phụ thuộc hàm, bao đóng của tập phụ thuộc hàm
Các qui tắc suy diễn của Armstrong
Bao đóng của tập thuộc tính
Tìm khóa của lược đồ quan hệ dựa vào bao đóng
Tập phụ thuộc hàm tương đương, tập phụ thuộc hàm tối thiểu và
phủ tối thiểu

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Phụ thuộc hàm https://bit.ly/3dIZGAm 25 / 25


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
8. Chuẩn hóa

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 1 / 23


Giới thiệu về chuẩn hóa

Quá trình chuẩn hóa (Codd đề nghị năm 1972): lấy một lược đồ quan
hệ và thực hiện các phép kiểm tra để xác nhận lược đồ có thỏa mãn
một số điều kiện nhất định (dạng chuẩn) hay không; nếu không các
lược đồ quan hệ sẽ được tách ra
Codd đề xuất ba dạng chuẩn 1, 2 và 3 (1NF, 2NF, 3NF)
Sau đó Boyce và Codd đề nghị dạng chuẩn Boyce-Codd (BCNF)
mạnh hơn 3NF
Các dạng chuẩn này dựa trên các phụ thuộc hàm giữa các thuộc tính
của một lược đồ quan hệ
Sau đó dạng chuẩn 4 (4NF) và 5 (5NF) được đề xuất dựa trên phụ
thuộc hàm đa trị và phụ thuộc hàm nối

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 2 / 23


Giới thiệu về chuẩn hóa

Chuẩn hóa dữ liệu có thể được xem là quá trình phân tích và tách
các lược đồ quan hệ để đạt được hai mục tiêu:
Cực tiểu hóa sự dư thừa
Cực tiểu hóa các phép cập nhật bất thường
Phép tách các lược đồ quan hệ cần có hai tính chất:
Tính chất nối không mất mát (phải đạt được)
Tính chất bảo toàn phụ thuộc

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 3 / 23


Các dạng chuẩn dựa trên
khóa chính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 4 / 23


Dạng chuẩn 1 (1NF)

Một lược đồ quan hệ R(A1 , A2 , ..., An ) là ở dạng chuẩn 1 (1NF -


first normal form) nếu Dom(Ai ) chỉ chứa các giá trị nguyên tố
(không phân chia được) ∀i và
∀t =< t1 , t2 , ..., tn >∈ r (R), ti ∈ Dom(Ai ), ti nhận giá trị đơn
Như vậy 1NF không cho phép có các thuộc tính đa trị hoặc các nhóm
thuộc tính lặp

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 5 / 23


Thuộc tính đa trị và nhóm thuộc tính lặp

MaDV TenDV MaNQL Diadiem


5 Nghiên cứu NV002 Nam Định,Hà Nội,Bắc Ninh
4 Hành chính NV014 Hà Nội
1 Tài vụ NV061 Hà Nội

MaDA TenDA TenNV Sogio


1 DA01 Vân,Nam 15,20
2 DA02 Nam,Thanh,Bằng 10,12,28
3 DA03 Thanh 20

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 6 / 23


Chuẩn hóa 1NF

Giả sử K là khóa của lược đồ quan hệ R và A là thuộc tính đa trị


hoặc là nhóm thuộc tính lặp
Để chuẩn hóa R về 1NF:
Loại A ra khỏi R
Tạo một lược đồ quan hệ mới S(K , A) với khóa chính của S là:
{K , A} nếu A là thuộc tính đa trị
{K , KA } nếu A là nhóm thuộc tính lặp, KA là khóa bộ phận
của A

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 7 / 23


Ví dụ chuẩn hóa 1NF

1 Lược đồ DONVI(MaDV , TenDV , MaNQL, Diadiem), với Diadiem là


thuộc tính đa trị:
Loại Diadiem ra khỏi DONVI: DONVI1 (MaDV , TenDV , MaNQL)
Tạo lược đồ quan hệ mới DIADIEMDV (MaDV , Diadiem)
2 Lược đồ NHANVIEN_LAMVIEC (MaDA, TenDA, MaNV , Sogio),
trong đó (MaNV , Sogio) là nhóm thuộc tính lặp
Loại (MaNV , Sogio) ra khỏi NHANVIEN_LAMVIEC :
NHANVIEN_LAMVIEC1 (MaDA, TenDA)
Tạo lược đồ quan hệ mới
NHANVIEN_SOGIO(MaDA, MaNV , Sogio)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 8 / 23


Dạng chuẩn 2 (2NF)

Một phụ thuộc hàm X → Y là một phụ thuộc hàm đầy đủ nếu bỏ
đi bất kỳ một thuộc tính A ∈ X thì phụ thuộc hàm đó không còn
đúng nữa
Nếu tồn tại một thuộc tính B sao cho (X − B) → Y , chúng ta nói
rằng Y phụ thuộc hàm bộ phận vào X
Một lược đồ quan hệ R là ở dạng chuẩn 2 (2NF - second normal
form) nếu:
R là 1NF, và
Mỗi thuộc tính không khóa A trong R phụ thuộc hàm đầy đủ
vào khóa chính của R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 9 / 23


Chuẩn hóa 2NF

Giả sử R là lược đồ quan hệ ở dạng chuẩn 1NF và không là 2NF, có


khóa K
Để chuẩn hóa R về 2NF, đối với mỗi nhóm thuộc tính không khóa X
phụ thuộc hàm bộ phận vào K :
Loại X ra khỏi R
Gọi khóa bộ phận của K xác định hàm X là KX : KX → X
Tạo lược đồ quan hệ mới S(KX , X ) với KX là khóa chính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 10 / 23


Ví dụ chuẩn hóa 2NF

Lược đồ quan hệ ở dạng chuẩn 1NF


NHANVIEN_DUAN(MaNV , MaDA, Sogio, Hoten, TenDA, Diadiem)
với các phụ thuộc hàm:
{MaNV , MaDA} → {Sogio, Hoten, TenDA, Diadiem}
MaNV → Hoten (phụ thuộc hàm bộ phận)
MaDA → {TenDA, Diadiem} (phụ thuộc hàm bộ phận)
NHANVIEN_DUAN không là 2NF do Hoten, TenDA và Diadiem phụ
thuộc hàm bộ phận vào khóa chính {MaNV , MaDA}
Chuẩn hóa về 2NF:
Loại Hoten, TenDA, Diadiem ra khỏi NHANVIEN_DUAN:
NHANVIEN_DUAN1 (MaNV , MaDA, Sogio)
Tạo lược đồ quan hệ mới 1: N1 (MaNV , Hoten)
Tạo lược đồ quan hệ mới 2: N2 (MaDA, TenDA, Diadiem)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 11 / 23


Dạng chuẩn 3 (3NF)

Một phụ thuộc hàm X → Y trong một lược đồ quan hệ R là một


phụ thuộc hàm bắc cầu nếu tồn tại một tập hợp thuộc tính Z của
R không phải là khóa và không phải là tập con của khóa sao cho
X → Z và Z → Y đều đúng
Một lược đồ quan hệ R là ở dạng chuẩn 3 (3NF - third normal
form) nếu
R là 2NF, và
Không có thuộc tính không khóa nào của R phụ thuộc hàm bắc
cầu vào khóa chính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 12 / 23


Chuẩn hóa 3NF

Giả sử R là lược đồ quan hệ có khóa chính K ; R ở dạng chuẩn 2NF


và không ở dạng chuẩn 3NF
Để chuẩn hóa R về 3NF, với mỗi thuộc tính X phụ thuộc bắc cầu
vào K :
Loại bỏ X ra khỏi R
Gọi Y là thuộc tính bắc cầu, ta có: K → Y và Y → X
Tạo lược đồ quan hệ mới S(Y , X ) với Y là khóa chính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 13 / 23


Ví dụ chuẩn hóa 3NF

Lược đồ
LAMVIEC (MaNV , Hoten, Ngaysinh, MaDV , TenDV , MaDA, TenDA)
với các thuộc tính đơn, ở dạng chuẩn 2NF vì khóa chính chỉ có một
thuộc tính (→ không có phụ thuộc hàm bộ phận), có các phụ thuộc
hàm:
MaNV → {Hoten, Ngaysinh, MaDV , TenDV , MaDA, TenDA}
MaDV → TenDV
MaDA → TenDA
LAMVIEC không ở dạng chuẩn 3NF vì các phụ thuộc hàm bắc cầu
MaNV → MaDV → TenDV và MaNV → MaDA → TenDA
Chuẩn hóa LAMVIEC về 3NF:
Loại {TenDV , TenDA} phụ thuộc bắc cầu vào khóa chính:
LAMVIEC1 (MaNV , Hoten, Ngaysinh, MaDV , MaDA)
Tạo lược đồ quan hệ mới N1 (MaDV , TenDV )
Tạo lược đồ quan hệ mới N2 (MaDA, TenDA)
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 14 / 23
Dạng chuẩn Boyce-Codd (BCNF)

Một lược đồ quan hệ R là ở dạng chuẩn Boyce-Codd (BCNF -


Boyce-Codd normal form) nếu
R là 3NF, và
Không có thuộc tính khóa phụ thuộc hàm vào thuộc tính không
khóa trong R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 15 / 23


Chuẩn hóa BCNF

Giả sử R là lược đồ quan hệ có khóa K , R là 3NF và không là BCNF


Để chuẩn hóa R về BCNF, đối với mỗi thuộc tính không khóa A xác
định hàm thuộc tính khóa A → KS , với KS ⊂ K :
Loại KS ra khỏi R và bổ sung A vào khóa chính của R. Khóa
chính mới của R là: K − KS ∪ {A}
Tạo lược đồ mới S(A, KS ) với A là khóa chính

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 16 / 23


Ví dụ chuẩn hóa BCNF
Lược đồ R(A1 , A2 , A3 , A4 , A5 , A6 ) có các phụ thuộc hàm:
{A1 , A2 } → {A3 , A4 , A5 , A6 }: {A1 , A2 } là khóa chính
A4 → A2
A6 → A1
R là 2NF (không có phụ thuộc hàm bộ phận) và 3NF (không có phụ
thuộc hàm bắc cầu từ khóa chính)
R không là BCNF vì có thuộc tính khóa phụ thuộc hàm vào thuộc
tính không khóa
Chuẩn hóa về BCNF:
Loại A2 ra khỏi R và bổ sung A4 vào khóa chính:
R(A1 , A4 , A3 , A5 , A6 )
Tạo quan hệ mới S1 (A4 , A2 ) với A4 là khóa chính
Loại A1 ra khỏi R và bổ sung A6 vào khóa chính:
R(A6 , A4 , A3 , A5 )
Tạo quan hệ mới S2 (A6 , A1 ) với A6 là khóa chính
N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 17 / 23
Minh họa và "từ khóa" của các dạng chuẩn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 18 / 23


Định nghĩa tổng quát các
dạng chuẩn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 19 / 23


Dạng chuẩn 1 (1NF)

Một lược đồ quan hệ R(A1 , A2 , ..., An ) là ở dạng chuẩn 1 (1NF) nếu


Dom(Ai ) chỉ chứa các giá trị nguyên tố (không phân chia được) ∀i và
∀t =< t1 , t2 , ..., tn >∈ r (R), ti ∈ Dom(Ai ), ti nhận giá trị đơn

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 20 / 23


Dạng chuẩn 2 (2NF)

Một lược đồ quan hệ R là ở dạng chuẩn 2 (2NF) nếu mỗi thuộc


tính không khóa trong R không phụ thuộc hàm bộ phận vào một
khóa bất kỳ của R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 21 / 23


Dạng chuẩn 3 (3NF)

Một lược đồ quan hệ R là ở dạng chuẩn 3 (3NF) nếu với mọi phụ thuộc
hàm X → A thỏa mãn trong R thì ta đều có:
X là một siêu khóa của R, hoặc
A là một thuộc tính khóa của R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 22 / 23


Dạng chuẩn Boyce-Codd (BCNF)

Một lược đồ quan hệ R là ở dạng chuẩn Boyce-Codd (BCNF) nếu


với mọi phụ thuộc hàm X → A thỏa mãn trong R thì ta đều có X là
một siêu khóa của R

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Chuẩn hóa https://bit.ly/2AmGfir 23 / 23


BÀI GIẢNG
CƠ SỞ DỮ LIỆU
Ứng dụng bao đóng của tập thuộc tính

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 1 / 12
Định nghĩa bao đóng của tập thuộc tính

Giả sử F là một tập phụ thuộc hàm trên lược đồ quan hệ


R(A1 , A2 , ..., An ) và X ⊆ {A1 , A2 , ..., An } là một tập thuộc tính
của R
Bao đóng của tập thuộc tính X dưới F, ký hiệu là X + được
định nghĩa như sau:

X + = {A, A là thuộc tính của R, F |= X → A} (1)

Khi cần chỉ rõ tập phụ thuộc hàm, chúng ta ký hiệu bao đóng
của X dưới F là XF+

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 2 / 12
Tìm bao đóng của tập thuộc tính

Thuật toán 1: Thuật toán tìm bao đóng X + của X dưới F


Vào: Lược đồ quan hệ R, tập phụ thuộc hàm F và tập thuộc tính X
Ra: Tập thuộc tính X + là bao đóng của X
1 X+ = X;
2 repeat
3 OldX + = X + ;
4 for mỗi phụ thuộc hàm Y → Z trong F do
5 if X + ⊃ Y then
6 X+ = X+ ∪ Z;
7 end
8 end
9 until OldX + = X + ;

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 3 / 12
Lược đồ quan hệ và các phụ thuộc hàm

Lược đồ quan hệ R(A1 , A2 , A3 , A4 , A5 , A6 ) có tập phụ thuộc hàm:


F = {{A1 , A2 } → {A3 , A4 , A5 , A6 }, A4 → A2 , A6 → A1 }

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 4 / 12
Chương trình cài đặt thuật toán tìm bao đóng

$ ./introdb closure vidu 1 0 A6 # Chỉ in kết quả


Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A6, A1}

$ ./introdb closure vidu 1 1 A6 # In các bước thực hiện


Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Khởi động thuật toán tính bao đóng. Tập thuộc tính X = {A6}
X+ = {A6}

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 5 / 12
Chương trình cài đặt thuật toán tìm bao đóng

Lặp 1:
oldX+ = {A6}
X+ = {A6}
Lặp 1.1:
X+ = {A6}
Y->Z = {A1, A2}->{A3, A4, A5, A6}
X+ không chứa Y.
Lặp 1.2:
X+ = {A6}
Y->Z = {A4}->{A2}
X+ không chứa Y.
Lặp 1.3:
X+ = {A6}
Y->Z = {A6}->{A1}
X+ chứa Y, do đó X+ = X+ hợp Z. Giá trị mới của X+ = {A6, A1}
X+ != oldX+, tiếp tục.

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 6 / 12
Chương trình cài đặt thuật toán tìm bao đóng

Lặp 2:
oldX+ = {A6, A1}
X+ = {A6, A1}
Lặp 2.1:
X+ = {A6, A1}
Y->Z = {A1, A2}->{A3, A4, A5, A6}
X+ không chứa Y.
Lặp 2.2:
X+ = {A6, A1}
Y->Z = {A4}->{A2}
X+ không chứa Y.
Lặp 2.3:
X+ = {A6, A1}
Y->Z = {A6}->{A1}
X+ chứa Y, do đó X+ = X+ hợp Z. Giá trị mới của X+ = {A6, A1}
X+ == oldX+, dừng thuật toán.
Bao đóng X+ = {A6, A1}

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 7 / 12
Ứng dụng 1: Kiểm tra qui tắc suy diễn

Qui tắc suy diễn F |= {A2 , A6 } → A5 đúng hay sai?


Ta cần kiểm tra {A2 , A6 }+
F có chứa A5 hay không?
Thực hiện thuật toán tính bao đóng:
$ ./introdb closure vidu 1 0 A2 A6
Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A2, A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A2, A6, A1, A3, A4, A5}
{A2 , A6 }+
F chứa A5 , vậy qui tắc suy diễn đúng

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 8 / 12
Ứng dụng 1: Kiểm tra qui tắc suy diễn

Qui tắc suy diễn F |= A6 → A5 đúng hay sai?


Ta cần kiểm tra {A6 }+
F có chứa A5 hay không?
Thực hiện thuật toán tính bao đóng:
$ ./introdb closure vidu 1 0 A6
Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A6, A1}
{A6 }+
F không chứa A5 , vậy qui tắc suy diễn sai

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 9 / 12
Ứng dụng 2: Kiểm tra tập thuộc tính là siêu khóa

{A2 , A6 } có là siêu khóa không?

$ ./introdb closure vidu 1 0 A2 A6


Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A2, A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A2, A6, A1, A3, A4, A5}

{A2 , A6 }+
F = {A1 , A2 , A3 , A4 , A5 , A6 } do đó {A2 , A6 } là siêu khóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 10 / 12
Ứng dụng 2: Kiểm tra tập thuộc tính là khóa
{A2 , A6 } là siêu khóa; {A2 , A6 } có là khóa không?
Tìm {A6 }+
F:

$ ./introdb closure vidu 1 0 A6


Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A6}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A6, A1}

Tìm {A2 }+
F:

$ ./introdb closure vidu 1 0 A2


Tập thuộc tính của ’vidu’ = {A1, A2, A3, A4, A5, A6}
Tập thuộc tính X = {A2}
Tập phụ thuộc hàm = {A1, A2}->{A3, A4, A5, A6}; {A4}->{A2}; {A6}->{A1}
Bao đóng X+ = {A2}

{A2 }+ +
F và {A6 }F đều là tập con thực sự của {A1 , A2 , A3 , A4 , A5 , A6 }, do đó
{A2 , A6 } là siêu khóa tối thiểu → là khóa

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 11 / 12
Ứng dụng 3: Tìm khóa của lược đồ quan hệ

Thực hiện thuật toán tìm một khóa:


Lần lặp Tập thuộc tính Bao đóng
1 A1, A2, A3, A4, A5, A6 A1, A2, A3, A4, A5, A6
2 A2, A3, A4, A5, A6 A2, A3, A4, A5, A6, A1
3 A3, A4, A5, A6 A3, A4, A5, A6, A2, A1
4 A4, A5, A6 A4, A5, A6, A2, A1, A3
5 A5, A6 A5, A6, A1
6 A4, A6 A4, A6, A2, A1, A3, A5
7 A4 A4, A2
Khóa tìm được: {A4 , A6 }

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Ứng dụng bao đóng của tập thuộc tính https://bit.ly/2BJ1ivR 12 / 12
BÀI GIẢNG
CƠ SỞ DỮ LIỆU
Upsert trong SQL

Nguyễn Hải Châu

Khoa Công nghệ Thông tin


Trường Đại học Công nghệ, ĐHQGHN

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 1/9


Upsert là gì?

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 2/9


Hỗ trợ Upsert

Chuẩn ANSI SQL bắt đầu hỗ trợ upsert từ SQL:2003 và mở rộng trong SQL:2008

DBMS Câu lệnh Chuẩn ANSI SQL


PostgreSQL insert into ... on conflict do Không
MySQL insert ignore into Không
replace into
insert into ... on duplicate
SQLite 3 insert into ... on conflict do Không
SQLite 2 insert or ignore into
insert or replace into Không
Oracle merge Có
Microsoft SQL Server merge Có

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 3/9


PostgreSQL Upsert (1)

1 create table mytab (pk int primary key, value varchar(16));


2 CREATE TABLE
3 insert into mytab (pk, value) values (1, 'A'), (2, 'B');
4 INSERT 0 2
5 select * from mytab;
6 pk | value
7 -----+-------
8 1 | A
9 2 | B
10 (2 rows)

11 insert into mytab (pk, value) values (1, 'A');


12 ERROR: duplicate key value violates unique constraint "mytab_pkey"
13 DETAIL: Key (pk)=(1) already exists.

14 insert into mytab (pk, value) values (1, 'A') on conflict (pk) do nothing;
15 INSERT 0 0

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 4/9


PostgreSQL Upsert (2)

16 insert into mytab (pk, value) values (1, 'A') on conflict (pk) do update set
,→ value='C';
17 INSERT 0 1
18 select * from mytab;
19 pk | value
20 -----+-------
21 2 | B
22 1 | C
23 (2 rows)

24 insert into mytab (pk, value) values (1, 'A') on conflict on constraint
,→ mytab_pkey do update set value='D'; -- mytab_pkey: xem dòng số 12, slide 4
25 INSERT 0 1
26 select * from mytab;
27 pk | value
28 -----+-------
29 2 | B
30 1 | D
31 (2 rows)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 5/9


MySQL Upsert (1)

1 create table mytab (pk int primary key, value varchar(16));


2 Query OK, 0 rows affected (0.148 sec)
3 insert into mytab (pk, value) values (1, 'A'), (2, 'B');
4 Query OK, 2 rows affected (0.080 sec)
5 Records: 2 Duplicates: 0 Warnings: 0
6 select * from mytab;
7 +----+-------+
8 | pk | value |
9 +----+-------+
10 | 1 | A |
11 | 2 | B |
12 +----+-------+
13 2 rows in set (0.019 sec)

14 insert into mytab (pk, value) values (1, 'A');


15 ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

16 insert ignore into mytab (pk, value) values (1, 'A');


17 Query OK, 0 rows affected, 1 warning (0.000 sec)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 6/9


MySQL Upsert (2)

18 replace into mytab (pk, value) values (1, 'C');


19 Query OK, 2 rows affected (0.019 sec)
20 select * from mytab;
21 +----+-------+
22 | pk | value |
23 +----+-------+
24 | 1 | C |
25 | 2 | B |
26 +----+-------+
27 2 rows in set (0.000 sec)

28 insert into mytab (pk, value) values (1, 'A') on duplicate key update value='D';
29 Query OK, 2 rows affected (0.034 sec)
30 select * from mytab;
31 +----+-------+
32 | pk | value |
33 +----+-------+
34 | 1 | D |
35 | 2 | B |
36 +----+-------+
37 2 rows in set (0.000 sec)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 7/9


SQLite Upsert

1 -- SQLite 3 hỗ trợ insert into ... on conflict tương tự PostgreSQL


2 -- (dòng 14 slide 4 và dòng 16, slide 5)
3 create table mytab (pk int primary key, value varchar(16));
4 insert into mytab (pk, value) values (1, 'A');
5 insert into mytab (pk, value) values (2, 'B');
6 select * from mytab;
7 1|A
8 2|B

9 insert or ignore into mytab (pk, value) values (1, 'C');


10 select * from mytab;
11 1|A
12 2|B

13 insert or replace into mytab (pk, value) values (1, 'C');


14 select * from mytab;
15 2|B
16 1|C

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 8/9


Phiên bản các hệ quản trị CSDL

PostgreSQL: 13.4 (Linux 64-bit)


MySQL: 15.1 Distrib 10.5.12-MariaDB (Linux 64-bit)
SQLite 3: 3.34.1 (Linux 64-bit)
SQLite 2: 2.8.17 (Linux 64-bit)

N. H. Châu (VNU-UET) Cơ sở dữ liệu: Upsert https://youtu.be/IvTPHahI-7s 9/9

You might also like