24/05/2018, 22:53

Mô hình quan hê, các rằng buộc quan hệ

Mô hình quan hệ được Ted Codd đưa ra đầu tiên vào năm 1970 và gây được chú ý ngay tức khắc vì tính đơn giản và các cơ sở toán học của nó. Mô hình quan hệ sử dụng khái niệm quan hệ toán học như là khối xây dựng cơ sở và có cơ sở lý thuyết của nó trong lý ...

Mô hình quan hệ được Ted Codd đưa ra đầu tiên vào năm 1970 và gây được chú ý ngay tức khắc vì tính đơn giản và các cơ sở toán học của nó. Mô hình quan hệ sử dụng khái niệm quan hệ toán học như là khối xây dựng cơ sở và có cơ sở lý thuyết của nó trong lý thuyết tập hợp và logic vị từ bậc nhất. Trong chương này chúng ta sẽ nói về các đặc trưng cơ bản của mô hình, các ràng buộc của chúng và tập hợp các phép toán của mô hình quan hệ.

Mô hình quan hệ biểu thị cơ sở dữ liệu như một tập các quan hệ. Mỗi quan hệ có thể được biểu diễn như một bảng giá trị, mỗi một dòng trong bảng biểu thị một tấp hợp các giá trị dữ liệu liên quan với nhau. Trong chương trước, chúng ta đã đưa ra các khái niệm về kiểu thực thể và kiểu liên kết như là các khái niệm để mô hình hoá dữ liệu của thế giới thực. Trong mô hình quan hệ, mỗi một dòng trong bảng biểu thị một sự kiện tương ứng với một thực thể hoặc một liên kết của thế giới thực. Tên bảng và tên các cột dùng để giúp giải thích ý nghĩa của các giá trị trong mỗi hàng. Mọi giá trị trong một cột đều cùng một kiểu dữ liệu.

Theo thuật ngữ mô hình quan hệ hình thức, mỗi hàng được gọi là một bộ, mỗi đầu cột được gọi là một thuộc tính, và bảng được gọi là một quan hệ. Kiểu dữ liệu mô tả các kiểu của dữ liệu xuất hiện trong mỗi cột gọi là một miền.

Miền, thuộc tính, bộ và quan hệ

Một miền D là một tập hợp các giá trị nguyên tử, điều đó có nghĩa là mỗi giá trị trong miền là không thể phân chia được trong phạm vi mô hình quan hệ. Để đặc tả một miền, người ta chỉ ra một tên, một kiểu dữ liệu và khuôn dạng dữ liệu. Một số ví dụ về định nghĩa miền:

. Họ tên: Tập hợp các dãy chữ cái có độ dài <= 30.

. Tuổi: Tập các số nguyên nằm trong khoảng từ 1 đến 80.

. Giới tính: Tập hợp gồm hai giá trị “Nam”, “Nữ”.

Ngoài ra, trong cơ sở dữ liệu người ta còn chỉ ra các thông tin phụ để thể hiện các giá trị của miền, chẳng hạn các đơn vị tính như tiền, trọng lượng,…

Một lược đồ quan hệ R, ký hiệu là R(A1,A2,..., An), được tạo nên từ một tên quan hệ R một danh sách các thuộc tính A1,A2,…, An. Mỗi một thuộc tính Ai là tên vai trò của một miền D nào đó trong lược đồ quan hệ R. D được gọi là miền giá trị của Ai và được ký hiệu là Dom(Ai). Một lược đồ quan hệ được sử dụng để mô tả một quan hệ, R được gọi là tên của quan hệ đó. Cấp của một quan hệ là số các thuộc tính của lược đồ quan hệ của nó. Ví dụ, ta có lược đồ cho quan hệ cấp 5: SINHVIÊN (Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ). Với lược đồ quan hệ này, SINHVIÊN là tên của quan hệ.

Một quan hệ (hoặc trạng thái quan hệ) r của lược đồ quan hệ R(A1,A2,…, An) được ký hiệu là r(R), là tập hợp các n-bộ r = {t1, t2, ..., tn }. Mỗi n-bộ t là một danh sách có thứ tự của n giá trị, t = <v1, v2, …, vn>, trong đó mỗi vi ,1<= i <= n , là một phần tử của Dom(Ai) hoặc là một giá trị không xác định (null value). Giá trị thứ i của bộ t, tương ứng với thuộc tính Ai được ký hiệu là t[Ai] . Hình III-1 chỉ ra một ví dụ của quan hệ SINHVIÊN tương ứng với lược đồ quan hệ SINHVIÊN ở trên. Mỗi bộ trong quan hệ biểu diễn một thực thể sinh viên cụ thể. Quan hệ được biểu diễn như một bảng, trong đó mỗi bộ được hiển thị như một hàng và mỗi thuộc tính tương ứng với một đầu cột chỉ ra vai trò của các giá trị trong cột đó. Các giá trị không xác định biểu thị các thuộc tính mà giá trị của nó không biết được hoặc không tồn tại đối với từng bộ SINHVIÊN cụ thể.

Quan hệ SINHVIÊN

Định nghĩa quan hệ ở trên có thể phát biểu lại như sau: Một quan hệ r(R) là một quan hệ toán học cấp n trên các miền giá trị dom(A1), dom(A2), …, dom(An), đó là tập con của tích Đề các của các miền giá trị xác định R:

r( R) ⊆ (dom(A1) x dom(A2) x … dom(An)).

Tích Đềcác chỉ ra mọi tổ hợp có thể có của các giá trị từ các miền đã cho. Như vậy, nếu ta ký hiệu lực lượng của một miền D là D và giả thiết rằng mọi miền đều hữu hạn thì tổng số các bộ trong tích Đề cac là:

dom(A1)*dom(A2)*….*dom(An).

Ngoài tất cả các tổ hợp có thể có này, một trạng thái quan hệ ở một thời điểm cho trước - gọi là trạng thái quan hệ hiện tại - chỉ phản ánh các bộ giá trị biểu diễn một trạng thái cụ thể của thế giới thực. Nói chung, do trạng thái của thế giới thực thay đổi, quan hệ cũng bị thay đổi thành trạng thái quan hệ khác. Tuy nhiên, lược đồ R là ổn định, không thay đổi, trừ phi phải thêm vào một số thuộc tính để biểu diễn một thông tin mới chưa được lưu trữ trong quan hệ.

Có thể xảy ra trường hợp nhiều thuộc tính có cùng một miền giá trị. Các thuộc tính chỉ ra các vai trò khác nhau đối với miền. Ví dụ, hai thuộc tính ĐịachỉNV và ĐịachỉĐV có cùng miền giá trị nhưng thuộc tính thứ nhất tham chiếu đến địa chỉ của nhân viên còn địa chỉ thứ hai tham chiếu đến địa chỉ của đơn vị.

Các đặc trưng của các quan hệ

Thứ tự của các bộ trong một quan hệ

Một quan hệ được định nghĩa như một tập hợp các bộ. Các phần tử trong một tập hợp không có thứ tự, vì vậy các bộ trong một quan hệ không có một thứ tự cụ thể. Tuy nhiên, trong một tệp, các bản ghi được lưu trữ một cách vật lý trên đĩa vì vậy luôn có một thứ tự giữa các bản ghi. Thứ tự này chỉ rõ bản ghi thứ nhất, bản ghi thứ hai, …, bản ghi thứ n. Một cách tương tự, khi ta biểu diễn một quan hệ như là một bảng, các hàng được hiển thị theo một thứ tự nhất định.

Thứ tự các bộ không phải là một phần của định nghĩa quan hệ bởi vì một quan hệ cố gắng biểu diễn các sự vật ở mức trừu tượng hoặc lôgic. Có thể có nhiều thứ tự lôgic trên một quan hệ. Ví dụ, các bộ giá trị trong quan hệ SINHVIÊN ở hình 4-1 có thể sắp xếp theo nhiều cách khác nhau: theo thứ tự logic của Họtên, theo thứ tự logic của Mãsố,… Định nghĩa quan hệ không chỉ ra thứ tự lôgic nào cả, vì vậy không có thứ tự lôgic nào hơn thứ tự lôgic khác. Các quan hệ chứa cùng một số hàng như nhau nhưng các hàng được sắp xếp khác nhau được xem như đồng nhất với nhau. Khi một quan hệ được cài đặt như một tệp, một thứ tự vật lý có thể được chỉ ra trên các bản ghi của tệp.

Thứ tự của các giá trị bên trong một bộ

Theo định nghĩa quan hệ ở trên, một n-bộ là một danh sách có thứ tự của n giá trị. Như vậy thứ tự của các giá trị trong một bộ là quan trọng, từ đó suy ra thứ tự của các thuộc tính trong một lược đồ quan hệ cũng quan trọng. Tuy nhiên, ở mức lôgic, thứ tự của các thuộc tính và các giá trị của nó là không thực sự quan trọng khi giữ được sự tương ứng giữa các thuộc tính và các giá trị.

Có thể đưa ra một định nghĩa khác về quan hệ, định nghĩa này sẽ làm cho thứ tự của các giá trị trong một bộ là không cần thiết. Theo định nghĩa này, một lược đồ quan hệ R = {A1, A2,…,An} là một tập hợp các thuộc tính và một quan hệ r(R) là một tập hợp hữu hạn các ánh xạ r = {t1, t2, …., tm}, trong đó mỗi ti là một ánh xạ từ R vào D, trong đó D = dom(A1)dom(A2) …dom(An). Trong định nghĩa này, t[Ai] phải ở trong dom(Ai) với 1<= i <= n với mỗi ánh xạ ti trong r. Mỗi ánh xạ ti được gọi là một bộ.

Theo định nghĩa này, một bộ có thể xem như một tập hợp các cặp (<thuộc tính>, <giá trị>), trong đó mỗi cặp cho một giá trị của ánh xạ từ một thuộc tính Ai đến một giá trị vi của dom(Ai) . Vì tên thuộc tính xuất hiện cùng với giá trị của nó nên thứ tự của các thuộc tính là không quan trọng. Điều này làm nên ý nghĩa ở mức trừu tượng hoặc lôgic vì chẳng có lý do gì để thích có một giá trị thuộc tính xuất hiện trước một giá trị thuộc tính khác trong một bộ.

Khi một quan hệ được cài đặt như một tệp, các thuộc tính được sắp xếp một cách vật lý như là các trường trong một bản ghi. Trong trường hợp đó chúng ta sẽ sử dụng định nghĩa thứ nhất của quan hệ, trong đó các giá trị của các thuộc tính trong một bộ là có thứ tự vì nó làm đơn giản rất nhiều khái niệm. Tuy nhiên, định nghĩa thứ hai là tổng quát hơn.

Các giá trị trong một bộ

Mỗi giá trị trong một bộ là một giá trị nguyên tử, điều đó có nghĩa là nó không phân chia được thành các thành phần trong phạm vi của mô hình quan hệ. Như vậy, trong mô hình quan hệ không cho phép có các thuộc tính phức hợp và các thuộc tính đa trị. Các thuộc tính đa trị phải được biểu diễn bằng các quan hệ còn các thuộc tính phức hợp chỉ được biểu diễn bằng các thuộc tính thành phần đơn của nó.

Các giá trị của một vài thuộc tính trong một bộ cụ thể có thể không biết được hoặc không thích ứng cho nó. Trường hợp đó, người ta sử dụng một giá trị đặc biệt gọi là giá trị null.Ví dụ, giả sử quan hệ SINHVIÊN có thuộc tính Sốđiệnthoạiởnhà.

Trong một tập thể sinh viên, có người có điện thoại ở nhà, có người không có và cũng có người có nhưng không biết chắc. Với những trường hợp không có hoặc không biết chắc, thuộc tính Sốđiệnthoạiởnhà có giá trị null.

Thể hiện của một quan hệ

Một lược đồ quan hệ có thể được thể hiện như là một tuyên bố hoặc một khẳng định. Ví dụ lược đồ quan hệ SINHVIÊN ở trên khẳng định rằng, nói chung, một thực thể sinh viên có một mã số, họ tên, ngày sinh, giới tính, địa chỉ. Mỗi bộ trong quan hệ được thể hiện như là một sự kiện hoặc như một thể hiện cụ thể của một khẳng định. Ngoài các quan hệ biểu diễn các sự kiện về các thực thể, một số quan hệ có thể biểu diễn các sự kiện về mối liên kết. Ví dụ, lược đồ quan hệ NHÂNVIÊN_DỰÁN(MãsốNV, MãsốDA, Sốgiờ) khẳng định các nhân viên làm việc với các dự án. Mỗi bộ trong quan hệ này liên kết một nhân viên với một dự án mà anh ta làm việc cho nó.

Như vậy, mô hình quan hệ biểu diễn các sự kiện về thực thể và các sự kiện về liên kết dưới dạng duy nhất là các quan hệ.

Trong phần này chúng ta thảo luận về các hạn chế trên các dữ liệu trong một lược đồ cơ sở dữ liệu quan hệ. Các hạn chế đó được gọi là các ràng buộc. Có các loại ràng buộc: ràng buộc miền, ràng buộc khoá, ràng buộc toàn vẹn thực thể và ràng buộc toàn vẹn tham chiếu.

Các ràng buộc miền

Các ràng buộc miền chỉ ra rằng giá trị của mỗi thuộc tính A phải là một giá trị nguyên tử thuộc miền giá trị dom(A). Các kiểu dữ liệu liên kết với các miền bao gồm: các kiểu dữ liệu số chuẩn cho các số nguyên (short integer, integer, long integer), các số thực (float, double precision float). Ngoài ra còn các kiểu dữ liệu ký tự (dãy ký tự với độ dài cố định, dãy ký tự với độ dài thay đổi), ngày, thời gian và tiền tệ. Các loại miền khác có thể là các miền con của một kiểu dữ liệu hoặc một kiểu dữ liệu đếm được trong đó mọi giá trị có thể được liệt kê rõ ràng.

Ràng buộc khoá và ràng buộc trên các giá trị không xác định (null)

Một quan hệ được định nghĩa như một tập hợp các bộ. Theo định nghĩa, các phần tử của một tập hợp là khác nhau, vì vậy, mọi bộ trong quan hệ phải khác nhau. Điều đó có nghĩa là không có hai bộ có cùng một tổ hợp giá trị cho tất cả các thuộc tính của chúng. Thông thường, có tồn tại các tập con của các thuộc tính của một lược đồ quan hệ có tính chất là không có hai bộ nào ở trong mọi trạng thái quan hệ r của R có cùng một tổ hợp giá trị cho các thuộc tính của nó. Giả sử chúng ta ký hiệu một tập con như vậy là SK, khi đó với hai bộ khác nhau bất kỳ t1 và t2 trong một trạng thái quan hệ r của R chúng ta có ràng buộc là t1[SK] ≠ t2[SK].

Tập hợp thuộc tính SK như vậy được gọi là một siêu khoá của lược đồ quan hệ R. Một siêu khoá SK xác định rõ một ràng buộc về tính duy nhất, phát biểu rằng không có hai bộ khác nhau trong một trạng thái r của R có cùng một giá trị cho SK. Mỗi quan hệ có ít nhất là một siêu khoá mặc định, đó là tập hợp tất cả các thuộc tính của nó. Một khoá K của một lược đồ quan hệ R là một siêu khoá của R với tính chất là nếu bỏ đi bất kỳ thuộc tính A nào ra khỏi K thì sẽ còn lại một tập K không phải là siêu khoá của R. Như vậy, một khoá là một siêu khoá tối thiểu, nghĩa là đó là một siêu khoá mà ta không thể vứt bỏ thuộc tính nào ra khỏi nó mà vẫn giữ được ràng buộc về tính duy nhất.

Ví dụ, xét quan hệ SINHVIÊN với các thuộc tính Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ. Thuộc tính {Mãsố} là một khoá của SINHVIÊN bởi vì không có hai bộ sinh viên có cùng một giá trị cho Mãsố. Mọi tập hợp thuộc tính có chứa Mãsố, vídụ {Mãsố, Họtên, Ngàysinh}, đều là một siêu khoá. Tuy nhiên, siêu khoá {Mãsố, Họtên, Ngàysinh} không phải là khoá bởi vì nếu bỏ đi thuộc tính Họtên hoặc Ngàysinh hoặc cả hai thì nó vẫn còn là một siêu khoá.

Giá trị của một thuộc tính khoá có thể được sử dụng để xác định một cách duy nhất mỗi bộ trong một quan hệ. Ví dụ, giá trị 4515202 của Mãsố xác định một cách duy nhất bộ giá trị tương ứng với sinh viên Lê Vân trong quan hệ SINHVIÊN. Chú ý rằng một tập hợp thuộc tính tạo nên một khoá là một tính chất của lược đồ quan hệ. Điều ràng buộc là tính chất đó phải thỏa mãn trên mọi trạng thái của lược đồ. Một khoá được xác định từ ý nghĩa của các thuộc tính và tính chất là bất biến, tính chất đó phải thỏa mãn khi chúng ta chèn thêm các bộ mới vào quan hệ. Ví dụ, ta không thể và không được chỉ định thuôc tính Họtên của quan hệ SINHVIÊN là khoá bởi vì không có gì đảm bảo rằng không tồn tại hai sinh viên có cùng họ tên.

Nói chung, một lược đồ quan hệ có thể có nhiều hơn một khoá. Trong trường hợp đó, mỗi một khoá được gọi là một khoá dự tuyển. Thông thường ta phải chỉ định một trong các khoá dự tuyển làm khoá chính của quan hệ. Khoá chính là một khoá dự tuyển mà các giá trị của chúng được dùng để xác định các bộ trong quan hệ. Ta quy ước rằng, các thuộc tính tạo nên khoá chính của một lược đồ quan hệ được gạch dưới. Ví dụ:

SINHVIÊN( Mãsố, Họtên, Ngàysinh, Giớitính, Địachỉ ).

