Như chúng ta đã đề cập trong mục 2.2 đó là trong CSDL thời gian giao tác có một giá trị đặc biệt là uc ở thời gian kết thúc giao tác TET, nó cho biết rằng bộ biễu diễn các thông tin đó đúng cho đến khi nó bị thay đổi bởi các giao tác khác. Tất cả các bộ dữ liệu không hợp lệ đã xóa nhãn thời gian uc trong thuộc tính TET. Để làm rõ vấn đề này, chúng ta xét lại ví dụ 2.2 dưới đây, đây cũng chính là ví dụ 2.1 mà luận văn đã trình bày ở phần trên, ví dụ này sẽ đi xuyên suốt trong toàn luận văn này.
Ví dụ 2.2. Xét quan hệ NV-TT với dữ liệu ban đầu như bảng 2.3 dưới đây.
NV_TT
Bảng 2.3. Bộ dữ liệu trong quan hệ theo thời gian giao tác NV_TT
TÊN MANV LUONG MAPB TST TET
An 101 25000 5 1997-06-08, 13:05:58
Uc
Ở đây, giá trị thời gian kết thúc giao tác TET của nhân viên “An” có giá trị là uc điều này nói lên rằng bộ dữ liệu biễu diễn các thông tin của nhân viên “An” là đúng.
Bây giờ, ta tiến hành cập nhật lương mới cho nhân viên có tên “An” từ 25000 lên 30000 vào thời điểm là “1998/06/04; 08:56:12” bằng câu lệnh truy vấn thời gian như sau:
--on 1998/06/04, 08:56:12:
UPDATE NV_TT SET LUONG =30000 WHERE TEN=’An’;
COMMIT;
Bảng 2.4. Bộ dữ liệu trong quan hệ NV_TT sau khi thực hiện cập nhật
TÊN MANV LUONG MAPB TST TET
v1 An 101 25000 5 1997/06/08, 13:05:58 1998/06/04, 08:56:12 v2 An 101 30000 5 1998/06/04, 08:56:12 uc
Ta tạm gọi bộ dữ liệu cũ của nhân viên “An” là v1 và bộ dữ liệu mới sau khi cập nhật lương của nhân viên “An” là v2.
- Chúng ta thấy rằng, giá trị TET của bộ v1 lúc này không còn là uc nữa mà đã thay đổi bởi vì thông tin của nhân viên “An” với lương 25000 không còn đúng nữa mà đã bị thay bằng bộ v2 với lương là 30000 bởi các giao tác cập nhật lương.
- Lúc này bộ dữ liệu v2 là bộ dữ liệu đúng, nên thời gian kết thúc giao tác TET của bộ v2 có giá trị là uc.
Giá trị của uc không thể nằm ở giữa thời gian cơ sở dữ liệu được tạo ra và thời gian hiện tại; việc sử dụng một giá trị trong tương lai gần cũng không phải là một chọn lựa an toàn. Các biểu diển này là không rõ ràng bởi vì cuối cùng chúng ta sẽ không thể phân biệt được các giá trị uc biểu diễn. Ngay cả việc tránh được các khả năng này, một vài giá trị vẫn sẵn sàng để biểu diễn uc. Chính xác, ba giá trị có thể còn:
Bất cứ thời gian nào trước khi cơ sở dữ liệu được tạo ra.
Giá trị lớn nhất trong miền dữ liệu (31-12- 9999 trong SQL-92).
Giá trị NULL.
Việc sử dụng giá trị trước khi cơ sở dữ liệu được tạo ra ngụ ý rằng giá trị thời gian kết thúc giao tác có thể nhỏ hơn giá trị thời gian bắt đầu giao tác, điều này chúng tôi không cho phép. Các yêu cầu có thể được cách sử dụng giá trị lớn
nhất trong miền dữ liệu. Lựa chọn cuối cùng, sử dụng giá trị NULL cho until changed cũng có thể bởi vì thời gian kết thúc giao tác không có thể là NULL: do đó chúng ta có thể “tái sử dụng” NULL mà không có tải nó. Hơn nữa, NULL thường yêu cầu ít không gian trong cơ sở dữ liệu hơn các nhãn thời gian khác.