Professional Documents
Culture Documents
csdl-27 2 2020-ch3
csdl-27 2 2020-ch3
ĐẠI SỐ QUAN HỆ
I. GIỚI THIỆU
Trong chương này và chương tiếp theo, ta sẽ đề cập đến các cách tiếp cận với
thiết kế ngôn ngữ để hỏi trên các quan hệ. Khái niệm về trình bày câu hỏi thường là phần
quan trọng nhất của DML. Ngôn ngữ sử dụng dữ liệu (DML) trên mô hình quan hệ
thường được gọi tắt là "ngôn ngữ hỏi" (query language). Trong trường hợp tổng quát
nhất, các câu hỏi thường dùng một ngôn ngữ phong phú, cao cấp để diễn đạt. Phần không
dính líu hỏi đáp của ngôn ngữ hỏi thì liên quan đến phép thêm, xóa và sửa các bộ.
Ngôn ngữ hỏi chia làm 2 loại chính:
- Ngôn ngữ đại số (algebraic languages), trong đó các câu hỏi được biểu diễn
bằng cách áp dụng các toán tử đặc biệt cho các quan hệ.
- Ngôn ngữ tính toán tân từ (predicate calculus languages), trong đó các câu hỏi
mô tả một tập các bộ cần biết bằng cách đặc tả một tân từ (predicate) mà các
bộ phải thỏa mãn.
Các ngôn ngữ hỏi trừu tượng này, tất nhiên khi cài đặt trong các HQTDL hiện tại
không phải giống chính xác như miêu tả ở đây, nhưng chúng được dùng như một thước
đo để đánh giá các hệ đó, vì chúng trưng ra một khả năng tối thiểu phải có ở bất kỳ một
ngôn gnuwc hỏi nào được chấp nhận trên mô hình quan hệ.
Trong chương 3 này, ta sẽ nói đến đại số quan hệ (relational algebra), phần nền
cho loiaj ngôn ngữ đại số.
II. MỘT SỐ KHÁI NIỆM
1. Đại số hệ
a. Định nghĩa
Đại số hệ là một cặp <M, F>, trong đó M là một tập được gọi là tập nền, F là một
tập các phép toán trên M.
Mỗi phép toán f F là một ánh xạ bộ phận:
f: Mn M
và được gọi là phép toán n ngôi.
b. Ví dụ
Với F={+, -, *}, = <N, F> tạo thành một đại số hệ.
2. Đại số quan hệ
Tập hợp các phép toán quan hệ đã xét, cùng với một CSDL cho trước, tạo thành
một đại số hệ, gọi là đại số quan hệ.
3. Biểu thức quan hệ
a. Định nghĩa
Biểu thức quan hệ được xây dựng từ các quan hệ trong một CSDL cho trước và
các phép toán quan hệ.
b. Thứ tự ưu tiên trong biểu thức quan hệ
Thông thường, trong một biểu thức quan hệ, người ta coi các phép toán một ngôi
có thứ tự ưu tiên cao hơn các phép toán hai ngôi. Ngoài ra, mỗi HQTDLcuj thể lại có
những qui định riêng. Ví dụ, phép giao có thể được qui định có thứ tự ưu tiên cao hơn
phép hội.
Ví dụ:
Tìm mã và tên các mặt hàng được nhập và xuất trong ngày 24/12/1997:
MA_HANG, TEN_HG ( DVT=”cái” (HANG)) *
(MA_HANG ( NGAY=”24/12/1997” (HANG_NHAP) )
MA_HANG ( NGAY=”24/12/1997” (HANG_XUAT)))
III. CÁC PHÉP TOÁN CƠ BẢN
Trong đại số quan hệ, ta giả thiết các cột có thể không cần đặt tên, và quan tâm
đến thứ tự các thuộc tính. Nếu dùng số thứ tự thuộc tính trong các biểu thức so sánh, để
tránh nhầm lẫn, ta qui ước có dấu $ đứng trước số thứ tự.
Ta cũng đã giả định mọi quan hệ đều hữu hạn. Ràng buộc về tính hữu hạn dẫn đến
vài khó khăn trong đại số quan hệ và phép tính quan hệ. Chẳng hạn, không thể chấp nhận
phép toán bù (complementation) vì –R (tập các bộ không thuộc R) sẽ sinh ra một quan hệ
vô hạn: không cách chi liệt kê được hết –R, cho dù ngôn ngữ hỏi cho phép có một biểu
thức như vậy.
1. Phép chọn
(select operator, selection/ seïlection, restriction)
a. Mục đích
Phép chọn là phép tính để xây dựng một tập con gồm các bộ của quan hệ đã cho,
thỏa biểu thức logic cho trước.
b. Giả thiết
- Cho quan hệ R trên tập thuộc tính U- ký hiệu R(U).
- Cho biểu thức logic F phát biểu trên U, gồm có:
i) Các tác tố (operands): là các hằng, tên hoặc các số thứ tự thuộc tính
ii) Các phép so sánh số học: <, , >, , =,
iii) Các phép logic: (hoặc), (và), (không).
Nói cách khác, F là một tổ hợp gồm các phép so sánh các tác tố, nối nhau bằng các
phép logic. F sẽ cho kết quả “đúng” hoặc “sai” tùy vào giá trị cụ thể của từng bộ. Ta nói
bộ t thỏa mãn F- ký hiệu F(t) – nếu thay hết mọi thuộc tính trong F bằng các giá trị cụ thể
tương ứng của bộ t thì F sinh ra kết quả đúng. F được gọi là biểu thức chọn hoặc điều
kiện chọn.
c. Định nghĩa
Phép chọn quan hệ R theo điều kiện F cho ta quan hệ P:
P= R(F) = { t R | F(t) }
Ta cũng có thể dùng ký hiệu F(R) thay vì R(F).
a. Ví dụ
Cho quan hệ:
Chọn ra các môn có 4 tín chỉ và có đề án cho sinh viên thực hiện.
MON_D_A= MON_HOC (SO_ TIN_CHI =4 CO_DE_AN)
Hoặc có thể viết:
MON_D_A= $3=4 $4(MON_HOC)
c. Định nghĩa
Phép chiếu quan hệ R trên X là tập hợp:
R[X]={ t[X] | t R }
Hoặc:
R[X]= { b1b2...bm | ( a1a2...an) (j=1...m) bj= a ij }
Cũng có thể dùng ký hiệu R.X hoặc i1, i2,...im (R) thay cho R[X].
d. Ví dụ
Dùng quan hệ trong ví dụ trên, cho biết mã và tên các môn học:
MON_HOC_2= MON_HOC [MA_MON, TEN_MON]
= $1, $2(MON_HOC)
MON_HOC_2 MA_MON TEN_MON
01 Cơ sở dữ liệu
02 Cấu trúc dữ liệu
03 Phân tích hệ thống
04 Cấu trúc máy tính
Tçm DM HANG
* Câu hỏi:
Tìm mã các tài xế có nơi đến ít ra là như tài xế có mã A3.
* Giải:
Danh sách nơi đến của tài xế A3:
DS_ND= CHUYEN (MA_TXE='A3') [NOI_DEN]
DS_ND NOI_DEN
Cần Thơ
TP HCM
- Danh sách các nơi đến kèm theo các tài xế:
TX_ND= CHUYEN [ NOI_DEN, MA_TXE ]
DS_TX MA_TXE
A3
I1
Ta thấy ngoài tài xế A3 có nơi đến là Cần Thơ và TP HCM, còn có tài xế I1 lái xe
đến 3 nơi Vĩnh long, Cần Thơ và TP HCM (rộng hơn của A3).
3. Phép kết nối bình thường (join, inner join)
a. Định nghĩa
Gọi là một trong các phép so sánh số học (<, , >, , =, ). Cho hai quan hệ
R(U) và S(V). Phép kết nối- giữa quan hệ R đối với thuộc tính A (AU) và quan hệ S
đối với thuộc tính B (BV), được định nghĩa như sau:
R S = { <u,v> | u R vS u[A] v[B] }
AB
Phép kết nối này chỉ thực hiện được khi thực hiện được giữa A và B.
Nếu không dựa trên phép so sánh , thì R S trở thành tích Đề-các của R và S.
Nếu là phép so sánh "=", ta gọi đây là phép kết nối bằng (equijoin).
Phép kết nối là phương tiện chủ yếu cho sự thông thương giữa các quan hệ.
b. Ví dụ
Cho hai quan hệ:
* Câu hỏi:
Biết rằng mỗi đơn vị học trình chiếm 15 tiết. Hãy lập bảng dự kiến phân công
giảng dạy thêm các môn trong danh sách đã cho, sao cho nếu các giáo viên có dạy thêm
thì cũng không vượt quá số giờ chuẩn (280 tiết).
* Giải:
- Trước tiên, ta nhận xét bảng phân công chỉ cần mã giáo viên, số giờ đã dạy, mã
môn học và số đơn vị học trình. Như vậy, nó sẽ là kết quả của phép kết nối giữa hai quan
hệ có sơ đồ sau:
GIAO_VIEN_2 (MA_GV, SO_TIET_DA_DAY)
MON_HOC_2 (MA_MON, SO_DVHT)
Với điều kiện kết nối là :
SO_TIET_DA_DAY + SO_DVHT * 15<= 280
hay:
SO_TIET_DA_DAY <= 280 - SO_DVHT * 15
- Như vậy, ta phải thwujc hiện các phép chiếu trên GIAO_VIEN vaì MON_HOC,
vì:
GIAO_VIEN_2 = GIAO_VIEN [ MA_GV, SO_TIET_ÂA_DAY ]
MON_HOC_2 = MON_HOC [ MA_MON, SO_DVHT ]
a. Ví dụ
Cho hai quan hệ:
Gọi:
TAM NHAN_VIEN VO_CHG_NV
=
NHAN_VIEN VO_CHG_NV
TRAI =
NHAN_VIEN VO_CHG_NV
PHAI =
NHAN_VIEN VO_CHG_NV
HAI_BEN =
Ví dụ:
Dùng quan hệ GIAO_VIEN mà ta đã biết:
Ví dụ:
PHÒNG B 3
Số môn có trong PHONG Ģ count PHÒNG C 3
lịch thi/ phòng MA_MON PHÒNG D 2
(LICH_THI) PHÒNG E 2
12/07/1994 80
Tổng số thí sinh đi NGAY Ģ sum SO_TS 14/07/1994 85
thi/ ngày (LICH_THI) 16/07/1994 115
17/07/1994 90
PHÒNG B 16/07/1994
Ngày thi trễ nhất / PHONG Ģ max NGAY PHÒNG C 17/07/1994
phòng (LICH_THI) PHÒNG D 16/07/1994
PHÒNG E 17/07/1994
PHÒNG B 12/07/1994
Ngày thi sớm nhất PHONG G min NGAY PHÒNG C 12/07/1994
/ phòng (LICH_THI) PHÒNG D 12/07/1994
PHÒNG E 14/07/1994
Ví dụ 2
GVIEN (MS_GV, HO, TEN, MA_KHOA, CHUC_VU, HOC_VI, CHUC DANH)
GTRINH (MS_GT, TEN, SO_TC, SO_TRG, TH_DIEM_P_HANH)
VIET_GT (MS_GT, MS_GV, LA_TG_CHINH)
KHOA (MA_KHOA, TEN_KHOA)
1. Tìm số giáo trình mà hiệu trưởng Nguyễn Anh Tuấn đã phát hành từ năm
1998 đến 2008.
2. Tìm ngày phát hành sớm nhất của giáo trình “Mạng máy tính” viết bởi giáo
viên Phan Thượng Cang.
3. Tìm số giáo trình mà mỗi giáo viên ở Khoa Nông nghiệp đã viết.
4. Tìm số trang dày nhất trong số các giáo trình mang tên “Dinh dưỡng cho cá”.
5. Tìm thời điểm phát hành gần nhất trong số các giáo trình viết bởi mỗi giáo
viên.
6. Tìm tổng số tín chỉ mà mỗi giáo viên Khoa Khoa học đã viết giáo trình.
7. Tìm tổng số giáo viên có học vị thạc sĩ hoặc tiến sĩ ở mỗi khoa đã viết giáo
trình trong khoảng thời gian từ năm 2004 đến nay.
8. Tìm trung bình số tín chỉ của các giáo trình viết bởi các giáo viên có chức vụ
Trưởng bộ môn.
9. Tìm tên các giáo trình mà thạc sĩ Lê Văn Lâm đã viết.
10. Tìm họ tên và tên khoa của giáo viên viết được nhiều giáo trình nhất từ năm
2007 đến nay.
11. Tìm mã và tên của các quyển giáo trình có số tín chỉ nhiều nhất Khoa CNTT-
TT.
12. Tìm tổng số giáo trình đã viết trong khoa có nhiều giáo viên nhất.
13. Tìm tên các khoa có trung bình số giáo trình viết bởi mỗi giáo viên lớn hơn
3.
Ví dụ 3
THI_SINH (MS_TS, HO, TEN, NAM_SINH, TRĐO_VH, TINH)
GIAM_KHAO (MS_GK, PHAI, HO, TEN, NAM_SINH, NGHE, NOI_CGTAC)
SO_THÍCH (MS_ST, DGIAI)
THÍCH (MS_TS, MS_ST)
CHAM (VONG, MS_GK, MS_TS, DIEM)