Truy Xuất Csdl Trước Khi Nhập Vào Các Giá Trị


write(terminal, $TENNCC, $DC) until END – OF- $NCC_REL

Trước tiên ứng dụng này thu thập tất cả các mã mặt hàng được nhập và đưa và tệp

$MH_REL. Sau đó truy xuất CSDL và đưa các thông tin tên nhà cung cấp, địa chỉ vào tập tin tham số $NCC_REL. Tiếp theo, chương trình quét tập tin $NCC_REL và trình bày các nhà cung cấp đã cung cấp mặt hàng được chọn.

2.4.3. Truy xuất CSDL trước khi nhập vào các giá trị

Ứng dụng truy xuất đầu tiên không có tham số nhập và lấy tất cả các dữ liệu cần thiết để thực hiện ứng dụng và đưa vào trong mối quan hệ tạm thời $TEMP_REL.

Giả sử chỉ có một số ít bộ từ quan hệ toàn cục được lấy ra trong hai trường hợp trước, giải pháp này đòi hỏi truyền nhiều dữ liệu hơn.

Giải pháp này có thể có ích nếu lấy nhiều bộ từ quan hệ toàn cục, bởi vì nó chỉ thực hiện một truy xuất CSDL phân tán và sau đó thực hiện việc lấy dữ liệu trong quan hệ tạm thời. Giải pháp này thường thích hợp nếu ứng dụng không đòi hỏi dữ liệu tức thời. Với truy xuất CSDL trước khi nhập vào các giá trị, quan hệ tạm thời biểu diễn một hình ảnh tĩnh của CSDL xảy ra tại một thời điểm đã cho trong quá khứ mà nó được sử

dụng để thực hện một ứng dụng cục bộ.

Các bước thực hiện truy xuất:

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

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

Bước 1: Lấy tất cả các dữ liệu cần thiết để thực hiện ứng dụng và đưa vào trong mối quan hệ tạm thời $TEMP_REL

Insert into $TEMP_REL($tov1,…,$tovn)

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

Values(

Select fn1,…,fn2

From R1, …,Rn

Where );

Repeat

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

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

Bước 3: Xóa toàn bộ các bộ từ tệp $TEMP2_REL

Delete from $TEMP2_REL;

Bước 4: Tìm các thông tin thỏa mãn điều kiện trong tệp $TEMP_REL và đưa vào trong tệp $TEMP2_REL

Insert into $TEMP2_REL ($ov1,…,$ovn)

Values(

Select $tov1,…,$tovn

From $TEMP_REL

Where );


Trong đó tệp $TEMP_REL được sử dụng như là một quan hệ

Bước 5: Với mỗi giá trị được nhập, chương trình quét tệp tin tham số

$TEMP2_REL và đưa kết quả về thiết bị đầu cuối

Repeat

Read($TEMP2_REL, $ov1,…,$ovn);

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

Until END – OF - $TEMP2_REL Until END – OF – TERMINAL – INPUT;

1) Với ví dụ 2.29, chương trình được viết như sau:

Insert into $TEMP_REL ($TEMP_MADA, $ TEMP_MANV) Values(

Select MADA, MANV From HS);

Repeat

Read (terminal, $MANV); Delete from $TEMP2_REL;

Insert into $TEMP2_REL ($TEMP2_MADA) Values(

Select $TEMP_MADA From $TEMP_REL

Where $TEMP_MANV = $MANV); Repeat

Read ($TEMP2_REL, $TEMP2_MADA);

Write (terminal, $TEMP2_MADA) Until END – OF - $TEMP2_REL

Until END – OF – TERMINAL – INPUT;

Ứng dụng lấy thông tin mã dự án, mã nhân viên để thực hiện ứng dụng và đưa vào trong mối quan hệ tạm thời $TEMP_REL. Sau đó thu thập mã nhân viên được nhập từ thiết bị đầu cuối, xóa tất cả các bộ dữ liệu trong $TEMP2_REL. Tiếp theo thực hiện truy vấn dữ liệu trên quan hệ tạm thời $TEMP_REL, lấy ra mã dự án của những nhân viên tham gia dự án có mã nhân viên được nhập trước và đưa và $TEMP2_REL. Cuối cùng, chương trình quét tập tin $ TEMP2_REL và trình bày các dự án mà nhân viên này tham gia.

2) Với ví dụ 2.30, chương trình được viết như sau:

Insert into $TEMP_REL ($TEMP_MANCC, $TEMP_TENNCC,

$TEMP_DC, $TEM_MAMH)

Values(


Select MANCC, TENNCC, DC, MAMH From NCC, KD

Where NCC.MANCC= KD.MANCC);

Repeat

Read (terminal, $MAMH); Delete from $TEMP2_REL;

Insert into $TEMP2_REL ($TEMP2_TENNCC, $ TEMP2_DC) Values(

Select $TEMP_TENNCC, $TEMP_DC From $TEMP_REL

Where $TEM_MAMH =$MAMH); Repeat

Read ($TEMP2_REL, $TEMP2_TENNCC, $ TEMP2_DC);

Write (terminal, $TEMP2_TENNCC, $ TEMP2_DC) Until END – OF - $TEMP2_REL

Until END – OF – TERMINAL – INPUT;

Ứng dụng lấy thông tin mã nhà cung cấp, tên nhà cung cấp, địa chỉ, mã mặt hàng, để thực hiện ứng dụng và đưa vào trong mối quan hệ tạm thời $TEMP_REL. Sau đó thu thập mã mặt hàng được nhập từ thiết bị đầu cuối, xóa tất cả các bộ dữ liệu trong

$TEMP2_REL. Tiếp theo thực hiện truy vấn dữ liệu trên quan hệ tạm thời

$TEMP_REL, lấy ra tên nhà cung cấp, địa chỉ của những nhà cung cấp đã cung cấp các mặt hàng có mã mã mặt hàng được nhập trước và đưa và $TEMP2_REL. Cuối cùng, chương trình quét tập tin $ TEMP2_REL và trình bày các nhà cung cấp đã cung cấp mặt hàng này.

2.4.4. Truy xuất CSDL sử dụng biểu thức con chung

Để viết các thao tác cơ bản truy xuất CSDL một cách tốt nhất thì cần xác định biểu thức con chung (common subexpression).

Ví dụ 2.31: Xét hệ thống quản lý kinh doanh trong ví dụ 2.13 với ứng dụng tìm tên nhân viên làm việc trong các phòng ban thuộc một miền cho trước và các mã mặt hàng của các mặt hàng được lưu trữ tại các phòng ban thuộc cùng một miền.

- Lược đồ toàn cục:

NV(MANV, HOTEN, LUONG, THUE, MAQL, MAP) PH(MAP, TENP, MIEN, MAQL)

NCC(MANCC, TENNCC, DC) MH(MAMH, TENMH, DVT, MAU) KD(MANCC, MAMH, MAP, SL, DG)

Giải pháp 1: Sử dụng các truy vấn độc lập


Read (terminal, $MIEN);

Insert Into $TENNV_REL ($TENNV) Values(

Select TENNV From NV, PH

Where NV.MAP = PH.MAP and MIEN = $MIEN);

….

Insert Into $MAP_REL ($MAP) Values(

Select MAP From KD, PH

Where KD.MAP= PH.MAP and MIEN = $MIEN);

….

Trước tiên, ứng dụng nhận tham số là miền từ chương trình tựa- Pascal. Tiếp theo, tìm tên nhân viên trong các phòng thuộc một miền cho trước, Sau đó, tìm mã mặt hàng trong các phòng thuộc một vùng cho trước. Và cuối cùng sẽ trả kết quả về thiết bị đầu cuối.

Nhược điểm của giải pháp này là tập hợp các phòng thuộc một vùng cho trước được xác định hai lần và có thể được truyền đi hai lần giữa các nơi. Do đó, rất khó xác định một thao tác chung trong việc thực hiện cả hai truy vấn.

Giải pháp 2: Sử dụng biểu thức con chung

