Bài 3: Mô hình quan hệ
(Relational model)
1
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Giới thiệu
Mô hình quan hệ sử dụng lý thuyết tập
hợp và logic bậc nhất để biểu diễn dữ
liệu
CSDL được biểu diễn bằng một tập
các bảng:
Mỗi bảng là tập hợp các bộ giá trị
Mỗi cột đều có cùng một kiểu dữ liệu
Mỗi hàng trong bảng là bộ các giá trị có
quan hệ với nhau
So sánh với mô hình ER:
2
Mỗi bảng tương ứng với một tập thực
thể
Mỗi cột tương ứng một thuộc tính
Mỗi hàng trong bảng tương ứng với
một thực thể
Họ tên
Tuổi
Giới tính
Trần Khánh Linh
25
Nam
Bill Gates
50
Nam
Lý Liên Kiệt
45
Nam
Lưu Diệc Phi
25
Nữ
Nguyễn Văn Bố
37
Nam
Lê Thị Mẹ
30
Nữ
…
…
…
…
…
…
…
…
…
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Các định nghĩa
Một mô hình quan hệ là tập hợp các quan hệ (relation)
Mỗi quan hệ gồm 2 phần:
Thể hiện (instance): là bảng các bộ giá trị (tuples)
Lược đồ (schema): chứa tên của quan hệ, cùng với tên và kiểu
từng cột của bảng
VD: Book(id: integer, title: string, author: string, pub-year: integer)
Số dòng của bảng: lực lượng (cardinality) của quan hệ
Số cột của bảng: bậc (degree) của quan hệ
VD:
id
title
author
pub-year
3
Lực lượng: 3
Bậc: 4
1
The call of the wild
Jack London
1903
3
The universe in a nutshell
Stephen Hawking
2001
4
Hồng lâu mộng
Tào Tuyết Cần
1791
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Định nghĩa bằng toán học
Lược đồ quan hệ R là tích Đề-các các miền giá trị của
các thuộc tính
Đầy đủ:
Book(id: int, title: string, author: string, pub-year: int)
Ngắn gọn: Book(id, title, author, pub-year)
Book = dom(int) × dom(string) × dom(string) × dom(int)
(trong đó dom(…) ký hiệu tập giá trị của một kiểu)
Quan hệ r trên R: ký hiệu bằng r(R) là một tập con của R
my-books = my-books(Book) ⊂ Book
Một phần tử của r gọi là một thể hiện, một hàng, hay một
bộ giá trị
Chú ý: người ta thường gọi tắt “quan hệ” thay cho “thể
hiện của quan hệ”
4
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khoá (key)
Các khái niệm về khoá của quan hệ cũng tương tự như
với thực thể trong mô hình ER
Siêu khoá (superkey): tập các thuộc tính mà bộ giá trị
không lặp lại
Nếu K là một siêu khoá thì K’ = K ∪ a cũng là một siêu khoá, với a
là một thuộc tính của quan hệ
Khoá ứng viên (candidate key): là siêu khoá không có
thuộc tính dư thừa (không tồn tại siêu khoá là tập con)
Một quan hệ có thể có 0, 1 hoặc nhiều khoá ứng viên
Khoá chính (primary key): là một khoá ứng viên được
người thiết kế CSDL lựa chọn
5
Mỗi quan hệ chỉ có nhiều nhất một khoá chính
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Ví dụ
K1 = {A} không phải khoá vì các giá trị có
lặp lại
K2 = {A, B} là siêu khoá vì không có bộ giá
trị nào lặp lại
K3 = {A, B, C} là siêu khoá vì K2 là siêu
khoá và K2 ⊂ K3
K2 là khoá ứng viên vì không có tập con
nào của K2 là siêu khoá
K3 không phải khoá ứng viên vì K2 ⊂ K3 là
một siêu khoá
6
A
B
C
1
aa
x
1
ab
x
2
aa
y
2
ab
y
2
bb
y
3
ab
x
3
bb
x
4
aa
y
5
bb
x
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khoá ngoài (foreign key)
Một quan hệ r1 có chứa khoá chính K của quan hệ
r2 thì K gọi là khoá ngoài của r1 tham chiếu tới r2
Với mỗi thể hiện của r1, tồn tại ít nhất một thể hiện
của r2 có giá trị của K giống ở r1
Ví dụ:
sv ⊂ SinhVien(id-sinh-vien, ten, nam-sinh)
diem ⊂ Diem(id-sinh-vien, mon-hoc, diem)
o id-sinh-vien là khoá ngoài của quan hệ diem tham chiếu
tới quan hệ sv
o mỗi giá trị của id-sinh-vien tồn tại trong quan hệ diem
cũng tồn tại trong quan hệ sv
o
7
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Sơ đồ CSDL
Một mô hình quan hệ cũng có thể được biểu diễn
dưới dạng sơ đồ
Đĩa nhạc
Chứa
Biểu diễn
Ca sĩ
id-đĩa-nhạc: int
id-đĩa-nhạc: int
id-biểu-diễn: int
id-ca-sĩ: int
tên: string
id-biểu-diễn: int
id-ca-sĩ: int
tên: string
năm-phát-hành: int
số-thứ-tự: int
id-bài-hát: int
năm-sinh: int
thời-gian: time
Bài hát
id-bài-hát: int
Tác giả
tên: string
id-tác-giả: int
id-tác-giả: int
tên: string
năm-sáng-tác: int
năm-sinh: int
id-thể-loại: int
Thể loại
id-thể-loại: int
tên: string
8
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Biến thực thể quan hệ
Customer(cid, name, address, phone)
Customer
cid: int
name: string
address: string
phone: string
9
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Thực thể yếu
Book(bid, name, author, publisher, pub_date)
Chapter(ch_num, bid, title)
Book
Chapter
bid: int
ch_num: int
name: string
bid: int
author: string
title: string
publisher: string
pub_date: date
10
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Liên kết 1-n
Book(bid, name, author_id, publisher, pub_date)
Author(aid, name)
Book
Author
bid: int
aid: int
name: string
name: string
author_id: int
publisher: string
pub_date: date
11
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Liên kết n-n
Sinh ra một quan hệ phụ
Student(sid, name, birthday)
Class(cid, name, room, teacher)
Registration(sid, cid)
Student
Registration
Class
sid: int
sid: int
cid: int
name: string
cid: int
name: string
birthday: date
room: string
teacher: string
12
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Ngôn ngữ truy vấn (query language)
Để thao tác trên các quan hệ, chúng ta cần đến
ngôn ngữ truy vấn
Ngôn ngữ truy vấn thường là ngôn ngữ cấp cao hơn
so với các ngôn ngữ lập trình
VD: SQL
Trong phần tiếp theo, chúng ta tìm hiểu về ngôn ngữ
truy vấn ở dạng lý thuyết hình thức
13
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Đại số quan hệ
(relational algebra)
14
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm
Đại số quan hệ là một ngôn ngữ truy vấn dạng thủ
tục (procedural query language), là một tập hợp các
phép toán:
Có một hoặc hai đầu vào là các quan hệ
Đầu ra (kết quả) là một quan hệ mới
Các phép toán cơ bản: select (chọn), project (chiếu),
union (hợp), set-diffrence (trừ), Cartesian-product
(tích Đề-các) và rename (đổi tên)
Một số phép toán khác: set-intersection (giao),
natural-join (gộp), division (chia), assignment (gán)
15
Được định nghĩa dựa vào các phép toán cơ bản
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Select (phép chọn) σ
Phép select nhận đầu vào là một quan hệ, và cho
phép lựa chọn những bộ giá trị trong quan hệ đó
thoả mãn một điều kiện (vị ngữ)
Ký hiệu: σvị ngữ(r)
VD:
id sản phẩm tiền
…
16
σnăm-sinh <= 1950(tác-giả)
σsản-phẩm = “máy tính”(hoá-đơn)
id
sản phẩm
tiền
…
1
máy tính
20
…
4
máy tính
22
…
11
máy tính
13
…
σsản-phẩm = “máy tính”(hoá-đơn)
1
máy tính
20
…
3
điện thoại
10
…
4
máy tính
22
…
7
tivi
5
…
10
tủ lạnh
8
…
11
máy tính
13
…
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Project (phép chiếu) Π
Phép project nhận đầu vào là một quan hệ, và cho
phép chỉ giữ lại những thuộc tính mong muốn
title
author
Ký hiệu: Πcác thuộc tính giữ lại(r)
The call of the wild
Jack London
VD:
Πid, tên(tác-giả)
Πsản-phẩm, tiền(hoá-đơn)
The universe in a nutshell
Stephen Hawking
Hồng lâu mộng
Tào Tuyết Cần
Πtitle, author(sách)
id
title
author
pub-year
1
The call of the wild
Jack London
1903
3
The universe in a nutshell
Stephen Hawking
2001
4
Hồng lâu mộng
Tào Tuyết Cần
1791
17
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Union (phép hợp) ∪
Phép union nhận đầu vào là hai quan hệ tương thích với
nhau và kết quả là quan hệ bao gồm những bộ giá trị có
mặt ở một trong hai quan hệ
Ký hiệu: r1 ∪ r2
VD:
thành-phố-Mỹ ∪ thành-phố-VN
sách-văn-học ∪ sách-lịch-sử
tên món
phở
30
bún
25
cơm
40
tên món
18
giá
giá
tên món
đồ-ăn ∪ đồ-uống
giá
phở
30
bún
25
cơm
40
cafe
30
cafe
30
nước cam
25
nước cam
25
coca
40
coca
40
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Set-difference (trừ) –
Phép set-difference nhận đầu vào là hai quan hệ tương
thích với nhau, và trả về kết quả là những bộ giá trị trong
quan hệ thứ nhất mà không có trong quan hệ thứ hai
Ký hiệu: r1 – r2
sản phẩm
giá
VD:
Xoom
15
19
thực-đơn – đồ-ăn
máy-tính – laptop
điện-thoại – sản-phẩm-Apple
sản phẩm
giá
Xoom
15
Galaxy Tab
13
sản phẩm
giá
iPhone
20
iPhone
20
Desire S
10
Macbook
30
iPad
17
iPad
17
iPod
5
Galaxy Tab
13
Desire S
10
điện-thoại – sản-phẩm-Apple
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Cartesian-product (tích Đề-các) ×
Phép Cartesian-product nhận đầu vào là hai quan hệ, và
trả về kết quả là tập tất cả các bộ giá trị giữa chúng
id nhân
nhânchiKý hiệu: r1 × r2
id chi nhánh
viên
viên.tên
nhánh.tên
VD:
123
Lê Đức Thọ
2
Hà Nội
ca-sĩ × bài-hát
nhân-viên × chi-nhánh
id nhân viên
tên
123
Lê Đức Thọ
427
Bùi Văn Hải
id chi nhánh
tên
2
Hà Nội
1
Sài Gòn
3
Đà Nẵng
20
123
Lê Đức Thọ
1
Sài Gòn
123
Lê Đức Thọ
3
Đà Nẵng
427
Bùi Văn Hải
2
Hà Nội
427
Bùi Văn Hải
1
Sài Gòn
427
Bùi Văn Hải
3
Đà Nẵng
nhân-viên × chi-nhánh
Để tránh trùng tên, dùng ký hiệu:
tên-quan-hệ.tên-thuộc-tính
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Biểu thức quan hệ và phép rename (đổi tên)
Các phép toán quan hệ có thể được lồng nhau tạo thành biểu thức
VD:
Πtên, giá(σcalo <=100(món-ăn) ∪ σgiá < 30(đồ-uống))
Πtác-giả.tên, bài-hát.tên(σid-tác-giả = bài-hát.id-tác-giả(σtên=“Trịnh Công Sơn”(tác-giả) × bài-hát))
Kết quả các biểu thức quan hệ là các quan hệ không có tên, phép
toán rename cho phép đặt tên cho kết quả một biểu thức
Ký hiệu: có 2 dạng
ρtên-quan-hệ(E) đặt tên cho quan hệ kết quả của biểu thức E
ρtên-quan-hệ(tên các thuộc tính)(E) đặt tên cho quan hệ và các thuộc tính
kết quả của biểu thức E
VD:
ρđồ-uống-rẻ(σgiá < 30(đồ-uống))
ρnv-cn(tên-nhân-viên, tên-chi-nhánh)(Πnhân-viên.tên, chi-nhánh.tên
(σnhân-viên.id-chi-nhánh = chi-nhánh.id(nhân-viên × chi-nhánh)))
21
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Set-intersection (giao) ∩
Phép set-intersection nhận đầu vào là hai quan hệ tương
thích với nhau và kết quả là quan hệ bao gồm những bộ
giá trị có mặt ở đồng thời trong hai quan hệ
Ký hiệu: r1 ∩ r2
VD:
món-ăn-Tàu ∩ món-ăn-VN
khách-mua-máy-tính ∩ khách-mua-điện-thoại
Phép set-intersection có thể được định nghĩa thông qua
phép trừ:
r1 ∩ r2 = r1 – (r1 – r2)
22
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Natural-join (gộp) ⋈
Trong việc khai thác CSDL, một câu hỏi rất hay gặp như sau: “Xuất ra danh
sách các tác giả cùng với các bài hát được sáng tác” sử dụng Cartesianproduct và select:
σtác-giả.id-tác-giả = bài-hát.id-tác-giả(tác-giả × bài-hát)
Phép natural-join nhận hai quan hệ và thực hiện Cartesian-product giữa
chúng, sau đó select những bộ giá trị dựa trên các thuộc tính chung và trả
về tập kết quả
id-sp
sản phẩm
giá
id-hđ
id-sp
khách-hàng
Ký hiệu: r1 ⋈ r2
VD:
23
tác-giả ⋈ bài-hát
3
Xoom
15
333
3
Jobs
6
Galaxy Tab
13
565
6
Obama
10
iPhone
20
792
3
Bill
898
10
Paul
hoá-đơn ⋈ sản-phẩm
⋈
id-hđ
id-sp
khách-hàng
sản phẩm
333
3
Jobs
Xoom
15
565
6
Obama
Galaxy Tab
13
792
3
Bill
Xoom
15
898
6
Paul
iPhone
20
giá
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Division (chia) ÷
Phép division dùng để giải quyết câu hỏi dạng: “Liệt kê các khách
hàng đã đăng ký tất cả các dịch vụ của hãng”
Đáp án cảu câu hỏi này là kết quả của phép division:
đăng-ký(id-khách, id-dịch-vụ) ÷ khách-hàng(id-khách)
Định nghĩa: Cho các quan hệ r(R) và s(S) với S ⊆ R. Kết quả của
phép division r ÷ s là một quan hệ trên R – S, trong đó một phần tử t
thuộc r ÷ s khi và chỉ khi:
t ∈ ΠR – S(r)
Với mọi ts ∈ S, có một tr ∈ R thoả mãn: ts[S] = tr[R] và tr[R – S] = t
Định nghĩa thông qua các phép toán cơ bản:
r ÷ s = ΠR – S(r) – ΠR – S((ΠR – S(r) × s) – ΠR – S, S(r))
24
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Assignment (gán) ←
Phép assignment dùng để gán kết quả của một biểu thức
vào một biến (tương tự như trong các ngôn ngữ lập
trình)
Ký hiệu: r1 ← r2
VD:
u ← ΠR – S(r)
v ← ΠR – S(u × s) – ΠR – S, S(r))
r÷s=u–v
Phép assignment chỉ giúp thu gọn và đơn giản hoá biểu
thức
25
EE4509, EE4253, EE6133 – HK1 2014/2015
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội