Tải bản đầy đủ - 0 (trang)
* Ưu và khuyết điểm của việc dùng bảng chỉ số:

* Ưu và khuyết điểm của việc dùng bảng chỉ số:

Tải bản đầy đủ - 0trang

Định nghĩa thuật toán băm (hashed algorithm):

Thuật toán băm là chương trình chuyển giá trị khố chính thành số

thứ tự tương đối của bản ghi, tức là địa chỉ tương đối trong tệp.

Vấn đề đầu tiên là chúng ta phải tính tốn hàm băm để chuyển đổi các khố của

bản ghi (các khố có thể là những số ngun hay các ký tự ngắn) thành các địa chỉ

tƣơng đối trong tệp. Đây là một tính tốn số học có các tính chất tƣơng tự nhƣ các bộ

phát sinh số ngẫu nhiên. Chúng ta cần một hàm chuyển đổi các khoá thành các số

nguyên trong khoảng [0..M-1] trong đó M là số mẫu tin có thể chứa vừa đủ trong số

lƣợng khơng gian nhớ có sẵn. Vậy nên phƣơng pháp này có đặc trƣng là phải biết tồn

bộ khơng gian nhớ trƣớc khi phân bố cho bất kỳ bản ghi nào.

Ví dụ:

Chúng ta dự định lƣu trữ 1000 bản ghi vào trong vùng nhớ có khả năng lƣu trữ

1400 bản ghi. Giả sử khố của các bản ghi có giá trị trong khoảng từ 0 đến 99999, và

không gian nhớ đƣợc đánh địa chỉ tƣơng đối từ 0 đến 1399. Hàm băm của chúng ta sử

dụng là:

địa chỉ = phần dư (giá trị khố / kích thước khơng gian nhớ)

123



5600



1523









92513



113



















2800



0



Hình 4: Phân bố địa chỉ các bản ghi vào trong không gian nhớ

dựa vào hàm băm đã cho.

Yêu cầu đặt ra đối với hàm phân bố địa chỉ (hàm băm) là không quá phức tạp,

nhƣng đảm bảo các bản ghi đƣợc phân bố rải khắp không gian nhớ. Một hàm băm lý

tƣởng làm một hàm mà dễ dàng tính và gần giống nhƣ một hàm “ngẫu nhiên”.

Do khả năng của hàm địa chỉ mà đôi khi hai hay nhiều bản ghi đƣợc phân bố

cùng một địa chỉ. Các bản ghi trùng địa chỉ đƣợc gọi là “bản ghi tràn”. Vấn đề tiếp theo

là chúng ta cần phải giải quyết tình trạng xung đột địa chỉ, có thể thực hiện theo các

phƣơng pháp sau:

a. Sử dụng vùng nhớ riêng cho các bản ghi tràn:

Khi lƣu trữ, nếu chúng ta truy cập đến một vị trí trong khơng gian nhớ mà ở

đó đã có bản ghi khác thì dùng con trỏ để đi sang vùng nhớ tràn cho các bản ghi, lƣu trữ

bản ghi này vào đó. Khi muốn tìm bản ghi tràn vừa mới đƣợc lƣu trữ, chúng ta cũng đi

theo con trỏ vật lý đó.

Ví dụ:

Cần lƣu trữ thơng tin của 3 ngƣời vào các ngăn chứa 15 bản ghi. Khoá

bản ghi là tuổi của những ngƣời này. Giả sử hàm băm có dạng:

địa chỉ = phần dƣ (tuổi / 15)



Lúc đó các bản ghi đƣợc lƣu trữ nhƣ hình sau:

Titi, 30, 11 Hàng Đồng



Khơng gian nhớ chính



Tutu, 32, 15 Hàng Quạt



0. Titi 1.

2. Tutu



Hàm băm



Không gian

nhớ bổ sung

0. Titi

1.

2. Toto



Toto, 47, 12 Hàng chuối



Hình 5: Sử dụng vùng nhớ tràn để xử lý các bản ghi

tràn trong tổ chức ngẫu nhiên dùng hàm băm

b. Lưu trữ các bản ghi tràn trên cùng không gian nhớ:

Khi xảy ra xung đột các bản ghi, ngƣời ta không trỏ tới vùng nhớ tràn riêng

mà tiếp tục dò tìm trong khơng gian nhớ để tìm một chỗ cho bản ghi tràn. Có thể tìm

xuống dƣới hay lên trên để tìm vị trí khác cho bản ghi tràn. Giữa bản ghi thứ nhất và

bản ghi sau có cùng địa chỉ đƣợc nối với nhau bằng con trỏ để truy cập dễ dàng.

Ví dụ:

Titi, 30, 11 Hàng Đồng

Tutu, 32, 15 Hàng Quạt

Toto, 47, 12 Hàng chuối



Không gian

nhớ chính

Hàm băm



0. Titi

1.

2. Tutu

3. Toto



Tata, 33, 12 Hàng mía



Hình 6: Lưu trữ trên không gian nhớ.

III. ĐIỀU KHIỂN TƢƠNG TRANH

1. Giao tác (transaction)

a. Định nghĩa:

Giao tác là đơn vị hoạt động cụ thể (tập các thao tác) cần đƣợc thực hiện trọn

vẹn hoặc khơng đƣợc thực hiện gì cả trong hệ thống tính tốn.

b. Ví dụ:

Giả thiết có hai tài khoản ngân hàng trong CSDL và ngƣời ta muốn chuyển

tiền từ tài khoản này sang tài khoản kia. Yêu cầu này có nghĩa giảm số dƣ của một tài

khoản với số lƣợng bằng lƣợng tăng số dƣ cho tài khoản thứ hai. Hai phép toán đƣợc

thực hiện tách rời. Trong CSDL trên SQL, câu lệnh nhƣ sau:

UPDATE tài khoản

SET số dƣ = số dƣ – 100

WHERE số tài khoản = 10002;

UPDATE tài khoản

SET số dƣ = số dƣ + 100

WHERE số tài khoản = 20002;

Hai đoạn lệnh thực hiện việc chuyển 100 từ tài khoản 10002 sang tài khoản

20002. Hai đoạn này thực hiện hai giao tác đơn.



c. Tính chất:

Giao tác phải đảm bảo 4 tính chất:

- Tính nguyên tố (atomicity): Giao tác phải đƣợc thực hiện hoàn toàn

hoặc khơng đƣợc thực hiện gì cả.

- Tính nhất qn (consistency): Giao tác phải đảm bảo tính nhất quán của

CSDL. Nếu CSDL đã nhất quán khi giao tác bắt đầu, nó vẫn phải nhất

quán sau khi giao tác chấm dứt.

- Tính riêng biệt (isolation): Mặc dù nhiều giao tác có thể đƣợc khai thác

cạnh tranh nhau nhƣng phải bảo đảm đối với mỗi cặp giao tác T i và Tj,

hoặc Tj kết thúc trƣớc khi Ti bắt đầu, hoặc Tj phải bắt đầu sau khi Ti đã

kết thúc. Phần này sẽ đƣợc bàn nhiều trong phần 2 (điều khiển tƣơng

tranh).

- Tính bền vững (durability): Kết quả của một giao tác đã hồn tất phải

ln đƣợc bảo lƣu, cho dù hệ thống có thể bị trục trặc nào đó.

d. Trạng thái của giao tác:

Giao tác có 3 trạng thái sau:

- Hồn tất (commit): Sau khi thực hiện giao tác xong, HQTCSDL kiểm

tra thấy thỏa các ràng buộc toàn vẹn và các ràng buộc khác, giao tác

đƣợc xác nhận là đúng. CSDL sẽ ở trạng thái mới, nhận những kết quả

do giao tác đem lại.

- Thối bộ (roll back/rollback): Các ràng buộc khơng thỏa, hoặc do

ngƣời sử dụng không muốn chấp nhận giao tác nên mặc dù giao tác đã

thực hiện, CSDL phải trở về trạng thái ban đầu.

- Thất bại (fail): Giao tác không thực hiện đƣợc trọn vẹn.

2. Điều khiển tƣơng tranh

- Vấn đề tƣơng tranh thƣờng xẩy ra trong hệ thống nhiều ngƣời dùng. Nhiều ngƣời cùng

truy cập đồng thời một số đối tƣợng nhƣ các dòng quan hệ, các bảng, các thuộc tính

hay khung nhìn,… Chúng ta cần điều khiển tƣơng tranh để các giao tác có thể thực hiện

một cách song hành nhằm tăng hiệu xuất sử dụng tài ngun máy tính, tăng hiệu xuất

của CSDL. Nếu khơng có điều khiển tƣơng tranh, việc truy cập đồng thời của nhiều

ngƣời dùng sẽ đe dọa tính tồn vẹn dữ liệu. Để minh họa ý này, dƣới đây chúng ta xem

xét một số nguy cơ khi khai thác các giao tác theo cách tƣơng tranh.

a. Mất dữ liệu:

Giả sử chúng ta có hai giao tác đƣợc đặt tên là TA và TB gồm các

lệnh: TA:

UPDATE tài khoản

SET số dƣ = số dƣ + 100

WHERE số tài khoản = 10002;

TB:

UPDATE tài khoản SET

số dƣ = số dƣ + 200

WHERE số tài khoản = 10002;

Thi hành đúng thì tài khoản 10002 sẽ tăng lên 300. Tuy nhiên khi hai giao tác

thực hiện đồng thời, có thể xảy ra sự cố. Xét thao tác cập nhật trong ngôn ngữ SQL

ngƣời ta thấy chúng gồm các phép toán sau:

1. Tới bản ghi cần thiết.

2. Thay đối giá trị trong bộ nhớ trong.

3. Ghi lại vào bản ghi ban đầu.

Cả hai giao tác trên đều truy cập bản ghi ứng với tài khoản 10002, cùng thay

đổi và cùng ghi lại vào bản ghi đó. Nhƣ vậy có thể xẩy ra các sự kiện theo thời gian

nhƣ sau:

1. TA đọc bản ghi tài khoản 10002, giá trị số dƣ trên đó là 150.

2. TB đọc bản ghi tài khoản 10002, có số dƣ là 150.

3. TA tăng số dƣ thành 250 = 150 + 100. Việc này thực hiện trong bộ nhớ trong với biến

trung gian ứng với số dƣ.



4. TB tăng số dƣ thành 350 = 150 + 200.



5. TA ghi giá trị trung gian vào CSDL, tức cập nhật bản ghi với số dƣ là

250.

6. TB ghi lại số dƣ là 350.

Thực tế số dƣ tài khoản phải là 450. Điều này có nghĩa cập nhật của TA đã bị

mất.

b. Không khẳng định sự phụ thuộc:

Khi việc cập nhật CSDL chƣa đƣợc khẳng định thì vấn đề đảm bảo sự phụ

thuộc vốn có giữa các dữ liệu có thể bị vi phạm. Giao tác khác có thể sử dụng

dữ liệu chƣa đƣợc khẳng định. Khi có sự cố, q trình khơi phục quay lui

bằng ROLLBACK (trạng thái thối bộ) đƣợc thực hiện thì khi giao tác làm

lại lần hai sẽ thao tác trên các thơng tin khơng đúng. Chẳng hạn có hai giao

tác TA, cập nhật dữ liệu và TB, xóa dữ liệu.

TA:

UPDATE tài

khoản SET số

dƣ = số dƣ –

100

WHERE số tài khoản = 10002;

IF số dƣ < 0 THEN rollback ELSE commit;

TB:

DELETE FROM

tài khoản

WHERE số dƣ <

0;

Giao tác thứ nhất TA khấu trừ số dƣ 100 và sẽ khôi phục nếu số dƣ

âm. Giao tác thứ hai TB, kiểm tra để xóa các tài khoản có số dƣ âm. Có thể

xảy ra quá trình sau:

1. TA đọc bản ghi tài khoản 10002, giá trị số dƣ trên đó là 50.

2. TA giảm số dƣ, thu đƣợc kết quả trong bộ nhớ trong là –50.

3. TA ghi vào CSDL, số dƣ là –50.

4. TB tìm thấy tài khoản 10002 có số dƣ âm.

5. TB xóa tài khoản 10002 theo điều kiện đã định.

6. TA khôi phục cập nhật, nhƣng tài khoản đã bị hủy.

Chúng ta gọi đây là hiện tƣợng không khẳng định phụ thuộc. Giao

tác TB đã truy cập dữ liệu mà dữ liệu này chƣa đƣợc khẳng định. Trƣờng

hợp này còn nguy hiểm hơn cả trƣờng hợp mất dữ liệu.

c. Phân tích khơng bền vững:

Tính khơng bền vững của dữ liệu thƣờng xẩy ra trong trƣờng hợp

truy cập tập các bản ghi mà một số bản ghi này đang đƣợc giao tác khác cập

nhật. Giả sử có hai giao tác TA và TB với các lệnh sau:

TA:

SELECT

sum(số dƣ)

FROM tài

khoản;

TB:

UPDATE tài

khoản SET

số dƣ = số

dƣ - 100

WHERE số tài

khoản = 10003;

UPDATE tài khoản

SET số dƣ = số dƣ

+ 100 WHERE số

tài khoản = 10001;



G

i

a

o

t

á

c

t

h



h

a

i

c

ó

n

h

i



m

c

h

u

y



n

t

i



n

t



t

à

i

k

h

o



n

1

0

0

0

3

s

a

n

g

t

à

i

k



hoản 10001, khơng tác động đển tổng dƣ các tài khoản mà giao tác thứ nhất

cần tính. Tuy vậy hai giao tác thực hiện đồng thời vẫn xảy ra vấn đề, chẳng

hạn ban đầu số dƣ của cả bốn tài khoản đều là 100:

1. TA tìm tài khoản 10001, số dƣ là 100. Tổng là 100.

2. TB tìm tài khoản 10003, số dƣ là 100.

3. TA tìm tài khoản 10002, số dƣ là 100. Tổng cộng dồn là 200.

4. TB cập nhật tài khoản 10003, gán số dƣ là 0.

5. TA tìm tài khoản 10003, do số dƣ 0 nên tổng dƣ cộng dồn vẫn là

200.

6. TB tìm tài khoản 10001, số dƣ là 100.

7. TA tìm tài khoản 10004, số dƣ 100. Tổng cộng dồn là 300.



-



-



1.

2.

3.

4.



7.

8.

9.



8. TB cập nhật tài khoản 10001, nâng số dƣ thành 200.

Đúng ra số dƣ phải 400 vì giao tác thứ hai khơng ảnh hƣởng đến tổng chung.

Do giao tác TB xen vào các phép toán của giao tác TA nên kết quả không theo ý muốn.

Chúng ta gọi hiện tƣợng này là phân tích khơng bền, tức thời điểm này phân tích thấy

400, thời điểm khác lại là 300.

Để tránh các hiện tƣợng nhƣ trên ngƣời ta dùng kỹ thuật khoá. Việc khoá qui định bất

kỳ dữ liệu nào đƣợc ngƣời dùng tìm kiếm để cập nhật cần đƣợc khố lại, hay từ chối

mọi truy cập của ngƣời dùng khác, cho đến khi việc cập nhật hoàn tất hay bị hủy bỏ.

Trong cùng một thời điểm, nếu hai giao tác cùng truy cập một đối tƣợng thì một trong

hai giao tác phải đợi giao tác kia giải phóng khố. Theo giao thức này, sẽ hình thành

một hàng đợi các giao tác có cùng yêu cầu.

Tuy nhiên không phải lúc nào cũng cần khoá, khi cả hai giao tác chỉ cần đọc dữ liệu.

Thực chất việc khố chỉ thích hợp cho nhu cầu cập nhật dữ liệu. Vì vậy ngƣời ta tạo ra

hai loại khoá: khoá S (shared) dùng cho các giao tác có nhu cầu đọc dữ liệu; khố X

(exclusive) dùng cho các giao tác có nhu cầu cập nhật dữ liệu. Ngƣời ta có giao thức

khố sau:

+ Khi một đối tƣợng có khố S, các u cầu khố S khác có thể truy cập đối

tƣợng này. Giao tác cần đối tƣợng này theo khoá X cần đợi tất cả các khoá S giải phóng

đối tƣợng này.

+ Khi đối tƣợng có khố X, ngƣời ta khơng tiến hành khố nào khác trên đối

tƣợng này. Tất cả các giao tác yêu cầu khoá, cả X lần S đều phải đợi cho đến khi khố

X đƣợc giải phóng.

Tuy nhiên, hệ thống cần lƣu ý thời gian các khố đƣợc giải phóng. Chẳng hạn có hai

giao tác TA và TB:

1. TA khoá S đối tƣợng 1, khoá S đối tƣợng 2, rồi khoá X đối tƣợng 1.

2. TB khoá S đối tƣợng 1, khoá X đối tƣợng 1, rồi khoá S đối tƣợng 2.

Giả sử chúng ta cho giải phóng đối tƣợng ngay sau khi đã kết thúc cơng việc

liên quan đến nó và giao tác TA u cầu khố trƣớc, có thể xảy ra các dãy sự kiện sau

nếu hai giao tác thực hiện đồng thời:

TA khoá S đối tƣợng 1.

TB khoá S đối tƣợng 1.

TA giải phóng khố S trên đối tƣợng 1. Nó khố S đối tƣợng 2.

TB giải phóng khố S trên đối tƣợng 1.

5.TB khoá X đối tƣợng 1. Việc này đƣợc phép do TA và TB đã giải phóng đối

tƣợng 1.

6. TA giải phóng khố S trên đối tƣợng 2. TA ở trạng thái đợi khoá X đối

tƣợng 1.

TB giải phóng khố X trên đối tƣợng 1. Đặt khố S lên đối tƣợng 2.

TA khoá X đối tƣợng 1.

TB giải phóng khố S trên đối tƣợng 2.

10. TA giải phóng khố X trên đối tƣợng 1.

Nhƣ vậy TB đã cập nhật đối tƣợng 1 trƣớc TA. Điều này trái với giả thuyết TA

là giao tác trƣớc về logic phải đƣợc thực hiện trƣớc. Để đảm bảo đƣợc lịch tuần tự

ngƣời ta dùng giao thức khoá hai pha. Giao thức này qui định một giao tác khơng đƣợc

khố một đối tƣợng khi nó đã giải phóng đối tƣợng này.

Định nghĩa Giao thức khóa hai pha:

Giao thức khố hai pha là thủ tục yêu cầu khoá các giao tác cần

khoá trước khi mở khố bất kỳ giao tác nào.



CHƢƠNG III:



MƠ HÌNH QUAN HỆ

I. KHÁI NIỆM CƠ BẢN

1. Bảng quan hệ

- Bảng quan hệ là hình ảnh trực quan của quan hệ. Nó gồm các dòng và các cột: các cột

ứng với các thuộc tính, các dòng ứng với các bộ; dùng để lƣu trữ thơng tin của quan hệ.

- Ví dụ:

CANHAN



canhanID



Họ tên

số CMTND

17

Nguyến Thị Đào

123456789

63

Vũ Thị Mơ

143453456

44

Đài Thi Mận

146453546

32

Đào Văn Quít

323343346

71

Nguyễn Văn Cam

123464545

12

Trần Văn Bƣởi

132254644

81

Vũ Thị Xồi

124234554

- Khơng đƣợc có hai dòng giống nhau trên cùng một bảng.

2. Bộ

Là một dòng của bảng quan hệ. Nó gồm tập tất cả các thuộc tính trong bảng quan

hệ. Ví dụ:

(17, Nguyến Thị Đào, 123456789) là một bộ của quan hệ CANHAN.

3. Sơ đồ quan hệ

Tập hợp gồm tên các thuộc tính

R(A1, A2,…, An)

đƣợc gọi là sơ đồ quan hệ hay lƣợc đồ quan hệ.

Ví dụ:

CANHAN(canhanID,Hoten,soCMTND) là sơ đồ quan hệ của Nhân Viên.

4. Miền giá trị và thuộc tính

Miền là phạm vi giá trị có thể dùng cho một thuộc tính. Nó phải nhận giá trị đơn.

Miền tƣơng tự về mặt khái niệm với kiểu dữ liệu trong lập trình. Cũng nhƣ kiểu dữ

liệu, miền không chỉ xác định tập các giá trị gán cho thuộc tính, mà còn xác định các

thao tác đƣợc phép sử dụng trên các dữ liệu. Chẳng hạn đối với dữ liệu số chúng ta mới

có thể áp dụng các phép toán số học, cộng, trừ, nhân, chia,… Nếu nhìn khía cạnh khác,

miền còn có ý nghĩa ngữ nghĩa. Chẳng hạn cân nặng và chiều cao của một ngƣời đều

nhận giá trị số, nhƣng hai số này không thể so sánh với nhau đƣợc.

Khi xác định một thuộc tính ngƣời ta cần tính đến tên và miền của thuộc tính. Các

giá trị gán cho thuộc tính cần thỏa mãn các ràng buộc về miền. Chẳng hạn tuổi của một

ngƣời đƣợc thể hiện bằng số, và nhận giá trị từ 1 đến 300.

Giả sử Di là miền giá trị của thuộc tính Ai, ta viết:

Di = dom(Ai)

i = 1..n

Các Di (i=1..n) khơng nhất thiết phải khác nhau, có nghĩa là các thuộc tính khác

nhau có thể lấy trị trên cùng một miền giá trị. Miền giá trị không đƣợc chứa giá trị rỗng.

5. Giá trị rỗng

Giá trị rỗng là giá trị có thể gán cho một thuộc tính khi không dùng giá trị khác

đƣợc, hay khi ngƣời ta chƣa biết giá trị cần gán.

NULL là giá trị đặc biệt, với nghĩa “không giống bất kỳ giá trị nào”, thậm chí

khơng giống cả giá trị rỗng khác. Hai nhân viên tại đơn vị có giá trị rỗng có thể khơng

cùng đơn vị.



6. Khố của quan hệ

a. Khố (khố chính – primary key)

Khoá của quan hệ là một tập nhỏ nhất các thuộc tính mà các giá trị của các

thuộc tính này dùng để phân biệt các bộ với nhau.

b. Siêu khố

Là một tập thuộc tính có chứa khố. Nhƣ vậy, khố là một trƣờng hợp có chứa

khóa. c. Khố ngoại

Là một tập thuộc tính khơng phải là khố (primary key) của quan hệ R, nhƣng

là khoá của quan hệ S khác (R≠S). Lúc này quan hệ S gọi là quan hệ cha, R gọi là quan

hệ con.

II. RÀNG BUỘC TOÀN VẸN TRÊN CSDL QUAN HỆ

1. Khái niệm chung

Ràng buộc toàn vẹn trên CSDL quan hệ giúp cho ứng dụng trở nên thực tế hơn,

hợp lý hơn và nhất quán hơn. Chẳng hạn ngày sinh không thể lớn hơn ngày tháng hiện

tại, điểm không thể vƣợt quá 10. Các ràng buộc này kiểm tra một bộ trƣớc khi thuộc về

một quan hệ, kiểm tra các thao tác cập nhật trên quan hệ.

2. Ràng buộc trên một quan hệ

a. Ràng buộc về miền giá trị

Đây là loại ràng buộc xác định các giá trị dữ liệu nhập vào có hợp với kiểu dữ

liệu và phạm vi giá trị của thuộc tính qui định hay khơng.

Ví dụ: Cho sơ đồ quan hệ: THUADAT(dientich,

diachi)

RB: dientich = 0

b. Ràng buộc về thuộc tính

Ràng buộc về thuộc tính là ràng buộc về dữ liệu giữa các thuộc tính với nhau

trong một quan hệ.

Ví dụ: Cho sơ đồ quan hệ:

GIAYCHUNGNHAN(SoGCN, ngayNOP, coquanduyet, ngayQUYETDINH)

RB: ngayNOP <= ngayQUYETDINH

c. Ràng buộc liên bộ

Ràng buộc liên bộ là ràng buộc về dữ liệu giữa các dòng (bản tin) trên một

quan

Ví dụ: Cho sơ đồ quan hệ:

hệ.

RUTTIEN(SoRT, ngayR, Sotien, TK)

RB: Một ngày không đƣợc rút quá một lần cho một tài khoản.

d. Ràng buộc về khố

Khố chính khơng đƣợc mang trị rỗng (NULL), do đó một bộ có khố mang trị

rỗng sẽ không đƣợc thêm vào quan hệ.

3. Ràng buộc trên nhiều quan hệ

a. Ràng buộc tham chiếu (Ràng buộc về khoá ngoại)

- Ràng buộc tham chiếu là qui định cho biết hoặc là giá trị của khoá ngoại cần

khớp với một trong những giá trị khố chính của quan hệ cha, hoặc là giá trị khố ngoại

là rỗng.

Ví dụ: Cho hai quan hệ:

THUADAT

thuadatID

Diện thích

MDSD

34

124,7

ONT

54

344.5

NNP

24

56

LUA



MDSD





tenMDSD

hiệu

ONT

Đất ở nơng thơn

NNP

Đất nơng nghiệp

LUA

đất trồng lúa

Theo hai bảng quan hệ trên thì thuadatID là khố ngoại của bảng THUADAT

và là khố chính của bảng MDSD. Giả sử chúng ta thêm bộ (13, 243, LUC) vào bảng

THUADAT thì sẽ vi phạm ràng buộc tồn vẹn tham chiếu vì trong bảng MDSD khơng

có đơn vị với mã số LUC. Nếu chúng ta thêm bộ (LUC, Đất trồng lúa nước) vào bảng

MDSD trƣớc việc thêm bộ (13, 243, LUC) vào bảng THUADAT thì việc này khơng

xâm phạm ràng buộc tồn vẹn.

- Tính tồn vẹn tham chiếu liên quan đến vấn đề đặc biệt về sự nhất quán, đảm bảo tính

tồn vẹn khi cập nhật thơng tin, tức thêm, xố hay sửa các dòng của bảng quan hệ.

Chẳng hạn khi chúng ta sửa mã đơn vị trong bảng đơn vị thì khơng thể khơng cập nhật

giá trị này trong bảng nhân viên. Do vậy khi cập nhật thông tin, chúng ta thực hiện theo

ba chiến lƣợc sau:

* Hạn chế (Restriction):

Với chiến lƣợc hạn chế, ngƣời ta cấm bất kỳ thay đổi nào đối với khố

chính nếu có khố ngoại tham chiếu đến nó. Do vậy u cầu xố mã số NC hay thay NC

bằng một mã khác là không đƣợc phép.

* Thông tầng (Cascade):

Theo nguyên tắc thông tầng, khi cần cập nhật tại một dòng của bảng quan

hệ cha, chúng ta cần lần lƣợt thực hiện cùng phép cập nhật ấy tại các dòng của các bảng

con liên quan. Chẳng hạn thay đối dòng có mã đơn vị là NC thì khơng những thay đổi

tại bảng DONVI mà còn thay đổi tại bảng NHANVIEN.

* Thiết lặp giá trị rỗng:

Theo nguyên tắc thiết lặp giá trị rỗng, khi cập nhật một dòng của bảng

quan hệ cha, chúng ta cần gán giá trị NULL cho tất cả các khoá ngoại của các bảng liên

quan.

Chú ý: Khi có sự thay đổi các giá trị trong một bảng gây ảnh hƣởng đến khoá

ngoại của bảng khác thì hệ thống cần đề xuất các lựa chọn để ngƣời dùng quyết định

cập nhật khoá ngoại hay chuyển về giá trị rỗng. Tác động ảnh hƣởng này đƣợc nhìn

