Mô hình quan hệ
(Relational model)
1
EE4509, EE6133 – HK2 2011/2012
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 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:
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ể
2
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Họ tên
Tuổi
Giới tính
Trần Khánh Linh
25
Nam
Bill Gates
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:
Lực lượng: 3
Bậc: 4
3
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
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
Đị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)
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
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
A
B
C
1
aa
x
1
ab
x
2
aa
y
2
ab
y
2
bb
y
3
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Tác giả
id-tác-giả: int
tên: string
năm-sinh: int
Bài hát
id-bài-hát: int
tên: string
id-tác-giả: int
năm-sáng-tác: int
id-thể-loại: int
Thể loại
id-thể-loại: int
tên: string
Ca sĩ
id-ca-sĩ: int
tên: string
năm-sinh: int
Biểu diễn
id-biểu-diễn: int
id-ca-sĩ: int
id-bài-hát: int
Đĩa nhạc
id-đĩa-nhạc: int
tên: string
năm-phát-hành: int
Chứa
id-đĩa-nhạc: int
id-biểu-diễn: int
Book(bid, name, author_id, publisher, pub_date)
Author(aid, name)
11
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Book
bid: int
name: string
author_id: int
publisher: string
Author
aid: int
name: string
pub_date: date
Quan hệ n-n
Sinh ra một quan hệ phụ
Student(sid, name, birthday)
Class(cid, name, room, teacher)
Registration(sid, cid)
12
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Student
sid: int
name: string
birthday: date
Class
cid: int
name: string
Một số phép toán khác: set-intersection (giao),
natural-join (gộp), division (chia), assignment (gán)
Được định nghĩa dựa vào các phép toán cơ bản
15
EE4509, EE6133 – HK2 2011/2012
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:
σ
năm-sinh <= 1950
(tác-giả)
σ
sản-phẩm = “máy tính”
(hoá-đơn)
16
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
id
sản phẩm
tiền
…
1
máy tính
4
máy tính
22
…
11
máy tính
13
…
σ
sản-phẩm = “máy tính”
(hoá-đơn)
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
Ký hiệu: Π
các thuộc tính giữ lại
(r)
VD:
Π
id, tên
(tác-giả)
Π
sản-phẩm, tiền
(hoá-đơn)
17
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Π
title, author
(sách)
thành-phố-Mỹ ∪ thành-phố-VN
sách-văn-học ∪ sách-lịch-sử
18
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
tên món
giá
phở
30
bún
25
cơm
40
tên món
giá
cafe
30
nước cam
25
coca
40
tên món
giá
phở
30
bún
25
cơm
40
cafe
sản phẩm
giá
iPhone
20
Macbook
30
iPad
17
iPod
5
sản phẩm
giá
Xoom
15
Galaxy Tab
13
Desire S
10
điện-thoại – sản-phẩm-Apple
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
Ký hiệu: r1 × r2
VD:
ca-sĩ × bài-hát
nhân-viên × chi-nhánh
20
EE4509, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
id nhân viên
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
Để tránh trùng tên, dùng ký hiệu:
tên-quan-hệ.tên-thuộc-tính
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
(σ
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, EE6133 – HK2 2011/2012
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 Cartesian-
product 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ả
Ký hiệu: r1 ⋈ r2
VD:
tác-giả ⋈ bài-hát
hoá-đơn ⋈ sản-phẩm
23
id-hđ
id-sp
khách-hàng
sản phẩm
giá
333
3
Jobs
Xoom
15
565
6
Obama
Galaxy Tab
13
792
3
Bill
Xoom
15
898
6
Paul
Galaxy Tab
13
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)
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, EE6133 – HK2 2011/2012
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội