Các yếu tố của ràng buộc toàn vẹ n:

Một phần của tài liệu bài giảng cơ sở dữ liệu (Trang 81 - 117)

• Điều kiện.

Ng−ời ta biểu diễn điều kiện của ràng buộc toàn vẹn

R1 :"Mỗi sv có 1 mã số riêng , không trùng với 1 sv nào khác". ∀sv ∈ Tsinhvien , ∀sv2 ∈ Tsinhvien

sv1 < > sv2 -> sv1. MASV < > sv2. MASV Cuối ∀

R2 :"Mỗi sv phải đăng ký vào 1 khoa của tr−ờng". πMAKHOA (sinhvien ) ⊆ πMAKHOA(khoa)

R3 : "Mỗi sv chỉ có thể thi tối đa 2 lần cho mỗi môn học". ∀sv ∈ Tsinhvien

Card (σMASV = SV.MASV ∧ MAMH=’X’ (KETQUA)) ≤ 2. Cuối ∀

Bối cảnh của 1 ràng buộc trọn vẹn R là những quan hệ mà ràng buộc đó có hiệu lực.

Ví dụ: Bối cảnh ràng buộc R1 chỉ là 1 quan hệ Tsinhvien.

Bối cảnh ràng buộc R2 chỉ là 2 quan hệ Tsinhvien và Tkhoa.

• Bảng tầm ảnh h−ởng

Nhằm xác định thời điểm cần kiểm tra các ràng buộc trọn vẹn đó đ/v ba thao tác thêm , sửa , xoá.

Quy −ớc : Dấu + cần kiểm tra ràng buộc toàn vẹn R.

Dấu - không cần kiểm tra ràng buộc toàn vẹn R.

Ví dụ: Các bảng tầm ảnh h−ởng t−ơng ứng với các ràng buộc toàn vẹn trên.

R1 Thêm Xoá Sửa

Tsinhvien + - *

Dấu (*) Quy −ớc không đ−ợc sửa mã khoa.

R2 Thêm Xoá Sửa

Tkhoa - + *

Tsinhvien + - +

R3 Thêm Xoá Sửa

Tketqua + - *

(*) Quy −ớc không đ−ợc sửa MASV, MAMH.

Ràng buộc Tsinhvien Tkhoa Tketqua toàn vẹn T S X T S X T S X

R1 + * -

R2 + + - - * +

R3 + * -

• Các hành động cần chọn lựa khi ràng buộc toàn vẹn bị vi phạm: Ngăn cản và thông báo lý do không cho phép hành động đ−ợc thực thi.

Cảnh báo hậu quả gây ra nếu cố tình thực hiện hành động đó. Ví dụ: Khi xoá bỏ một bộ trong quan hệ KHOA thì các hậu quả có thể xảy ra trong quan hệ SINHVIEN đối với ràng buộc toàn vẹn R2 là:

-Xoá toàn bộ các sinh viện có mã khoá đó. (adsbygoogle = window.adsbygoogle || []).push({});

-Thuộc tính khoá trong các bộ sinh viên có mã khoá đó trở thành NULL tức sinh viên ch−a thuộc khoa nào cả.

6.1.3 Phân loại ràng buộc toàn vẹn :

6.1.3.1 Ràng buộc toàn vẹn có bối cảnh là 1 quan hệ.

• Ràng buộc về miền giá trị :

Ví dụ: Trong l−ợc đồ quan hệ Ketqua, ta có MGT (DIEM) = [0, 10] Điểm có độ chính xác = 0.25

∀ kq ∈ Tketqua

(kq DIEM *4) mod 2 = 1 Cuối ∀

NHANVIEN(MANV, MUCLUONG, NG_XEP_LG)

Gọi f là phép sửa đổi l−ơng (ngày xếp l−ơng và mức l−ơng). f : Tnhanvien -> Tnhanvien.

Ta có :

∀nv ∈ Tnhanvien

nv. NGXEP_LG < f (nv). NG_XEP_LG. Cuối ∀

Ràng buộc toàn vẹn liên thuộc tính là mối liên hệ giữa các thuộc tính trong 1 quan hệ.

Ví dụ : Hoa_don (SOHD, NGAYHD, SODH, TRIGIA_HD, NGAYXUAT)

Ràng buộc "Hàng hoá chỉ đ−ợc xuất kho khi đã lập hoá đơn" ∀hd ∈ T hoadon

hd.NGAYHD <= hd.NGAYXUAT. Cuối ∀

Ví dụ: Ctiet_hd (SOHD, MAHH, GIABAN, SL_BAN, THANHTIEN) Ràng buộc THANHTIEN = SLBAN*GIABAN

∀cthd ∈ Tctiet_hd

cthd.THANHTIEN = cthd.SLBAN * cthd.GIABAN cuối ∀

• Ràng buộc toàn vẹn liên bộ

Là sự ràng buộc giữa các bộ trong quan hệ nó th−ờng đ−ợc biểu diễn bằng phụ thuộc hàm, đặc biệt là ràng buộc toàn vẹn về khoá nội.

Ví dụ: Ràng buộc toàn vẹn về khoá chính trong quan hệ Sinhvien card (πmasv(Sinhvien)) = card (Sinhvien)

Ví dụ: Ràng buộc toàn vẹn trên quan hệ MUONSACH của một độc giả là không đ−ợc m−ợn quá 5 quyển sách

MUONSACH(Madg,Masach,ngmuon,ngtra)

∀m ∈T Muonsach

card(σmadg=m.madg(Muonsach))<= 5 Cuối ∀

6.1.3.2 Ràng buộc có bối cảnh gồm nhiều quan hệ

• Ràng buộc toàn vẹn về phụ thuộc tồn tại.

Ràng buộc toàn vẹn về phụ thuộc tồn tại còn đ−ợc gọi là ràng buộc về khoá ngoại

Ví dụ: Tketqua , sự tồn tại của 1 bộ. (adsbygoogle = window.adsbygoogle || []).push({});

Hoàn toàn phụ thuộc vào sự tổn hại của 1 bộ sv ∈ Tsinhvien sao cho sv.MASV = kq.Masv = masv1 , nếu không tồn tại bộ sv nh− thế thì bộ kq không đ−ợc phép tồn tại trong Tketqua.

Ví dụ: Trong quan hệ Tsinhvien, sự tồn tại của bộ sv =(' 91023',..., C'NTT',...) ∈ Tsinhvien hoàn toàn phụ thuộc vào sự tồn tại bộ k ∈ Tkhoa sao cho K.MAKHOA = ‘CNTT.’

Tổng quát :

Giả sử có 2 l−ợc đồ quan hệ Q và R. Hai tập hợp KQ , KR lần l−ợt là các khoá của Q và R . Ta có 2 dấu hiệu của phụ thuộc tồn tại nh− sau :

Nếu KQ ⊆ KR thì có 1 phụ thuộc tồn tại của R vào Q ký hiệu : R[KQ]⊆ Q[KQ]

Nếu KQ ⊆ R+ thì có 1 phụ thuộc tồn tại của R vào Q ký hiệu : R[KQ] ⊆ Q[KQ].

Tập hợp KQ gọi là khoá ngoại của R.

• Ràng buộc toàn vẹn liên bộ liên quan hệ

Ràng buộc toàn vẹn liên bộ liên quan hệ có tác dụng đối với từng nhóm các bộ của nhiều quan hệ khác nhau mà thông th−ờng là 2 quan hệ.

Ví dụ: Xét 2 l−ợc đồ quan hệ sau:

DOCGIA(madg,tendg,diachi,sosachmuon,ngaydk) MUONSACH(madg,mash,ngmuon,ngtra)

Ta có ràng buộc số sách m−ợn của một độc giả phải bằng số bộ trong MUONSACH có cùng mã độc giả đó mà ngày trả là NULL

∀d ∈ Tdocgia

d.sosachmuon = card(σmadg=d.madg(MUONSACH)) cuối ∀

• Ràng buộc toàn vẹn liên thuộc tính liên quan hệ

Ràng buộc toàn vẹn liên thuộc tính liên quan hệ là ràng buộc toàn vẹn giữa các thuộc tính trong nhiều quan hệ.

Ví dụ: Ta xét ràng buộc toàn vẹn ngày m−ợn sách phải lớn hơn hoặc bằng ngày đăng ký.

∀d ∈ Tdocgia

∀m ∈ Tmuonsach : d.madg =m.madg thì d.ngaydk<=m.ngmuon

cuối ∀m Cuối ∀d

• Ràng buộc toàn vẹn về thuộc tính tổng hợp (thống kê)

Ràng buộc toàn vẹn về thuộc tính tổng hợp đ−ợc xác định trong tr−ờng hợp một thuộc tính A trong l−ợc đồ quan hệ Q đ−ợc tính toán giá trị từ các thuộc tính của các l−ợc đồ quan hệ khác.

6.1.4 Lệnh SQL đối với ràng buộc toàn vẹn

Trong lệnh CREATE TABLE ta có thể tạo ra các ràng buộc toàn vẹn (xem ch−ơng 3)

Ngoài ra ta có thể tạo ra các ràng buộc toàn vẹn bằng lệnh CREATE ASSERTION

Cú pháp:

CREATE ASSERTION <tên ràng buộc toàn vẹn > CHECK ( <điều kiện >) CREATE ASSERTION <tên ràng buộc toàn vẹn > CHECK ( <điều kiện >) CREATE ASSERTION <tên ràng buộc toàn vẹn > CHECK ( <điều kiện >) CREATE ASSERTION <tên ràng buộc toàn vẹn > CHECK ( <điều kiện >)

Ví dụ : Xét 2 l−ợc đồ quan hệ sau:

DOCGIA(madg,tendg,diachi,sosachmuon,ngaydk)

Ràng buộc toàn vẹn số sạch m−ợn ch−a trả là không quá 5 CREATE ASSERTION rb_so_sach_muon CHECK (adsbygoogle = window.adsbygoogle || []).push({});

(NOT EXISTS (SELECT * FROM DOCGIA

WHERE SOSACHMUON > 5)

)

Ta có thể bỏ một ràng buộc toàn vẹn bằng lệnh DROP ASSERTION Cú pháp: DROP ASSERTION < tên ràng buộc toàn vẹn>DROP ASSERTION < tên ràng buộc toàn vẹn>DROP ASSERTION < tên ràng buộc toàn vẹn>DROP ASSERTION < tên ràng buộc toàn vẹn>

Ví dụ: Bỏ ràng buộc toàn vẹn rb_so_sach_muon DROP ASSERTION rb_so_sach_muon

• Các hành động tham khảo khi ràng buộc toàn vẹn về khoá ngoại bị vi phạm.

Giả sử có hai quan hệ T1 và T2, trong đó T2 chứa khoá ngoại là khoá chỉ định trong T1

Tr−ờng hợp xoá dữ liệu

Mệnh đề ON DELETE định nghĩa luật xoá cho bảng “cha” T1 nếu cố gắng xoá một bộ trong T1 mà có một số bộ trong T2 chứa khoá ngoại này. Các hành động có thể chọn lựa là:

1. NO ACTION: bỏ qua hoàn toàn mệnh đề ON DELETE 2. CASCADE: Việc xoá một bộ trong T1 sẽ xoá tất cả các bộ trong T2 có khoá ngoại t−ơng ứng.

3. SET DEFAULT: Việc xoá một bộ trong T1 sẽ cài đặt lại một giá trị mặc nhiên trong khoá ngoại t−ơng ứng các bộ trongT2. Trong tr−ờng hợp này trong T1 phải chứa một dòng mà khoá chỉ định của nó chứa giá trị mặc nhiên.

4. SET NULL: khi một bộ trong T1 bị xoá thì khoá ngoại t−ơng ứng của các bộ trong T2 sẽ có giá trị NULL

