Truy Xuất Csdl Ql Dự Án Khi Ddbms Với Trong Suốt Vị Trí


Select fn1 Into $ov1,…., fnn Into $ovn

From R1, R2,…,Rn

Where [Group by <fn1>,….,<fnn>] [Having ]

Trong đó:

+ fn1,….,fnn là tên các trường

+ R1, R2,…, Rn là các quan hệ toàn cục hoặc các mảnh

- Bước 3: Kiểm tra kết quả

If not #FOUND then

Có thể bạn quan tâm!

Xem toàn bộ 312 trang tài liệu này.

- Bước 4: Trả về kết quả như là một tham số

If #FOUND then

Cơ sơ dữ liệu phân tán - 11

Write (terminal, $ov1, …., $ovn)

else write (terminal, “Không tìm thấy”)

Ví dụ 2.16 : Xét hệ thống quản lý dự án trong ví dụ 2.12

Hình 2.5 cho thấy cách thức mà ứng dụng truy xuất CSDL quản lý dự án khi DDBMS cung cấp trong suốt vị trí.

Hình 2 5 Truy xuất CSDL QL Dự án khi DDBMS với trong suốt vị trí a Với ứng 1

Hình 2.5. Truy xuất CSDL QL Dự án khi DDBMS với trong suốt vị trí

a) Với ứng dụng 1:

Read(terminal, $MADA);

Select TENDA Into $TENDA, VT Into $VT From DA1

Where MADA = $MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2

Where MADA = $MADA;

If #FOUND then

Write (terminal, $TENDA, $VT);

Else write (terminal, “Không tìm thấy”);


Chương trình này nhập một mã dự án và tìm tên dự án, vị trí của dự án có mã được nhập trong mảnh DA1. Nếu không tìm thấy thì cùng những thao tác này được thực hiện trên mảnh DA2.

b) Với ứng dụng 2:

Read(terminal, $MANV);

Select TENDA Into $TENDA, VT Into $VT From DA1, HS1

Where MANV = $MANV and DA1.MADA= HS1.MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA1, HS2

Where MANV = $MANV and DA1.MADA= HS2.MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2, HS1

Where MANV = $MANV and DA2.MADA= HS1.MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2, HS2

Where MANV = $MANV and DA2.MADA= HS2.MADA;

If #FOUND then

Write (terminal, $TENDA, $VT);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một mã nhân viên và tìm tên dự án, vị trí của dự án được thực hiện bởi nhân viên có mã được nhập với bốn truy vấn khác nhau, mỗi truy vấn tương ứng với mỗi cặp mảnh khác nhau của DA và HS. Ở đây áp dụng một chiến lược vét cạn; trong đó mỗi mảnh DA được kết nối với mỗi mảnh HS để tìm ra tên dự án, vị trí của dự án được thực hiện bởi nhân viên có mã nhân viên cho trước.

Read(terminal, $MANV);

Select TENDA Into $TENDA, VT Into $VT From DA1, HS1

Where MANV = $MANV and DA1.MADA= HS1.MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2, HS2

Where MANV = $MANV and DA2.MADA= HS2.MADA;

If #FOUND then


Write (terminal, $TENDA, $VT);

Else write (terminal, “Không tìm thấy”);

Xét nội dung thông tin của lược đồ phân mảnh: Các dự án chứa trong mảnh DA1 thì được thực hiện bởi nhân viên có mã chứa trong mảnh HS1; các dự án chứa trong mảnh DA2 thì được thực hiện bởi nhân viên có mã chứa trong mảnh HS2. Chương trình này nhập vào một mã nhân viên từ thiết bị đầu cuối và sau đó kết nối mảnh DA1 với mảnh HS1 để tìm ra mã nhân viên này. Nếu kết quả của truy vấn đầu tiên là rỗng (not

#FOUND) thì một thao tác được áp dụng cho các mảnh DA2 và HS2.

Bằng cách này chỉ cần có hai truy vấn SQL thay vì bốn truy vấn. Trước tiên chương trình này cho thấy rằng trong một hệ thống không cung cấp tính trong suốt phân mảnh; người lập trình ứng dụng phải xác định chiến lược để thực hiện các thao tác; chẳng hạn như các phép kết nối (trong trường hợp này người lập trình ứng dụng đã quyết định chỉ có hai phép kết nối giữa các mảnh thay vì bốn phép kết nối). Ngược lại, chương trình cho thấy rằng để cung cấp tính trong suốt phân mảnh hệ thống phải có khả năng tự động chọn các chiến lược truy xuất khác nhau. Do đó một vấn đề thật sự quyết định trong việc cung cấp tính trong suốt không phải là sự diễn giải của một ánh xạ (lược đồ phân mảnh) mà là việc chọn một chiến lược truy xuất tốt. Ví dụ một DDBMS cung cấp tính trong suốt phân mảnh và cho phép viết ứng dụng sử dụng chiến lược vét cạn nhưng thực hiện bốn phép kết nối giữa các mảnh thì rất kém hiệu quả so với hiệu quả có được bởi một người lập trình (thông minh).

Ví dụ 2.17: Xét hệ thống quản lý kinh doanh trong ví dụ 2.13

Hình 2.6 cho thấy cách thức mà ứng dụng truy xuất CSDL quản lý kinh doanh khi DDBMS cung cấp trong suốt vị trí.

Hình 2 6 Truy xuất CSDL QL kinh doanh khi DDBMS với trong suốt vị trí a Với ứng 2

Hình 2.6. Truy xuất CSDL QL kinh doanh khi DDBMS với trong suốt vị trí

a) Với ứng dụng 1:

Read(terminal, $MANCC); Select TENNCC Into $TENNCC From NCC1

Where MANCC = $ MANCC;

If not #FOUND then

Select TENNCC Into $TENNCC


From NCC2

Where MANCC = $ MANCC;

If #FOUND then

Write (terminal, $TENNCC);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một mã nhà cung cấp và tìm tên nhà cung cấp có mã được nhập trong mảnh NCC1. Nếu không tìm thấy thì cùng những thao tác này được thực hiện trên mảnh NCC2.

b) Với ứng dụng 2: Cách 1

Read(terminal, $DC);

Select DC, COUNT(MANCC) Into $SONCC

From NCC1 Where DC = $DC; Group by DC

If not #FOUND then

Select DC, COUNT(MANCC) Into $SONCC

From NCC2 Where DC = $DC; Group by DC

If #FOUND then

Write (terminal, $SONCC);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một địa chỉ và tìm số nhân viên có địa chỉ được nhập trong mảnh NCC1. Nếu không tìm thấy địa chỉ thì cùng những thao tác này được thực hiện trên mảnh NCC2.

Vì mảnh NCC1 chỉ chứa các nhà cung cấp có địa chỉ ở „Miền Bắc‟ và mảnh NCC2 chỉ chứa các nhà cung cấp có địa chỉ ở „Miền Nam‟. Do đó, chương trình trên có thể được viết như sau:

Cách 2:

Read(terminal, $DC); Case $DC of

„Miền Bắc‟: Select DC, COUNT(MANCC) Into $SONCC From NCC1

Group by DC

„Miền Nam‟: Select DC, COUNT(MANCC) Into $SONCC From NCC2


Group by DC If #FOUND then

Write (terminal, $SONCC);

Else write (terminal, “Không tìm thấy”);

Trong trường hợp này, các thao tác cơ bản truy xuất CSDL cũng giống như cách 1. Tuy nhiên, ứng dụng chỉ tham chiếu đến một trong hai mảnh. Theo cách này, ứng dụng được viết dựa trên cùng mức trong suốt phân tán được cung cấp bởi DDBMS như trong cách 2 (nghĩa là mức trong suốt vị trí). Tuy nhiên, nó phụ thuộc nhiều vào lược đồ phân mảnh, bởi vì nó liên quan chặt chẽ với các hằng „Miền Bắc‟ và „Miền Nam‟, là các giá trị của thuộc tính được sử dụng trong lược đồ phân mảnh. Do đó, một thay đổi của các giá trị này sẽ ảnh hưởng đến ứng dụng này, trong khi đó nó không ảnh hưởng đến ứng dụng được viết theo cách 1.

c) Với ứng dụng 3:

Read(terminal, $MAMH); Select TENNCC Into $TENNCC From NCC1, KD1

Where MAMH = $MAMH and NCC1.MANCC=KD1.MANCC;

If not #FOUND then

Select TENNCC Into $TENNCC From NCC1, KD2

Where MAMH = $MAMH and NCC1.MANCC=KD2.MANCC;

If not #FOUND then

Select TENNCC Into $TENNCC From NCC2, KD1

Where MAMH = $MAMH and NCC2.MANCC=KD1.MANCC;

If not #FOUND then

Select TENNCC Into $TENNCC From NCC2, KD2

Where MAMH = $MAMH and NCC2.MANCC=KD2.MANCC;

If #FOUND then

Write (terminal, $TENNCC);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một mã mặt hàng và tìm tên nhà cung cấp đã cung cấp mặt hàng có mã mặt hàng được nhập với bốn truy vấn khác nhau, mỗi truy vấn tương ứng với mỗi cặp mảnh khác nhau của NCC và KD. Ở đây áp dụng một chiến lược vét cạn; trong đó mỗi mảnh NCC được kết nối với mỗi mảnh KD để tìm ra tên nhà cung cấp đã cung cấp mặt hàng có mã mặt hàng cho trước.


Read(terminal, $MAMH); Select TENNCC Into $TENNCC From NCC1, KD1

Where MAMH = $MAMH and NCC1.MANCC=KD1.MANCC;

If not #FOUND then

Select TENNCC Into $TENNCC From NCC2, KD2

Where MAMH = $MAMH and NCC2.MANCC=KD2.MANCC;

If #FOUND then

Write (terminal, $TENNCC);

Else write (terminal, “Không tìm thấy”);

Xét nội dung thông tin của lược đồ phân mảnh: Các nhà cung cấp cung cấp mặt hàng chứa trong KD1 thì chứa trong mảnh NCC1; các nhà cung cấp cung cấp mặt hàng chứa trong KD2 thì chứa trong mảnh NCC2. Chương trình này nhập vào một mã mặt hàng từ thiết bị đầu cuối và sau đó kết nối mảnh NCC1 với mảnh KD1 để tìm ra mặt hàng này này. Nếu kết quả của truy vấn đầu tiên là rỗng (not #FOUND) thì một thao tác được áp dụng cho các mảnh NCC2 với mảnh KD2.

3) Trong suốt ánh xạ cục bộ (local mapping transparency)

Mỗi thao tác cơ bản truy xuất CSDL được dẫn đường (routed) bởi DDBMS để đến nơi chỉ định. Tuy nhiên, các thao tác cơ bản này sử dụng các tên mảnh độc lập vị trí (site - independent). Nếu ánh xạ này không được cung cấp, ứng dụng sẽ sử dụng trực tiếp các tên tập tin trong các hệ thống cục bộ.

Tính trong suốt ánh xạ cục bộ là một đặc tính quan trọng trong hệ thống DBMS không đồng nhất, không phải là ánh xạ giữa các tên mảnh với các tên tập tin cục bộ mà là ánh xạ từ các thao tác cơ bản được sử dụng bởi chương trình ứng dụng thành các thao tác cơ bản được sử dụng bởi DBMS cục bộ. Do đó, tính trong suốt cục bộ là một đặc điểm quan trọng trong DDBMS không đồng nhất.