Chú ý rằng khi một lược đồ quan hệ có nhiều khoá dự tuyển, việc lựa chọn một khoá dự tuyển để làm khoá chính là tuỳ ý, tuy nhiên tốt nhất là chọn khoá chính gồm một thuộc tính hoặc có số các thuộc tính ít nhất.

Một ràng buộc khác trên các thuộc tính chỉ rõ khi nào thì cho phép các giá trị null. Những thuộc tính luôn luôn phải có một giá trị xác định và hợp lệ thì bị ràng buộc là NOT NULL.

Cơ sở dữ liệu quan hệ và lược đồ cơ sở dữ liệu quan hệ

Ở trên, chúng ta đã nói đến các lược đồ quan hệ đơn lẻ và các quan hệ đơn lẻ. Một cơ sở dữ liệu quan hệ thường gồm nhiều quan hệ với các bộ giá trị trong các quan hệ được liên kết với nhau theo nhiều cách. Trong phần này chúng ta sẽ định nghĩa một cơ sở dữ liệu quan hệ và một lược đồ cơ sở dữ liệu quan hệ. Một lược đồ cơ sở dữ liệu quan hệ S là một tập hợp các lược đồ quan hệ

S = {R1, R2,…, Rn} và một tập các ràng buộc toàn vẹn.

Một trạng thái cơ sở dữ liệu quan hệ (hoặc một cơ sở dữ liệu quan hệ) DB của S là một tập hợp các trạng thái quan hệ:

DB = {r1, r2, …, rn}

sao cho mỗi ri là một trạng thái của Ri và sao cho các trạng thái quan hệ ri thoả mãn các ràng buộc toàn vẹn chỉ ra trong tập các ràng buộc toàn vẹn.

Ví dụ, Trình bày một lược đồ cơ sở dữ liệu CÔNGTY và trình bày một cơ sở dữ liệu công ty.

NHÂNVIÊN(Họđệm, Tên, MãsốNV, Ngàysinh, Địachỉ, Giớitính, Lương, MãsốNGS, MãsốĐV)

ĐƠNVỊ(TênĐV, MãsốĐV, MãsốNQL, Ngàybắtđầu)

ĐƠNVỊ_ĐỊAĐIỂM(MãsốĐV, ĐịađiểmĐV)

DỰÁN(TênDA, MãsốDA, ĐịađiểmDA, Mã sốĐV)

NHÂNVIÊN_DỰÁN(MãsốNV, MãsốDA, Sốgiờ)

CON(MãsốNV, TênPT, Giớitính, Ngàysinh)

Cơ sở dữ liệu “CÔNGTY” Cơ sở dữ liệu “CÔNGTY” Cơ sở dữ liệu “CÔNGTY” Cơ sở dữ liệu “CÔNGTY”

Trong một lược đồ cơ sở dữ liệu quan hệ, các thuộc tính biểu diễn cùng một khái niệm thế giới thực có thể (hoặc không) có cùng tên như nhau trong các quan hệ khác nhau. Ngược lại, các thuộc tính biểu diễn các khái niệm khác nhau có thể có tên như nhau trong các quan hệ khác nhau. Ví dụ, trong cơ sở dữ liệu CÔNGTY ở trên, các thuộc tính MãsốNV, MãsôNGS, MãsốNQL có tên khác nhau nhưng đều biểu diễn một khái niệm đó là mã số nhân viên (bởi vì người giám sát hoặc người quản lý cũng là nhân viên). Trong lúc đó, thuộc tính Giớitính có mặt trong hai quan hệ NHÂNVIÊN và CON, tuy nhiên Giớitính trong quan hệ NHÂNVIÊN là biểu thị giới tính của nhân viên còn Giớitính trong CON là biểu thị giới tính của người con.

Trong một số phiên bản trước của mô hình quan hệ, người ta yêu cầu rằng các thuộc tính biểu diễn cùng một khái niệm của thế giới thực thì phải có tên như nhau trong mọi quan hệ. Điều đó sẽ gây ra khó khăn khi cùng một khái niệm thế giới thực được sử dụng trong các vai trò khác nhau.

Một hệ quản trị cơ sở dữ liệu phải có ngôn ngữ định nghĩa dữ liệu (Data definition language DDL) để định nghĩa lược đồ cơ sở dữ liệu quan hệ. Các hệ quản trị cơ sở dữ liệu hiện nay hầu như sử dụng SQL cho mục đích này.

Các ràng buộc toàn vẹn được chỉ ra trên một lược đồ cơ sở dữ liệu và được tôn trọng làm thoả mãn trên mỗi trạng thái cơ sở dữ liệu của lược đồ này. Ngoài các ràng buộc miền và ràng buộc khoá còn có thêm các ràng buộc được xem như một phần của mô hình quan hệ, đó là ràng buộc toàn vẹn thực thể và ràng buộc toàn vẹn tham chiếu.

Toàn vẹn thực thể, toàn vẹn tham chiếu và khoá ngoại

Ràng buộc toàn vẹn thực thể được phát biểu là: khoá chính phải luôn luôn có giá trị xác định, nghĩa là không được phép có giá trị null. Sở dĩ có điều đó là do giá trị của khoá chính được sử dụng để xác định các bộ giá trị riêng biệt trong một quan hệ. Việc có giá trị null cho khoá chính kéo theo việc chúng ta không thể xác định được một số bộ giá trị. Ví dụ, nếu có hai hay nhiều hơn các bộ giá trị có giá trị null cho khoá chính thì chúng ta không có khả năng phân biệt chúng.

Các ràng buộc khoá và ràng buộc toàn vẹn thực thể được chỉ ra trên các quan hệ riêng rẽ.

Ràng buộc toàn vẹn tham chiếu được chỉ ra giữa hai quan hệ để duy trì sự tương ứng giữa các bộ của hai quan hệ. Một cách không hình thức, ràng buộc toàn vẹn tham chiếu được phát biểu là: một bộ giá trị trong một quan hệ có liên kết đến một quan hệ khác phải liên kết đến một bộ giá trị tồn tại trong quan hệ đó.

Để định nghĩa toàn vẹn tham chiếu một cách hình thức hơn, trước tiên chúng ta đưa ra khái niệm khoá ngoài: Một tập hợp các thuộc tính FK trong một lược đồ quan hệ R1 là một khoá ngoài của R1 tham chiếu đến quan hệ R2 nếu nó thoả mãn hai quy tắc sau:

qt1. Các thuộc tính trong FK có cùng miền giá trị như các thuộc tính của khoá chính PK của R2. Các thuộc tính FK được gọi là tham chiếu đến (hoặc là liên hệ đến) quan hệ R2.

qt2. Một giá trị của FK trong một bộ t1 của trạng thái hiện tại r1(R1) hoặc có mặt như một giá trị của khoá chính của một bộ t2 nào đấy trong trạng thái hiện tại r2(R2), hoặc là null. Trong trường hợp này ta có t1[FK] = t2[PK] và ta nói rằng bộ t1 liên hệ (tham chiếu) đến bộ t2. R1 được gọi là quan hệ tham chiếu và R2 được gọi là quan hệ bị tham chiếu.

Trong một cơ sở dữ liệu có nhiều quan hệ thường có nhiều ràng buộc toàn vẹn tham chiếu. Để chỉ ra các ràng buộc này, trước tiên ta phải có một hiểu biết rõ ràng về ý nghĩa hoặc vai trò của mỗi tập thuộc tính ở trong các lược đồ quan hệ khác nhau của cơ sở dữ liệu. Các ràng buộc toàn vẹn quy chiếu thường nảy sinh từ các mối liên kết giữa các thực thể được biểu diễn bằng các lược đồ quan hệ.

Chú ý rằng một khoá ngoài có thể tham chiếu đến quan hệ của chính nó. Trong trường hợp đó, khoá ngoài biểu thị một liên kết đệ quy.

Chúng ta có thể biểu diễn các ràng buộc tham chiếu bằng sơ đồ. Để làm điều đó ta vẽ một cạnh có hướng từ mỗi khoá ngoài đến quan hệ mà nó tham chiếu đến.

NHÂNVIÊN( Họđệm,Tên, MãsốNV, Ngàysinh, Địachỉ, Giớitính,Lương, MãsốNGS, MãsốĐV)

ĐƠNVỊ ( TênĐV, MãsốĐV, MãsốNQL, Ngàybắtđầu)

ĐƠNVỊ_ĐỊAĐIỂM( MãsốĐV, ĐịađiểmĐV)

DỰÁN( TênDA, MãsốDA, ĐịađiểmDA, Mã sốĐV)

NHÂNVIÊN_DỰÁN( MãsốNV, MãsốDA, Sốgiờ)

PHỤTHUỘC( MãsốNV, TênCon, Giớitính, Ngàysinh)

Hình 4 ‑ 3. Lược đồ và sơ đồ tham chiếu