Để khắc phục nhược điểm của giải pháp 1, cần phải tách biểu thức con chung và xác định biến $MIEN không bị thay đổi giá trị của nó giữa hai truy vấn. Điều này đòi hỏi sự phân tích phức tạp của chương trình thủ tục ở thời gian biên dịch. Tuy nhiên, vấn đề tìm các biểu thức con chung trong một truy vấn đơn thì đơn giản hơn. Khi đó ứng dụng được viết dựa vào biểu thức con chung. Tham số $MIEN chỉ được truyền một lần cho DDBMS. Do đó, rò ràng chỉ có một giá trị chung cho cả hai truy vấn.

Read (terminal, $MIEN); Insert into $MAP_REL($MAP) Values(

Select MAP From PH

Where MIEN=$ MIEN);

Insert into $TENNCC_REL($TENNCC) Values(

Select TENNCC

from NCC, $MAP_REL


where NCC.MAP= $MAP_REL.$MAP);

Insert into $MAMH_REL ($MAMH) Values(

Select $MAMH

From KD, $MAP_REL

where KD.MAP = $MAP_REL.$MAP);

….

Trước tiên, ứng dụng tìm các phòng thuộc một vùng cho trước và đưa vào tệp

$MAP_REL. Tiếp theo, tìm tên nhân viên có mã phòng bằng mã phòng trong tệp

$MAP _REL. Sau đó, tìm mã mặt hàng được lưu trữ tại phòng có mã phòng trong tệp

$MAP _REL. Và cuối cùng sẽ trả kết quả về thiết bị đầu cuối.

Biên dịch ngược:

Nếu giao tiếp ngôn ngữ của DDBMS không cung cấp các thao tác kết hợp, hướng tập hợp (set–oriented, associative operation) mà chỉ cung cấp một ngôn ngữ thủ tục (procedural language) thì có thể thực hiện cái gọi là biên dịch ngược (decompilation). Biên dịch ngược bao gồm việc chuyển đổi một chương trình được viết bằng một ngôn ngữ thủ tục thành một tập hợp tương đương các truy vấn phi thủ tục. Biên dịch ngược là một vấn đề rất khó, bởi vì cần phải xuất phát từ cấu trúc tĩnh của các chương trình mà dữ liệu được truy xuất ở thời gian chạy (run time).

2.5. Ràng buộc trong CSDL phân tán

2.5.1. Ràng buộc toàn vẹn

Trong một cơ sở dữ liệu, khi bảng có sự thay đổi dữ liệu thì chúng phải tuân theo một quy luật nhất định nhằm đảm bảo được tính ràng buộc toàn vẹn đối với dữ liệu đang tồn tại trong các bảng có quan hệ với nhau. Ràng buộc (Constraints) được dùng để kiểm tra khi có sự biến đổi từ phía dữ liệu như thêm vào, xóa, cập nhật từ bất kỳ một nguồn dữ liệu nào khác. Ví dụ từ chính trong môi trường SQL Server, từ các chương trình Visual Bacsic, Visual Bacsic.Net, Java, C#,.. truy cập đến cơ sở dữ liệu. Khi có sự thay đổi dữ liệu trong bảng thì quá trình kiểm tra ràng buộc được thực hiện như một phương thức. Phương thức này sẽ kiểm tra tất cả các điều kiện và các quy luật đã thiết lập khi xây dựng cơ sở dữ liệu. Nếu dữ liệu được thêm vào, xóa, hay cập nhật không thỏa mãn các các điều kiện hoặc các quy luật đã định thì SQL Server sẽ đưa ra thông báo cho người dung biết là dữ liệu đưa vào không hợp lệ. Dữ liệu khi đó sẽ không được phép cập nhật và thay đổi trong cơ sở dữ liệu.

Các loại ràng buộc toàn vẹn:

- Ràng buộc miền (Domain constraints)

- Ràng buộc toàn vẹn (Reference intergrity constraints)

- Ràng buộc kiểm tra (Check constraints)


- Ràng buộc mặc nhiên (Default constraints)

1) Ràng buộc miền (Domain constraints)