Tr−ờng hợp cập nhật

Mệnh đề ON UPDATE định nghĩa luật cập nhật cho khoá chỉ định trong T1 t−ơng ứng với khoá ngoại này. Nó xác định điều gì sẽ xảy ra khi cập nhật lại khoá chỉ định này mà có một số bộ trong T2 có khoá ngoại t−ơng ứng. Các hành động có thể chọn lựa là:

1. NO ACTION : bỏ qua hành động cập nhật

2. CASCADE: Cập nhật lại khoá ngoại cho tất cả các bộ t−ơng ứng trong T2

3. SET DEFAULT: Việc cập nhật lại khoá chỉ định trong T1 sẽ cài đặt lại một giá trị mặc nhiện trong khoá ngoại t−ơng ứng các bộ trongT2. Trong tr−ờng hợp này trong T1 phải chứa một dòng mà khoá chỉ định của nó chứa giá trị mặc nhiên.

4. SET NULL: khi cập nhật lại khoá chỉ định trong T1 thì khoá ngoại t−ơng ứng của các bộ trong T2 sẽ có giá trị NULL.

6.2 Phân quyền truy xuất6.2 Phân quyền truy xuất 6.2 Phân quyền truy xuất 6.2 Phân quyền truy xuất 6.2 Phân quyền truy xuất

Việc phân quyền truy xuất là do ng−ời quản trị cơ sở dữ liệu quyết định. Nó bao gồm việc tạo ra quyền account cho một ng−ời sử dụng (user name và password) và các quyền truy xuất cho ng−ời đó:

- Quyền truy vấn trên một bảng.

-Quyền tạo một bảng mới , xoá bảng, thay đổi bảng.

-Quyền chèn, cập nhật và xoá.

Trong SQL phát biểu GRANT và REVOKE đ−ợc dùng để cấp quyền và t−ớc quyền truy xuất của một user.

Cú pháp:

GRANT <quyền> ON <đối t−ợng> TO <users> [WITH GRANT OPTION] GRANT <quyền> ON <đối t−ợng> TO <users> [WITH GRANT OPTION] GRANT <quyền> ON <đối t−ợng> TO <users> [WITH GRANT OPTION] GRANT <quyền> ON <đối t−ợng> TO <users> [WITH GRANT OPTION]

Đối t−ợng th−ờng là bảng.

Mệnh đề WITH GRANT OPTION để cho phép users có quyền cấp quyền truy xuất cho user khác.

REVOKE [GRANT OPTION FOR] <quyền> ON <đối t−ợng> FROM REVOKE [GRANT OPTION FOR] <quyền> ON <đối t−ợng> FROM REVOKE [GRANT OPTION FOR] <quyền> ON <đối t−ợng> FROM REVOKE [GRANT OPTION FOR] <quyền> ON <đối t−ợng> FROM <users>

<users> <users> (adsbygoogle = window.adsbygoogle || []).push({});

<users> { RESTRICT | CASCADE}{ RESTRICT | CASCADE}{ RESTRICT | CASCADE}{ RESTRICT | CASCADE}

Mệnh đề GRANT OPTION FOR chỉ t−ớc bỏ quyền cấp quyền truy xuất cho user khác.

Từ khoá CASCADE dùng để xoá quyền của user đó và các users khác mà user đó đã cấp quyền.

Từ khoá RESTRICT dùng để chỉ xoá quyền của user đó mà thôi. Ví dụ: User U1:

GRANT SELECT ON TABLE S TO U2 WITH GRANT OPTION User U2:

GRANT SELECT ON TABLE S TO U3 WITH GRANT OPTION User U3:

GRANT SELECT ON TABLE S TO U4 WITH GRANT OPTION User U1

REVOKE SELECT ON TABLE TO U2 CASCADE Lúc đó U2, U3, U4 sẽ bị mất quyền SELECT trên bảng S User U1

REVOKE SELECT ON TABLE TO U2 RESTRICT Lúc đó chỉ có U2 mất quyền SELECT