Ngoài các ràng buộc toàn vẹn ở trên, cơ sở dữ liệu còn phải thoả mãn một số ràng buộc khác, như ràng buộc trạng thái, ràng buộc chuyển tiếp… Các ràng buộc trạng thái xác định các ràng buộc mà một trạng thái vững chắc của cơ sở dữ liệu phải thoả mãn. Ví dụ về các ràng buộc đó là: “lương của một nhân viên không được vượt quá lương của người giám sát nhân viên đó” hoặc “số giờ nhiều nhất mà một nhân viên có thể làm việc trong một tuần trên tất cả các dự án là 56 giờ”. Các ràng buộc như vậy có thể được đặc tả và bắt tuân theo bằng cách sử dụng một ngôn ngữ đặc tả ràng buộc. Người ta có thể sử dụng các cơ cấu như là trigger hoặc assertion. Các ràng buộc chuyển tiếp có thể được định nghĩa để làm việc với những thay đổi trạng thái trong cơ sở dữ liệu. Ví dụ về ràng buộc này là: “ lương của một nhân viên chỉ có thể tăng”. Các ràng buộc như vậy thường được định nghĩa bằng cách sử dụng các quy tắc hoặc bằng các trigger.

Trong phần này chúng ta thảo luận về các phép toán của mô hình quan hệ. Các phép toán của mô hình quan hệ có thể phân thành hai loại: các phép toán cập nhật và các phép toán đại số quan hệ. Các phép toán cập nhật được sử dụng để tạo ra một quan hệ đúng đắn. Các phép toán đại số quan hệ được sử dụng để đặc tả các phép lấy thông tin ra.

Các phép toán cập nhật

Các phép toán cập nhật gồm ba phép toán cơ bản là chèn, xoá và sửa đổi. Phép chèn được dùng để chèn một bộ giá trị hoặc nhiều bộ giá trị vào một quan hệ. Phép xoá dùng để loại bỏ các bộ giá trị và phép sửa đổi dùng để sửa đổi các giá trị của một số thuộc tính trong các bộ giá trị đã có. Mỗi khi các phép toán cập nhật được áp dụng, các ràng buộc trên lược đồ cơ sở dữ liệu có thể bị vi phạm. Trong phần này chúng ta sẽ nói đến khả năng vi phạm các ràng buộc của từng phép toán và các kiểu hành động có thể thực hiện khi một ràng buộc bị vi phạm.

Phép chèn (Insert)

Phép chèn cung cấp một danh sách các giá trị cho một bộ mới t được chèn vào trong một quan hệ R. Phép chèn có thể vi phạm các kiểu ràng buộc được mô tả ở trên. Các ràng buộc miền có thể bị vi phạm nếu một giá trị thuộc tính được cho không thuộc vào miền tương ứng. Các ràng buộc khoá có thể bị vi phạm nếu một giá trị khoá trong bộ mới t đã tồn tại trong một bộ khác ở trong quan hệ r(R). Sự toàn vẹn thực thể có thể bị vi phạm nếu khoá chính của bộ mới t là null. Sự toàn vẹn tham chiếu có thể bị vi phạm nếu một giá trị của một khoá ngoài trong t tham chiếu đến một bộ không tồn tại trong một quan hệ được tham chiếu. Ví dụ (với các bảng trong cơ sở dữ liệu CÔNGTY) :

  • Chèn bộ giá trị <null, ‘Vũ’, ‘Hải’, ‘15/07/81’, ‘Hànội’, ‘Nam’, 3200, null, 4> vào quan hệ NHÂNVIÊN. Phép chèn này vi phạm ràng buộc toàn vẹn thực thể (giá trị null cho khoá chính). Phép chèn bị loại bỏ.
  • Chèn bộ giá trị <‘NV002’,‘Trương’,‘Phi’,‘15/07/81’, ‘Hànội’, ‘Nam’, 3200, ‘NV067’, 4> vào quan hệ NHÂNVIÊN. Phép chèn này vi phạm ràng buộc khoá, bới vì giá trị ‘NV002’ đã có ở trong bảng. Phép chèn bị loại bỏ.
  • Chèn bộ giá trị <‘NV072’, ‘Vũ’, ‘Hải’, ‘15/07/81’, ‘Hànội’, ‘Nam’, 3200, ‘NV002’ , 7> vào quan hệ NHÂNVIÊN. Phép chèn này vi phạm ràng buộc toàn vẹn tham chiếu, trong quan hệ ĐƠNVỊ không có đơn vị có mã số = 7. Phép chèn bị loại bỏ.
  • Chèn bộ giá trị <‘NV045’l, ‘Vũ’, ‘Hải’, ‘15/07/81’, ‘Hànội’, ‘Nam’, 3200, ‘NV002’, 4> vào quan hệ NHÂNVIÊN. Phép chèn thoả mãn tất cả các ràng buộc, vì thế nó được chấp nhận.