Ràng buộc miền liên quan đến một hay nhiều trường. Ứng với mỗi trường có các quy luật hay tiêu chuẩn. Khi thêm hay cập nhật các bản ghi, ràng buộc này sẽ kiểm tra mà không cần xét đến sự liên quan của các bản ghi trong bảng.

2) Ràng buộc toàn vẹn (Reference intergrity constraints)

Ràng buộc toàn vẹn liên quan đến bảng có quan hệ với bảng hiện tại. Khi thêm hay cập nhật các bản ghi, ràng buộc sẽ kiểm tra giá trị của trường có phù hợp với trường trong bảng quan hệ khác với bảng hiện chứa trường ràng buộc hay không.

3) Ràng buộc kiểm tra (Check constraints)

Ràng buộc kiểm tra được sử dụng nhằm xác định điều kiện hợp lệ đối với dữ liệu. Khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

4) Ràng buộc mặc nhiên (Default constraints)

Ràng buộc mặc nhiên giúp cho bảng có dữ liệu phù hợp ngay cả khi không được người dùng nhập dữ liệu. Ràng buộc mặc nhiên được thiết lập bằng cách gắn một giá trị mặc nhiên cho một trường nào đó. Giá trị mặc nhiên chỉ được dùng cho trường hợp thêm bản ghi, không quan tâm đến việc cập nhật hay xóa.

Nếu giá trị đưa vào là rỗng thì giá trị mặc nhiên được sử dụng. Ngược lại, giá trị mặc nhiên không được sử dụng.

2.5.2. Ràng buộc tham chiếu

Ràng buộc tham chiếu (referential constraint) đòi hỏi tất cả các giá trị của một thuộc tính cho trước của một quan hệ cùng tồn tại trong một quan hệ khác nào đó.

Ràng buộc này đặc biệt có ích trong CSDL phân tán để bảo đảm tính đúng đắn của phân mảnh ngang dẫn xuất. Chẳng hạn, quan hệ HS được phân mảnh ngang dẫn xuất theo quan hệ DA. Do đó tất cả các giá trị của MADA trong HS phải có trong MADA của DA.

Các loại ràng buộc tham chiếu:

- Ràng buộc thực thể (Entity constraints)

- Ràng buộc khóa chính (Primary Key constraints)

- Ràng buộc khóa ngoại (Foreign Key constraints)

- Ràng buộc duy nhất (Unique constraints)

1) Ràng buộc thực thể (Entity constraints)

Ràng buộc thực thể liên quan đến bản ghi. Khi thêm hay cập nhật các bản ghi, ràng buộc sẽ kiểm tra dữ liệu có đúng với tiêu chuẩn hay không.

2) Ràng buộc khóa chính (Primary Key constraints)


Ràng buộc Primary Key được sử dụng để định nghĩa khoá chính của bảng. Khoá chính của một bảng là một hoặc một tập nhiều trường mà giá trị của chúng là duy nhất trong bảng. Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một khoá chính và bản thân khoá chính không chấp nhận giá trị NULL.

Ràng buộc Primary Key là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu. Khi thêm hay cập nhật trên trường Primary Key thì quá trình kiểm tra ràng buộc Primary Key sẽ xảy ra.

Chú ý:

- Nếu khoá chính của bảng chỉ có một trường và ràng buộc Primary Key được chỉ định ở mức trường, thì không cần phải chỉ ra danh sách trường sau từ khoá Primary Key.

- Nếu khóa chính của bảng gồm có 2 trường trở lên thì phải chỉ ra danh sách các trường sau từ khóa Primary Key và tên các trường được phân cách nhau bởi dấu phẩy. Trong trường hợp này, việc khai báo khoá chính được tiến hành ở mức bảng.

3) Ràng buộc khóa ngoại (Foreign Key constraints)

Foreign Key là một trường hay gồm nhiều trường được sử dụng để tạo mối liên kết dữ liệu giữa hai bảng. Foreign Key của một bảng sẽ giữ giá trị của Primary Key của một bảng khác và chúng ta có thể tạo ra nhiều Foreign Key trong một bảng.

Foreign Key có thể tham chiếu vào Primary Key hay trường có ràng buộc duy nhất.