Ch−ơng 7 Phục hồi dữ liệu và tính nguyên tố Ch−ơng 7 Phục hồi dữ liệu và tính nguyên tốCh−ơng 7 Phục hồi dữ liệu và tính nguyên tố Ch−ơng 7 Phục hồi dữ liệu và tính nguyên tố

7.1 Phân loại hỏng hóc 7.1 Phân loại hỏng hóc 7.1 Phân loại hỏng hóc 7.1 Phân loại hỏng hóc

7.1.1 Các loại l−u trữ

Các loại l−u trữ truyền thống đ−ợc phân biệt bởi tốc độ, dung l−ợng và khả năng phục hồi hỏng hóc. Chúng đ−ợc phân loại nh− sau:

•L−u trữ biến động: _ L−u trữ vào bộ nhớ chính _ Khả năng truy xuất nhanh

_ Không thể cứu lại thông tin nếu hệ thống có sự cố

•L−u trữ bất biến:

_ L−u trữ trên đĩa hoặc băng từ

_ Đĩa có độ tin cậy hơn bộ nhớ chính nh−ng kém hơn băng từ. _ Thông tin vẫn tồn tại và có thể cứu đ−ợc khi hệ thống có sự cố.

_ Nó là đối t−ợng hỏng hóc gây nên sự mất mát thông tin _ Tốc độ truy xuất chậm hơn bộ nhớ chính.

•L−u trữ vững chắc:

_ Thông tin chứa trên kiểu l−u trữ ổn định không bao giờ (ổn định) bị mất.

_ Nhân bản (dữ liệu) thông tin vào nhiều đĩa l−u trữ.

7.1.2 Các kiểu hỏng hóc .

_ Lỗi luận lý : Giao tác không thể tiếp tục do 1 số điều kiện nh− dữ liệu nhập sai, dữ liệu không tìm thấy, tràn, giới hạn tài nguyên ...

_ Lỗi hệ thống : Hệ thống đi vào 1 trạng thái không mong muốn nh− deadlock (khoá chết). Kết quả là giao tác không thể tiếp tục. Tuy nhiên hệ thống có thể đ−ợc thực thi lại sau 1 thời gian.

_ Hệ thống hỏng : Mất thông tin trong bộ nhớ chính nh−ng trong đĩa còn nguyên.

_ Hỏng đĩa : Mất thông tin trên đĩa. 7.2 Sự phân cấp l−u trữ.

7.2 Sự phân cấp l−u trữ. 7.2 Sự phân cấp l−u trữ. 7.2 Sự phân cấp l−u trữ.

-Hệ CSDL th−ờng trú trên đĩa. CSDL đ−ợc phân chia vào các đơn vị l−u trữ kích th−ớc cố định đ−ợc gọi là blocks.

-Các thao tác (phép toán) xuất nhập đ−ợc thực hiện trên các đơn vị blocks. (adsbygoogle = window.adsbygoogle || []).push({});

-Các blocks th−ờng trú trên đĩa đ−ợc gọi là blocks vật lý trong khi các blocks th−ờng trú tạm trên bộ nhớ chính đ−ợc gọi là buffer blocks.

-Một block có thể chứa nhiều mẫu dữ liệu. Ta giả sử không có mẫu dữ liệu d−ợc l−u trữ trên 2 hay nhiều blocks.

-Sự di chuyển block giữa đĩa và bộ nhớ chính đ−ợc thực hiện qua 2 phép toán sau (hình 7.1):

Input (x) : chuyển block vật lý chứa mẫu dữ liệu X vào bộ nhớ chính. Output (x) : ng−ợc lại.

Hình 7.1Các phép toán l−u trữ khối

- Các giao tác t−ơng tác với hệ cơ sở dữ liệu bởi sự chuyển dữ liệu từ các biến ch−ơng trình vào cơ sở dữ liệu và ng−ợc lại. Sự chuyển dữ liệu này đ−ợc thực hiện bởi 2 phép toán sau :

