Select fn1 Into $ov1,…., fnn Into $ovn
From R1, R2,…,Rn
Where
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!
- Cây Phân Mảnh Dẫn Xuất Của Hệ Thống Quản Lý Dự Án
- Cơ sơ dữ liệu phân tán - 9
- Tính Trong Suốt Phân Mảnh Dùng Cho Các Ứng Dụng Chỉ Đọc
- Truy Xuất Csdl Ql Kinh Doanh Khi Ddbms Với Trong Suốt Ánh Xạ Cục Bộ
- Truy Xuất Csdl Sau Khi Nhập Vào Tất Cả Các Giá Trị
- Truy Xuất Csdl Trước Khi Nhập Vào Các Giá Trị
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
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 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 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
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
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 ứ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ã