Giới thiệu<br />
Mô hình Cơ sở dữ liệu Quan hệ (gọi tắt là Mô<br />
hình Quan hệ) do E.F Codd đề xuất năm 1971<br />
Mô hình Quan hệ thể hiện dữ liệu dưới góc độ logic<br />
Mô hình này bao gồm:<br />
<br />
<br />
Chương 3<br />
Mô hình cơ sở dữ liệu quan hệ<br />
<br />
<br />
<br />
(The Relational Database Model)<br />
<br />
<br />
<br />
<br />
<br />
Các khái niệm nhằm mô tả dữ liệu dưới dạng dòng và cột<br />
như quan hệ, bộ, thuộc tính, khóa chính, khoá ngoại, ...<br />
Các phép toán thao tác với dữ liệu_ Đại số quan hệ<br />
Ràng buộc toàn vẹn quan hệ<br />
<br />
Các Hệ quản trị CSDL quan hệ (RDBMS) được xây<br />
dựng dựa trên lý thuyết mô hình quan hệ.<br />
<br />
1<br />
<br />
Quan hệ<br />
<br />
Các khái niệm<br />
<br />
<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
Quan hệ / bảng<br />
Thuộc tính<br />
Bộ<br />
Lược đồ quan hệ<br />
Khóa<br />
<br />
<br />
<br />
<br />
<br />
Dữ liệu lưu trữ trong CSDL Quan hệ được tổ<br />
chức thành các Quan hệ (relation)<br />
Quan hệ (relation) thể hiện ra như là bảng<br />
(table)<br />
Một quan hệ có :<br />
<br />
<br />
<br />
<br />
<br />
Một tên<br />
Tập hợp các thuộc tính (attribute), có tên và kiểu dữ<br />
liệu<br />
Tập hợp các bộ (tuple), có thể thay đổi theo thời gian<br />
<br />
3<br />
<br />
Quan hệ và bảng<br />
<br />
4<br />
<br />
Thuộc tính<br />
<br />
Thuật ngữ tương đương :<br />
• Quan hệ, bộ, thuộc tính (Relation, tuple, attribute)<br />
• Bảng, dòng, cột (Table, row, column)<br />
<br />
MASV<br />
99001<br />
<br />
MAMH<br />
CSDL<br />
<br />
MAKHOA DIEMTHI<br />
CNTT<br />
3.0<br />
<br />
99002<br />
99001<br />
99005<br />
<br />
CSDL<br />
THVP<br />
THVP<br />
<br />
CNTT<br />
CNTT<br />
AV<br />
<br />
8.0<br />
6.0<br />
5.0<br />
5<br />
<br />
Một thuộc tính bao gồm :<br />
Tên thuộc tính<br />
Tên phân biệt<br />
Giúp diễn giải ý nghĩa thuộc tính (thuộc tính của thực thể,<br />
hay mối kết hợp)<br />
Kiểu dữ liệu thuộc tính<br />
Số nguyên, số thực, văn bản, logic,…<br />
Miền giá trị xác định<br />
Có thể bị áp đặt bởi qui tắc nghiệp vụ, hay ràng buộc dữ<br />
liệu<br />
Có thể NULL<br />
6<br />
<br />
Lược đồ Quan hệ<br />
<br />
Bộ và quan hệ<br />
<br />
<br />
<br />
Mỗi bộ (dòng) là một tổ hợp các giá trị tương ứng với<br />
các thuộc tính của quan hệ<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
mô tả về một thực thể , hay một mối kết hợp có trong thế<br />
giới thực<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ký hiệu: r(Ketqua)<br />
Không có 2 bộ trùng nhau trong một quan hệ<br />
<br />
khóa<br />
Trật tự của các bộ (và các thuộc tính) là không quan trọng<br />
đối với DBMS.<br />
<br />
<br />
<br />
Khóa<br />
(Key hay candidate key)<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Lược đồ CSDL<br />
<br />
<br />
Tập hợp các lược đồ quan hệ trong cùng một<br />
CSDL<br />
<br />
8<br />
<br />
Khóa _ ví dụ 1<br />
<br />
Gọi S là một tập các thuộc tính của lược đồ quan hệ R<br />
<br />
<br />
Các thuộc tính và Mối liên hệ giữa các thuộc tính<br />
Mỗi lược đồ quan hệ luôn kèm một tân từ để diễn tả<br />
ý nghĩa của nó.<br />
Vd, tân từ: Mỗi Sinh viên thuộc một khoa, học một<br />
môn học thì có kết quả thi môn học đó.<br />
Ký hiệu:<br />
<br />
Ketqua( MASV, MAMH, MAKHOA, DIEMTHI)<br />
<br />
7<br />
<br />
<br />
<br />
Mô tả cấu trúc của quan hệ<br />
<br />
Một tập các bộ xác định tại một thời điểm, gọi là<br />
một thể hiện của lược đồ quan hệ (hay quan hệ)<br />
<br />
<br />
<br />
<br />
<br />
Lược đồ quan hệ - relation schema<br />
<br />
S được gọi là một siêu khóa (superkey) của lược đồ quan hệ<br />
R, nếu với hai bộ bất kỳ trong R thì giá trị của các thuộc tính<br />
trong S là khác nhau<br />
Siêu khoá có ít thuộc tính nhất được gọi là khóa (key) hay<br />
khóa dự tuyển (candidate key)<br />
Một lược đồ quan hệ có thể có nhiều khóa (khóa dự tuyển)<br />
Một khóa được chọn để cài đặt gọi là khóa chính (primary<br />
key)<br />
Không chứa giá trị NULL<br />
khóa ngoại (foreign key) là thuộc tính của LĐQH này nhưng<br />
lại là khóa chính của LĐQH khác<br />
Khóa phức (composite key) là khóa có nhiều hơn một thuộc<br />
tính<br />
<br />
Thuộc tính khóa và thuộc tính không khóa<br />
<br />
9<br />
<br />
<br />
<br />
Monhoc(Mamon, Tenmon, Sotiet)<br />
<br />
rMonhoc<br />
<br />
Mamon Tenmon<br />
THVP<br />
Tin hoc văn phòng<br />
LTC<br />
Lập trình C<br />
<br />
Sotiet<br />
30<br />
60<br />
<br />
CSDL1<br />
CSDL2<br />
<br />
45<br />
45<br />
<br />
Co so du lieu<br />
Co so du lieu<br />
<br />
Siêu khóa : {Mamon}, {Mamon, Tenmon}, {Mamon, Sotiet},<br />
{Mamon, Tenmon, Sotiet}<br />
Khóa (khóa dự tuyển, khóa chính) : {Mamon}<br />
<br />
Khóa _ ví dụ 2<br />
<br />
Khóa _ ví dụ 3<br />
<br />
Ketqua(MaSV, MaMH, Makhoa, Diemthi)<br />
rKQ<br />
MASV<br />
MAMH<br />
MAKHOA DIEMTHI<br />
<br />
10<br />
<br />
<br />
<br />
Sinhvien(MaSV, Hoten, Phai, soCMND)<br />
rSV MaSV Hoten<br />
Phai soCMND<br />
<br />
<br />
<br />
99001<br />
99002<br />
99001<br />
99005<br />
<br />
CSDL<br />
CSDL<br />
THVP<br />
THVP<br />
<br />
CNTT<br />
CNTT<br />
CNTT<br />
AV<br />
<br />
99001 Nguyen van anh<br />
<br />
Nam 02209875<br />
<br />
99003 Nguyen Thi Hong Nu<br />
99004 Do van Thuan<br />
<br />
Siêu khóa: {MaSV, MaMH}, {MaSV,MaMH,MaKhoa},…<br />
Khóa (khóa dự tuyển, khóa chính , khóa phức): {MaSV, MaMH}<br />
Khóa ngoại : {Makhoa}<br />
<br />
Nam 01245012<br />
<br />
99002 Tran Le Tuan<br />
<br />
3.0<br />
8.0<br />
6.0<br />
5.0<br />
<br />
04563711<br />
<br />
Nam<br />
<br />
Siêu khóa : {MaSV} , {MaSV, Hoten}, … ,<br />
{soCMND} , {soCMND, Hoten},…<br />
Khóa (khóa dự tuyển): {MaSV} , {soCMND}<br />
<br />
11<br />
<br />
12<br />
<br />
Khóa chính : {MaSV}<br />
<br />
Đại số quan hệ<br />
<br />
<br />
<br />
<br />
Giới thiệu<br />
<br />
Khái niệm<br />
Các phép toán đại số quan hệ<br />
Ví dụ<br />
<br />
<br />
<br />
Đại số quan hệ (và phép tính quan hệ) được<br />
định nghĩa bởi Codd 1971<br />
<br />
<br />
<br />
<br />
Là ngôn ngữ thủ tục bậc cao<br />
<br />
<br />
<br />
<br />
được xem như là nền tảng của các ngôn ngữ<br />
quan hệ khác như SQL<br />
Được dùng để chỉ ra cách xây dựng một quan hệ mới<br />
từ một hay nhiều quan hệ trong DB<br />
<br />
Bao gồm tập các phép toán thao tác trên các<br />
quan hệ<br />
<br />
13<br />
<br />
Các phép toán (operation)<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ký hiệu<br />
<br />
5 phép toán cơ bản<br />
<br />
<br />
14<br />
<br />
<br />
<br />
Phép chọn (selection)<br />
Phép chiếu (projection)<br />
Phép hợp (union)<br />
Phép trừ (set difference)<br />
Phép tích Descartes (Cartesian product)<br />
<br />
<br />
<br />
Quan hệ r là một thể hiện của lược đồ quan<br />
hệ R(A1, A2, …, Am)<br />
Điều kiện F là 1 biểu thức luận lý có giá trị<br />
true/false. F bao gồm:<br />
<br />
<br />
<br />
3 phép toán suy dẫn*<br />
Phép kết (Join)<br />
Phép giao (Intersection)<br />
Phép chia (Division)<br />
15<br />
(*Có thể được biểu diễn dưới dạng các phép toán cơ bản)<br />
<br />
Các toán hạng là hằng hoặc tên thuộc tính<br />
Các phép toán so sánh =, , , <br />
<br />
<br />
<br />
Các phép toán luận lý not (), and (), or ()<br />
<br />
<br />
<br />
16<br />
<br />
Phép chọn (selection) – ví dụ 1<br />
Phé chọ<br />
Phép chọn (selection)<br />
Phé chọ<br />
chọn trên quan hệ r(R) theo điều kiện<br />
F, ký hiệu là r(F) hay r:F , cho kết quả là 1<br />
quan hệ bao gồm các bộ của r thỏa mãn<br />
điều kiện F<br />
r(F) = r:F = { t |t r và F(t) = true }<br />
<br />
Phép<br />
<br />
Relation r<br />
B<br />
<br />
C<br />
<br />
D<br />
<br />
1<br />
5<br />
<br />
7<br />
<br />
<br />
<br />
<br />
<br />
1<br />
<br />
7<br />
<br />
12 3<br />
23 10<br />
<br />
A<br />
<br />
B<br />
<br />
C<br />
<br />
D<br />
<br />
<br />
<br />
1<br />
<br />
7<br />
<br />
<br />
<br />
23 10<br />
18<br />
<br />
12 3<br />
23 10<br />
<br />
D<br />
<br />
<br />
<br />
7<br />
<br />
<br />
<br />
<br />
<br />
17<br />
17<br />
<br />
<br />
<br />
<br />
<br />
<br />
* Phép chọn và phép chiếu là phép toán một toán hạng<br />
<br />
<br />
<br />
C<br />
<br />
<br />
<br />
r(A=B)<br />
<br />
B<br />
<br />
<br />
<br />
A<br />
<br />
A<br />
<br />
r(A=B ^ D>5)<br />
<br />
Phép chiếu (Projection) – ví dụ 1<br />
Phé chiế<br />
<br />
Phép chiếu (Projection)<br />
Phé chiế<br />
<br />
Relation<br />
<br />
Cho<br />
<br />
quan hệ r trên R(A1, A2,..,Am) và tập<br />
con các thuộc tính X={Aj1, Aj2, …, Ajn} với<br />
j1, j2,.., jn là các số nguyên phân biệt nằm<br />
trong khoảng từ 1 đến m<br />
Phép chiếu r trên tập thuộc tính X cho kết<br />
quả là 1 quan hệ<br />
r[X] = r.X = {t | u r sao cho t = u[X]}<br />
<br />
B<br />
<br />
r[A,C]<br />
<br />
C<br />
<br />
A<br />
<br />
C<br />
<br />
A C<br />
<br />
10 1<br />
<br />
<br />
<br />
1<br />
<br />
1<br />
<br />
20 1<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
1<br />
<br />
30 1<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
2<br />
<br />
40 2<br />
Phép<br />
<br />
A<br />
<br />
r<br />
<br />
<br />
<br />
2<br />
<br />
chiếu loại bỏ những bộ trùng nhau<br />
19<br />
19<br />
<br />
Phép hợp (union)<br />
Phé hợ<br />
<br />
<br />
20<br />
<br />
Phép hiệu (Set Difference)<br />
<br />
Phép hợp của 2 quan hệ r và s<br />
r + s = r s = { t | t r t s}<br />
trong đó: r và s là hai quan hệ khả hợp<br />
<br />
<br />
<br />
Phép hiệu của 2 quan hệ r và s<br />
<br />
r-s={t|tr ts}<br />
trong đó: r và s là hai quan hệ khả hợp<br />
<br />
r+s<br />
<br />
r-s<br />
<br />
21<br />
<br />
Phép giao (Intersection)<br />
<br />
<br />
22<br />
<br />
Bài tập<br />
<br />
Phép giao của 2 quan hệ r và s<br />
r * s = r s = {t | t r t s}<br />
<br />
Cho 2 quan hệ định nghĩa trên 2 lược đồ Quan hệ :<br />
Customer( Cuscode, cusName, cusPhone, City)<br />
Supplier ( SupCode, SupName, SupPhone, City)<br />
<br />
<br />
trong đó: r và s là hai quan hệ khả hợp<br />
<br />
r*s<br />
<br />
<br />
<br />
<br />
Hai quan hệ r và s là khả hợp ( union-compatible) khi :<br />
•Có cùng số thuộc tính<br />
•Các thuộc tính tương ứng có cùng miền giá trị<br />
<br />
23<br />
<br />
Hiển thị danh sách các thành phố có khách hàng và<br />
đồng thời có nhà cung cấp?<br />
Hiển thị danh sách các thành phố có khách hàng và<br />
không có nhà cung cấp?<br />
<br />
24<br />
<br />
Phép tích Descartes<br />
Phé tí<br />
<br />
Phép tích Descartes – ví dụ 1<br />
Phé tí<br />
<br />
Cho quan hệ r trên lược đồ R(A1, A2,..,Am)<br />
và s trên lược đồ S(B1,B2,…,Bn)<br />
Nếu R và S có các thuộc tính trùng tên, thì<br />
phải đổi tên.<br />
<br />
Relations r, s:<br />
MASV<br />
<br />
MAMH<br />
<br />
rxs<br />
<br />
DIEM<br />
<br />
MAMH<br />
<br />
TENMH<br />
<br />
99001<br />
<br />
CSDL<br />
<br />
5.0<br />
<br />
CSDL<br />
<br />
COSO DULIEU<br />
<br />
99002<br />
<br />
FOX<br />
<br />
2.0<br />
<br />
FOX<br />
<br />
FOXPRO<br />
<br />
99003<br />
<br />
MANG<br />
<br />
8.0<br />
<br />
Phép<br />
<br />
tích Descartes của r và s là 1 quan hệ<br />
trên lược đồ T(A1, A2,.., Am, B1, B2, ….,Bn)<br />
r x s ={ t | tr r và ts s<br />
với t[A1, A2,.., Am] = tr<br />
và t[B1, B2, ….,Bn] = ts }<br />
<br />
MASV<br />
<br />
MAMH<br />
<br />
DIEM<br />
<br />
MAMH<br />
<br />
TENMH<br />
<br />
99001<br />
<br />
COSO DULIEU<br />
<br />
CSDL<br />
<br />
5.0<br />
<br />
FOX<br />
<br />
FOXPRO<br />
<br />
FOX<br />
<br />
2.0<br />
<br />
CSDL<br />
<br />
COSO DULIEU<br />
<br />
99002<br />
<br />
FOX<br />
<br />
2.0<br />
<br />
FOX<br />
<br />
FOXPRO<br />
<br />
99003<br />
<br />
<br />
<br />
CSDL<br />
<br />
99002<br />
<br />
Phép tích Descartes<br />
Phé tí<br />
<br />
5.0<br />
<br />
99001<br />
<br />
MANG<br />
<br />
8.0<br />
<br />
CSDL<br />
<br />
COSO DULIEU<br />
<br />
99003<br />
<br />
25<br />
25<br />
<br />
CSDL<br />
<br />
MANG<br />
<br />
8.0<br />
<br />
FOX<br />
<br />
FOXPRO<br />
<br />
26<br />
<br />
Phép kết (join)<br />
<br />
ứng dụng :<br />
phép<br />
<br />
tích Descartes là một phép tính vô nghĩa<br />
nếu đứng riêng. Tuy nhiên, nếu kết hợp sau phép<br />
toán này một phép chọn phù hợp , kết quả sẽ có<br />
nghĩa : kết hợp các bộ có liên quan từ hai quan<br />
hệ.<br />
<br />
<br />
<br />
thay thế phép (r x s) (F)<br />
với F là biểu thức điều kiện có dạng r.A s.B<br />
<br />
<br />
<br />
Bao gồm :<br />
<br />
<br />
: Hiển thị bảng điểm của các sinh viên. Bao<br />
gồm MaSV, MaMH, Diem, TenMH<br />
=> Viết biểu thức đại số quan hệ ?<br />
<br />
Vd<br />
<br />
<br />
<br />
<br />
(r x s) ( r.MaMH = s.MaMH)<br />
<br />
<br />
<br />
Theta join (-join)<br />
join<br />
Equijoin<br />
Natural join<br />
Outer join<br />
<br />
27<br />
<br />
28<br />
<br />
27<br />
<br />
Phép kết - Theta join<br />
<br />
Phép kết - Theta join<br />
r và s là hai quan hệ tương ứng trên các<br />
lược đồ R(A1, A2,..,Am) và S(B1,B2,…,Bn)<br />
Gọi Q(A1, A2,.., Am, B1, B2, ….,Bn)<br />
là 1 phép so sánh<br />
Ai R và Bj S là 2 thuộc tính có thể so sánh<br />
với nhau bởi phép <br />
Phép kết của r và s trên 2 thuộc tính Ai và Bj<br />
s<br />
ký hiệu , r Ai Bj cho kết quả là 1 quan hệ q trên<br />
lược đồ quan hệ Q, bao gồm các bộ t<br />
q(Q) = {t | tr r và ts s với t[R] = tr<br />
và t[S] = ts và t[Ai] t[Bj] }<br />
Cho<br />
<br />
29<br />
29<br />
<br />
dụ : Hiển thị ứng với mã mỗi môn học và<br />
các môn học tiếp sau nó ?<br />
MONHOC ( MaMon, TenMon, SoTC, Hocky)<br />
Ví<br />
<br />
MaMon<br />
A<br />
B<br />
<br />
TenMon SoTC<br />
Aaaa<br />
3<br />
Bbbb<br />
4<br />
<br />
Hocky<br />
1<br />
1<br />
<br />
C<br />
D<br />
<br />
Cccc<br />
Dddd<br />
<br />
2<br />
3<br />
<br />
3<br />
2<br />
<br />
Chú ý : Sử dụng phép gán để tạo ra một biến quan hệ tạm:<br />
s r [MaMon, Hocky] , với r MONHOC<br />
<br />
30<br />
30<br />
<br />