• Read (X, xI) : gán giá trị của mẫu dữ liệu X vào biến cục bộ xi . Phép toán đ−ợc thực hiện nh− sau:

1/ If If If block chứa X không th−ờng trú trên bộ nhớ chính then input (x). If 2/ xi : = X từ buffer block

• Write (X, x): gán giá trị biến cục bộ x vào mẫu dữ liệu X trên A B A B Input A Input B Disk Main memory

1/ IfIfIf block chứa X không th−ờng trú trên bộ nhớ chính then input (x). If 2/ X : = xi trong buffer block.

- Cuối cùng buffer block cũng đ−ợc ghi vào đĩa vì cần không gian bộ nhớ hoặc do hệ thống cơ sở dữ liệu quyết định bằng thao tác output (x). - Khi 1 thao tác cần truy xuất mẫu dữ liệu X lần đầu tiên , nó phải thực hiện read (X, xi). ∀ cập nhật X đều đ−ợc thể hiện trên xi . Cuối cùng giao tác phải thực hiện write (X, xi) để phản ảnh sự thay đổi trong CSDL.

- Thao tác Output (x) không cần thực hiện ngay sau lệnh Write (X, xi), vì X vẫn còn đ−ợc truy xuất do đó thao tác Output đ−ợc thực hiện sau. Nếu hệ thống hỏng sau khi Write (X, xi) đ−ợc thực hiện nh−ng tr−ớc Output (X) thì giá trị mới của X không bao giờ đ−ợc ghi lên đĩa.

7.3 Mô hình giao tác. 7.3 Mô hình giao tác. 7.3 Mô hình giao tác. 7.3 Mô hình giao tác.

Một giao tác là 1 đơn vị ch−ơng trình mà truy xuất và có thể cập nhật lên các mẫu dữ liệu.

Mỗi mẫu dữ liệu đ−ợc đọc chính xác 1 lần bởi 1 giao tác và đ−ợc ghi 1 lần nếu nó cập nhật dữ liệu đó.

Các giao tác không đ−ợc vi phạm các ràng buộc toàn vẹn . Nếu cơ sở dữ liệu nhất quán khi giao tác bắt đầu thì cơ sở dữ liệu phải nhất quán sau khi giao tác kết thúc thành công. Tuy nhiên trong quá trình thực thi giao tác thì cho phép dữ liệu không nhất quán. Sự nhất quán tạm thời có thể dẫn đến khó khăn khi 1 hỏng hóc xảy ra.

7.3.1 Ví dụ

Một giao tác T chuyển $50 từ account A → account B. T : read (A, a1 ) a1 : = a1 - 50 write (A, a1 ) read (B, b1 ) b1 : = b1 + 50 write (B, b1 )

Ta có ràng buộc toàn vẹn : A + B = const Giả sử: _ Ban đầu A = $1000

_ Bộ nhớ chính chứa buffer block của A nh−ng không có B. _ Sự cố xảy ra sau khi output (A) đã thực hiện nh−ng output(B) ch−a thực hiện.

7.3.2 Tính đúng đắn và tính nguyên tố.

Tính đúng đắn : Mỗi 1 giao tác phải là 1 ch−ơng trình bảo vệ tính nhất quán dữ liệu.

Tính nguyên tố : ∀ phép toán trong 1 giao tác phải đ−ợc thực thi đầy đủ hoặc không có cái nào đ−ợc thực thi.

- Bảo đảm tính đúng đắn là nhiệm vụ của lập trình viên

- Bảo đảm tính nguyên tố là trách nhiệm của hệ thống quản trị cơ sở dữ liệu đặc biệt là thành phần quản lý giao tác.

Nếu không có sự cố thì tính nguyên tố đ−ợc thực hiện dễ dàng, nh−ng không phải giao tác nào cũng hoàn tất. Giao tác không hoàn tất đ−ợc gọi là giao

Một phần của tài liệu bài giảng cơ sở dữ liệu (Trang 81 - 117)