Giả sử DBMS cục bộ tại nơi 1 là SQL Server và DBMS cục bộ tại nơi 3 là hệ thống Oracle. Để cung cấp tính trong suốt ánh xạ cục bộ, DDBMS phải chuyển đổi các thao tác cơ bản truy xuất CSDL được phát ra bởi ứng dụng đưa vào trong các chương trình SQL Server và Oracle tương ứng. Các vấn đề biên dịch tương tự cũng có thể thấy trong một DDBMS không đồng nhất, bởi vì ngay cả trong các hệ thống đồng nhất thì cũng có sự khác biệt giữa các thao tác cơ bản được sử dụng ở mức toàn cục với các thao tác cơ bản của DBMS cục bộ.

Tính trong suốt ánh xạ cục bộ liên quan đến:

- Lược đồ định vị

- Lược đồ phân mảnh


- Quan hệ cục bộ

Ứng dụng tham chiếu đến các đối tượng bằng cách sử dụng các tên độc lập với các hệ thống cục bộ riêng biệt cần chỉ định các đối tượng được đặt tại các nơi nào bằng cách khai báo trong mệnh đề from.

Cấu trúc chương trình

- Bước 1: Nhận một tham số từ chương trình tựa- Pascal

Read(terminal, $iv1,…, $ivn)

- Bước 2: Truy xuất CSDL

Select fn1 Into $ov1,…., fnn Into $ovn

From R1 At Site , R2 At Site ,…,Rn At Site

Where [Group by <fn1>,….,<fnn>] [Having ]

Trong đó:

+ fn1,….,fnn là tên các trường

+ R1, R2,…, Rn là các quan hệ toàn cục hoặc các mảnh

- Bước 3: Kiểm tra kết quả

If not #FOUND then

- Bước 4: Trả về kết quả như là một tham số

If #FOUND then

Write (terminal, $ov1, …., $ovn)

else write (terminal, “Không tìm thấy”)

Chú ý: Trong trường hợp các mảnh của hai quan hệ toàn cục có kết nối với nhau lại không cùng một vị trí, ta dùng lệnh truyền dữ liệu: Send From Site To Site.

Ví dụ 2.18 : Xét hệ thống quản lý dự án trong ví dụ 2.12

Hình 2.7 cho thấy cách thức mà ứng dụng truy xuất CSDL quản lý dự án khi DDBMS cung cấp trong suốt ánh xạ cục bộ.

Hình 2 7 Truy xuất CSDL QL Dự án khi DDBMS với trong suốt ánh xạ cục bộ a Với 3

Hình 2.7. Truy xuất CSDL QL Dự án khi DDBMS với trong suốt ánh xạ cục bộ

a) Với ứng dụng 1:

Read(terminal, $MADA);


Select TENDA Into $TENDA, VT Into $VT From DA1 at site 1

Where MADA = $MADA;

If not #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2 at site 3

Where MADA = $MADA;

If #FOUND then

Write (terminal, $TENDA, $VT);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một mã dự án và tìm tên dự án, vị trí của dự án có mã được nhập trong mảnh DA1 ở nơi 1. Nếu không tìm thấy mã dự án tại nơi 1 thì cùng những thao tác này được thực hiện trên mảnh DA2 tại nơi 2 hoặc 3.

b) Với ứng dụng 2:

Read(terminal, $MANV); Select MADA Into $MADA From HS1 at site 1

Where MANV = $MANV

If #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA1 at site 1

Where MADA = $MADA

If not #FOUND then Begin

Select MADA Into $MADA From HS2 at site 3

Where MANV = $MANV

If #FOUND then

Select TENDA Into $TENDA, VT Into $VT From DA2 at site 3

Where MADA = $MADA

End

If #FOUND then

Write (terminal, $TENDA, $VT);

Else write (terminal, “Không tìm thấy”);

Chương trình này nhập một mã nhân viên và tìm tên dự án, vị trí của dự án được thực hiện bởi nhân viên có mã được nhập trong mảnh HS1 ở nơi 1. Nếu tìm thấy mã

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 28/06/2022