theo một chiều; chỉ các khố ngoại của bảng NHANVIEN thay đổi theo các khố chính

của bảng DONVI. Tuy nhiên chúng ta có thể đề cập các trƣờng hợp mà việc thay đổi

của khoá ngoại gây ảnh hƣởng đến bảng dữ liệu kia (bảng quan hệ cha). Ngoài ra, việc

xố các dòng trong bảng NHANVIEN có gây ảnh hƣởng ngƣợc đến bảng DONVI

khơng?

Nhìn chung tính tồn vẹn tham chiếu yêu cầu các khoá ngoại cần cập

nhật theo các phép tốn thực hiện trên khố chính của bảng liên quan. Nếu khơng đảm

bảo đƣợc việc cập nhật hợp lý thì cần gán giá trị rỗng cho khố ngồi.

b. Ràng buộc liên thuộc tính - liên quan hệ

Ràng buộc liên thuộc tính – liên quan hệ là ràng buộc về dữ liệu giữa các thuộc

tính trên nhiều quan hệ khác nhau.

Ví dụ: Cho hai sơ đồ quan hệ:

ĐH(SoĐH, ngayĐ, hang, SLĐ)

GH(SoGH, ngayG, SoĐH, SLG)

RB: ngayĐ <= ngayG

c. Ràng buộc liên bộ - liên quan hệ

Ràng buộc liên bộ – liên quan hệ là ràng buộc về dữ liệu giữa các dòng (bộ)

trên nhiều quan hệ khác nhau.



Ví dụ: Cho hai sơ đồ quan hệ:

SV(maSV, htenSV, NS, maL)

LOP(maL, tenL)

RB: Một lớp phải có ít nhất 10 sinh viên

d. Ràng buộc thuộc tính tổng hợp

Ràng buộc này đƣợc xác định trong trƣờng hợp một thuộc tính A của quan hệ

R đƣợc tính tốn từ các thuộc tính của các quan hệ khác.

Ví dụ 1: Cho hai sơ đồ quan hệ:

ĐH(SoĐH, ngayĐ, SLĐ, SLcon)

GH(SoGH, ngayG, SoĐH, SLG)

RB: Slcon = SLĐ - tổng SLG.

Ví dụ 2: Với hai sơ đồ:

HĐ(SoHĐ, ngayHĐ, ngayxuat, tongTG)

CTHĐ(SoCT, ngay, SoHĐ, SL, ĐG)

RB: Tổng trị giá của một hoá đơn = tổng (SL x ĐG).

e. Ràng buộc do chu trình

Một CSDL có thể đƣợc biểu diễn bằng một đồ thị vơ hƣớng. Trong đồ thị này,

ta có 2 loại nút: nút thuộc tính và nút quan hệ. Một cung vơ hƣớng trong đồ thị nối một

nút thuộc tính A với một nút quan hệ R khi A thuộc R.

Ví dụ: Đồ thị biễu diễn 4 sơ đồ quan hệ sau:

ĐEAN(soĐA, tenĐA, phongPT)

NV(maNV, tenNV, maP)

PCONG(maNV, soĐA)

PHONG(maP, tenP)

soĐA

PCONG

(a)

ĐEAN



maNV



(b)

phongPT



NV

maP



PHONG

Trong hình vẽ trên, chúng ta nhận thấy đồ thị có chứa một chu trình. Nhƣ

vậy, CSDL sẽ phải có một ràng buộc tồn vẹn thuộc 1 trong 3 trƣờng hợp sau:

*a≠b

VD: Nhân viên có thể đƣợc phân cơng đề án khơng thuộc phòng

nào phụ trách.

*a≡b

VD: Nhân viên thuộc phòng nào thì phải tham gia tất cả các đồ án

do phòng phụ trách.

a ≡ PCONG[soĐA, maNV]

b ≡ (NV ⋈ ĐEAN)[soĐA, maNV]

⇒ Dẫn đến trùng lắp thông tin.



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

* Ưu và khuyết điểm của việc dùng bảng chỉ số:

Tải bản đầy đủ ngay(0 tr)

×