Foreign Key có thể chứa giá trị NULL.

Ràng buộc Foreign Key không những kiểm soát dữ liệu chứa trong bảng có Foreign Key (tức bảng con) mà còn kiểm soát luôn cả dữ liệu trong bảng chứa Primary Key (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể tham chiếu ngược về bảng cha. Do đó ràng buộc Foreign Key sẽ đảm bảo điều đó không xảy ra. Nếu muốn xóa dữ liệu trong bảng cha thì trước hết bạn phải xóa hay vô hiệu hóa ràng buộc Foreign Key trong bảng con trước.

4) Ràng buộc duy nhất (Unique constraints)

Ràng buộc duy nhất tương tự như ràng buộc khóa chính nhưng chỉ yêu cầu giá trị duy nhất chứa trong trường của mỗi bảng dữ liệu. Khi thiết lập ràng buộc duy nhaatscho một trường thì giá trị trong trường là duy nhất. Do đó, khi thêm và sửa bản ghi mà giá trị trường bị trùng lặp thì SQL Server sẽ thông báo lỗi.

2.5.3. Thiết kế các ràng buộc tham chiếu

Rất khó và tốn kém để quản lý các ràng buộc toàn vẹn trong các hệ thống tập trung Có ít hệ thống có khả năng tạo sẵn (built-in capability) để định nghĩa và kích hoạt

các ràng buộc toàn vẹn.


Người lập trình ứng dụng phải viết các chương trình bảo đảm tính đúng đắn của dữ liệu.

Cần phải đặc tả các ràng buộc toàn vẹn một cách rò ràng.

Các ràng buộc toàn vẹn được kích hoạt bằng cách thêm vào các chương trình ứng dụng một mã lệnh để kiểm tra các vi phạm ràng buộc.

Nếu ràng buộc bị vi phạm thì chương trình bị ngừng thực hiện và tất cả các thao tác đã thực hiện có thể sẽ bị huỷ bỏ.

Ví dụ 2.32: Xóa khỏi quan hệ toàn cục DA một dự án có mã dự án được nhập từ thiết bị đầu cuối.

Giải pháp 1:

Read (terminal, $MADA); Delete from DA

Where MADA = $MADA;

Ứng dụng nhận tham số mã dự án từ chương trình tựa- Pascal. Tiếp theo xóa những dự án có mã dự án vừa nhập. Thao tác này có thể vi phạm ràng buộc tham chiếu.

Giải pháp 2:

Read (terminal, $MADA); Select MADA

From HS

Where MADA = $ MADA;

if not #FOUND then

Delete from DA

Where MADA = $ MADA;

Ứng dụng nhận tham số mã dự án từ chương trình tựa- Pascal. Tìm kiếm các bộ của quan hệ HS có cùng mã dự án được nhập. Nếu không có bộ nào trong quan hệ HS tham chiếu đến các bộ bị loại bỏ thì thực hiện xóa dự án đó. Do đó, đảm bảo an toàn để tiếp tục loại bỏ các bộ được xác định trong quan hệ DA giống như đã thực hiện không điều kiện trong chương trình vi phạm ràng buộc.

Ứng dụng này được áp dụng cho cả CSDL tập trung và CSDL phân tán mà trong đó hệ thống cung cấp tính trong suốt phân mảnh. Trong trường hợp này, các ràng buộc toàn vẹn được định nghĩa trong các quan hệ toàn cục; sự kết hợp của các chương trình ứng dụng với mã lệnh để kiểm tra ràng buộc được thực hiện ở mức toàn cục. Nếu các ứng dụng toàn cục được viết ở các mức trong suốt thấp hơn thì sự kết hợp này sẽ khó hơn và phụ thuộc vào phân mảnh dữ liệu và định vị dữ liệu.

Một trong các nhược điểm nghiêm trọng của các ràng buộc toàn vẹn là hiệu quả bị giảm do việc thực hiện các kiểm tra ràng buộc; hiệu quả bị giảm là một điều rất quan trọng trong CSDL phân tán.

Xem toàn bộ nội dung bài viết ᛨ

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

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