Current_Date trong truy vấn

Một phần của tài liệu Nghiên cứu một số phương pháp gán nhãn thời gian trên cơ sở dữ liệu (Trang 46 - 48)

Việc xử lý hàm Current_Date trong các truy vấn trở nên phức tạp hơn bởi người sử dụng được phép chèn dữ liệu với thuộc tính có giá trị thời gian trong tương lai. Có hai phương pháp để sử dụng Current_Date trong truy vấn.

- Thứ nhất là chúng ta có thể sử dụng cùng một giá trị trong toàn bộ giao tác, ví dụ như thời gian khi một giá trị của Curent_Date là đầu tiên cần đến.

- Thứ hai là chúng ta có thể cho phép sử dụng các giá trị khác nhau cho

Current_Date trong các truy vấn khác nhau trong cùng một giao tác, mà có thể đạt được chỉ đơn giản bằng cách để lại lời gọi của Current_Date như là trong các truy vấn.

3.3.2.1. Sử dụng một giá trị duy nhất cho Current_Date

Khi sử dụng một giá trị duy nhất cho Current_Date trong các truy vấn, chúng ta không thể sử dụng giá trị tương tự như đối với sự thay đổi mà chúng ta đã tìm hiểu trong mục 3.3.1, bởi vì thời gian sử dụng là thời gian commit mà trong truy vấn chúng ta chưa biết đến khi giao tác thực sự commit. Thay vào đó, giả sử chúng ta sử dụng thời gian khi Current_Date là đầu tiên cần đến, có thể được xác định cú pháp và xem xét các giao tác trong hình 3.4 dưới đây:

Hình 3.4. Current_Date trong truy vấn

Như trên hình, giao tác sẽ bắt đầu vào ngày 16/1 và commit vào ngày 22/1. CSDL bao gồm một bộ dữ liệu nhân viên “Mi”có lương 28000 trong giai đoạn [1998/01/14 - 1998/01/19).

- Bây giờ giả sử có truy vấn Q1 thực hiện vào ngày 18/1, yêu cầu hiển thị tất cả các nhân viên hiện tại có lương 30000. Truy vấn Q1 phải sử dụng một giá trị cho Curent_Date và đây là thời gian mà đầu tiên cần đến, vì thế

Current_Date sẽ được khởi tạo vào ngày 18/1.

- Trong ngày 20/1, truy vấn Q2 yêu cầu hiển thị tất cả các nhân viên hiện tại có lương 28000. Bởi vì chúng ta chỉ sử dụng một giá trị cho Current_Date

trong một giao tác, nên chúng trả kết quả là ngày 16/1 và Q2 sẽ trả lại kết quả là nhân viên “Mi” có lương là 28000. Mặc dù các truy vấn được thực hiện vào ngày 20/1 và chúng ta đã ghi nhận có nhân viên “Mi” với lương là 28000 trong khoảng thời gian [1998/01/14 - 1998/01/19).

3.3.2.2. Sử dụng nhiều giá trị thay thế cho Current_Date

Tiếp theo, chúng ta xem xét việc sử dụng nhiều giá trị thay thế cho

Current_Date trong truy vấn trong một giao tác. Đối với mỗi câu lệnh trong 1 truy vấn chúng ta lưu giữ giá trị Current_Date, với mỗi lời gọi có thể cho ra một giá trị khác nhau. (Mi, 28000) 10 11 12 13 14 15 16 17 18 19 20 21 22 23 18 Q1 Q2 Thời gian 20

Ta quay lại hình 3.4 ở mục trên, cách tiếp cận này cho thấy Current_Date

sẽ có 2 giá trị là ngày 18/1 và ngày 20/1 trong các truy vấn Q1 và Q2 tương ứng. Điều này cũng phát sinh một vấn đề đó là những câu truy vấn tương tự nhau, để rõ vấn đề này ta xét ví dụ sau:

Ví dụ 3.2. Như hình 3.4 truy vấn Q1 thực hiện ngày 18/1, truy vấn Q2 thực hiện ngày 20/1 nếu hai truy vấn Q1 và Q2 là truy vấn tương tự nhau. Giả sử như cả hai truy vấn đều lấy tất cả các bộ dữ liệu của nhân viên có lương 28000.

- Vì truy vấn Q1 thực hiện trước vào ngày 18/1 nên kết quả sẽ trả về là thông tin nhân viên “Mi”có lương 28000.

- Đến ngày 20/1 truy vấn Q2 thực hiện nhưng sẽ không có nhân viên nào có lương là 28000 được trả về nữa.

Sự biến mất của bộ dữ liệu ghi nhân viên “Mi” với lương 28000 để không lặp lại vấn đề và hình thành một vi phạm tính độc lập của giao tác. Không lặp lại việc đọc là một vấn đề mà nhiều người sử dụng trong các hệ thống CSDL thông thường.

Một phần của tài liệu Nghiên cứu một số phương pháp gán nhãn thời gian trên cơ sở dữ liệu (Trang 46 - 48)

Tải bản đầy đủ (PDF)

(68 trang)