Nếu một phép chèn vi phạm một hoặc nhiều ràng buộc, tuỳ chọn mặc định là loại bỏ phép chèn. Trong trường hợp này, thường là các hệ quản trị cơ sở dữ liệu có thể thông báo cho người sử dụng nguyên nhân của việc loại bỏ phép chèn.

Phép xoá (Delete)

Phép xoá được sử dụng để xoá một hoặc nhiều bộ giá trị của một quan hệ. Phép xoá chỉ có thể vi phạm ràng buộc tham chiếu trong trường hợp bộ bị xoá được tham chiếu bởi một khoá ngoài từ các bộ khác trong cơ sở dữ liệu. Để chỉ rõ một phép xoá, cần phải đưa ra một điều kiện trên các thuộc tính của quan hệ để chọn các bộ sẽ bị xoá.

Ví dụ:

  • Xoá một bộ giá trị của quan hệ NHÂNVIÊN_DỰÁN có MãsốNV = ‘NV010’ và MãsốDA = 10. Phép xoá này được chấp nhận.
  • Xoá bộ giá trị của NHÂNVIÊN có MãsốNV = ‘ NV010’. Phép xoá này không chấp nhận được bởi vì có các bộ trong NHÂNVIÊN_DỰÁN tham chiếu đến bộ này, như vậy là vi phạm ràng buộc toàn vẹn tham chiếu.
  • Xoá bộ giá trị của NHÂNVIÊN có MãsốNV = ‘ NV002’. Phép xoá này cũng vi phạm ràng buộc toàn vẹn tham chiếu .

Ba tuỳ chọn được sẵn sàng được sử dụng nếu một phép xoá gây ra sự vi phạm. Tuỳ chọn thứ nhất là loại bỏ phép xoá. Tuỳ chọn thứ hai là cố gắng lan truyền phép xoá (cascade the deletion) bằng cách xoá đồng thời các bộ tham chiếu đến bộ bị xoá. Tuỳ chọn thứ ba là sửa đổi các giá trị của các thuộc tính tham chiếu gây ra sự vi phạm. Mỗi giá trị như vậy hoặc là làm cho bằng null hoặc được thay đổi thành bộ có hiệu lực tham chiếu khác. Chú ý rằng, nếu một thuộc tính tham chiếu gây ra sự vi phạm là một phần của khoá chính thì không thể làm cho thành null, bởi vì nếu làm vậy thì sẽ vi phạm ràng buộc toàn vẹn thực thể. Có thể kết hợp cả ba tuỳ chọn ở trên.

Phép sửa đổi (Update)

Phép toán sửa đổi được dùng để thay đổi các giá trị của một hoặc nhiều thuộc tính trong một (hoặc nhiều) bộ của một quan hệ R nào đấy. Để lựa chọn các bộ cần được thay đổi, người sử dụng phải chỉ ra một điều kiện trên các thuộc tính. Ví dụ:

  • Sửa đổi Lương của bộ NHÂNVIÊN có MãsốNV = ‘NV018’ thành 2800. Phép sửa đổi này được chấp nhận.
  • Sửa đổi MãsốĐV của bộ NHÂNVIÊN có MãsốNV = ‘NV018’ thành 7. Phép sửa đổi này vi phạm ràng buộc toàn vẹn tham chiếu.
  • Sửa đổi MãsốNV của bộ NHÂNVIÊN có MãsốNV = ‘NV018’ thành ‘NV014’. Phép sửa đổi này vi phạm ràng buộc toàn vẹn thực thể và toàn vẹn tham chiếu.

Việc sửa đổi một thuộc tính không phải là một khoá chính hoặcc một khoá ngoài thường không gây ra các vi phạm ràng buộc, hệ quản trị cơ sở dữ liệu chỉ cần kiểm tra để khẳng định rằng giá trị mới là thuộc miền và kiểu giá trị đúng đắn. Việc sửa đổi giá trị một khoá chính tương tự như việc xoá một bộ và chèn bộ khác vào chỗ của nó. Như vậy chúng ta trở về trường hợp đã thảo luận với phép chèn và phép xoá. Nếu một thuộc tính khoá ngoài bị sửa đổi thì hệ quản trị cơ sở dữ liệu phải đảm bảo rằng giá trị mới tham chiếu đến một bộ có tồn tại trong quan hệ được tham chiếu (hoặc là null).

0