Lưu trữ định danh các giao tác trực tiếp trong các bộ dữ liệu

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 27)

Chúng tôi sử dụng mã giao tác khi xem lại các bộ để xác định các bộ nào đang được thay đổi. Có vài cách để kết hợp mã giao tác với các bộ. Đầu tiên, chúng tôi lưu trữ trục tiếp mã giao tác trong bộ. Trong cách tiếp cận này, tầng này thêm một thuộc tính phụ khi nó đi qua câu lệnh CREATE đến DBMS. Việc lưu trữ các mã giao tác trong các bộ có thể được làm trong hai cách: trong một thuộc tính phụ hay mã hóa trong chính các thuộc tính nhãn thời gian.

Việc sử dụng một thuộc tính phụ thì không phức tạp: chúng tôi lưu trữ một cách đơn giản mã giao tác trong thuộc tính này; Postgres sử dụng cách tiếp cận này [23]. Ngược lại, việc lưu trữ mã giao tác trong một thuộc tính nhãn thời gian đòi hỏi việc chuyển kiểu, bởi vì miền dữ liệu của các thuộc tính thời gian giao tác khác với miền dữ liệu của các mã giao tác (điển hình là TIMESTAMP khác INTEGER). Sự xung đột giữa các mã giao tác đã được mã hóa và các nhãn thời gian thực sự có thể được tránh bởi các nhãn thời gian giao tác lớn hơn thời gian khi CSDL được tạo ra. Do đó các mã giao tác có thể liên quan đến nhãn thời gian nhỏ nhất (điển hình là 0001-01-01): mã giao tác đầu tiên được ánh xạ đến giá trị nhỏ nhất trong miền dữ liệu thời gian, mã giao tác thứ hai được ánh

xạ đến giá trị nhỏ nhất thứ hai trong miền dữ liệu thời gian, và cứ thế tiếp tục. Hơn nữa, khi lưu trữ các mã giao tác trong các thuộc tính thời gian giao tác, chúng tôi phải lưu trữ giá trị tạm thời cho bộ trong một cấu trúc dữ liệu bổ sung.

- Lưu trữ trong thuộc tính phụ thì đơn giản, chúng ta chỉ cần lưu trữ định danh các giao tác trong thuộc tính này.

- Lưu trữ định danh các giao tác trong một thuộc tính thời gian giao tác đòi hỏi phải chuyển đổi kiểu, bởi vì miền xác định của thuộc tính thời gian giao tác khác với miền của định danh giao tác (thường là kiểu TIMESTAMP so với kiểu INTEGER).

- Khi lưu trữ các định danh giao tác trong các thuộc tính thời gian giao tác, chúng ta phải lưu trữ thêm các giá trị tạm thời như đã trình bày trong mục 5.2.

Tuy nhiên, việc chuyển đổi này có thể có hữu ích, nhưng không phải là tối ưu trong SQL-92 nơi mà các chuyển đổi giữa kiểu INTEGER và TIMESTAMP bằng kiểu INTERVAL [15]. Điều này có nghĩa là trước tiên chúng ta phải chuyển đổi một định danh giao tác đến kiểu INTERVAL và tiếp theo đó là thêm một khoảng thời gian đến giá trị nhỏ nhất trong miền thời gian.

2.3.2. Lưu trữ định danh các giao tác một cách riêng lẻ trong các bộ dữ liệu

Ở đây, mỗi bảng dữ liệu xác định có thêm một bảng mới để lưu trữ các bộ dữ liệu định danh, định danh giao tác và các thuộc tính nhãn thời gian bị ảnh hưởng bởi các thay đổi.

Với cách thức lưu trữ định danh các giao tác một cách riêng lẻ trong các bộ dữ liệu thì cả hai bảng nói trên phải được cập nhật cho từng sự thay đổi, điều này chính là nhược điểm của phương pháp lưu trữ này so với phương pháp lưu trữ định danh giao tác trực tiếp trong các bộ dữ liệu chỉ có một bảng dữ liệu được cập nhật khi có sự thay đổi.

2.4. Biểu diễn Until Changed ( uc)

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.

2.5. Các phương pháp gán nhãn thời gian giao tác

Như luận văn đã trình bày trong mục 1.3 là có 2 kỹ thuật gán nhãn thời gian cơ bản, kỹ thuật thứ nhất đó là kỹ thuật ghi nhận thông tin thời gian liên quan đến mỗi bộ dữ liệu, kỹ thuật gán nhãn thời gian thứ 2 đó là kỹ thuật ghi nhận thông tin thời gian liên quan đến mỗi thuộc tính trong từng bộ dữ liệu. Nhưng đối với kỹ thuật thứ gán nhãn thời gian thứ 2 thì thông tin sẽ trở nên rất phức tạp, do đó các hệ quản trị CSDL phải hỗ trợ thêm các phương pháp lưu trữ, xử lý, và truy vấn hiệu quả hơn.

Vì vậy, trong luận văn này chỉ trình bày phương pháp gán nhãn thời gian bằng kỹ thuật ghi nhận thông tin thời gian liên quan đến mỗi bộ dữ liệu.

Trong quan hệ thời gian giao tác, bất cứ khi nào có một thay đổi trong CSDL thì mốc thời gian thực tế của giao tác thực hiện sự thay đổi đó sẽ được ghi lại. Từng giao tác có phương thức gán nhãn thời gian riêng, cụ thể sẽ được trình bày trong các mục dưới đây:

2.5.1. Gán nhãn thời gian giao tác cho giao tác chèn

Khi chúng ta chèn một bộ dự liệu mới, dữ liệu đó sẽ được gán nhãn thời gian với thời gian bắt đầu giao tác chèn TST là của hệ thống khi giao tác được thực hiện và thời gian kết thúc giao tác TET là uc, ta có thể viết [thời gian hiện thời - uc].

Bảng 2.5.Bộ dữ liệu trong quan hệ NV_TT

NV_TT

TÊN MANV LUONG MAPB TST TET

Bây giờ chúng ta tiến hành chèn thêm nhân viên mới có tên là “An” , mã nhân viên là “101”, lương là 25000 và có mã phòng ban là “5” vào quan hệ NV_TT tại thời điểm 1997/06/08, 13:05:58với câu lệnh thời gian như sau:

-- on 1997/06/08, 13:05:58

INSERT INTO NV_TT VALUES (’An’,’101’,25000,’5’); COMMIT;

Kết quả của giao tác chèn này như sau:

Bảng 2.6. Bộ dữ liệu trong quan hệ NV_TT sau khi thực hiện giao tác chèn

TÊN MANV LUONG MAPB TST TET

An 101 25000 5 1997/06/08,

13:05:58

Uc

Nếu ta viết bằng ngôn ngữ SQL-92 thì câu lệnh chèn sẽ được viết dưới dạng sau:

INSERT INTO NV_TT

VALUES (TEN MỚI, MANV MỚI, LUONG MỚI, MAPB, THỜI GIAN HỢP LỆ, UC)

2.5.2. Gán nhãn thời gian giao tác cho giao tác cập nhật

Khi chúng ta tiến hành cập nhật thông tin dữ liệu thì các mốc thời gian giao tác sẽ được cập nhật lại cụ thể như sau:

- TST của bộ dữ liệu mới sẽ có giá trị chính là mốc thời gian khi thực hiện giao tác cập nhật.

- TET của bộ dữ liệu mới sẽ có giá trị là uc.

- TET của bộ dữ liệu cũ sẽ có giá trị là thời gian hiện thời của hệ thống khi giao tác cập nhật được thực hiện.

Ví dụ 2.3. Xét quan hệ NV-TT có bộ dữ liệu như trong bảng 2.4.

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”. Quá trình cập nhật này sẽ diễn ra như sau:

- Ta gọi bộ dữ liệu hiện thời của nhân viên “An” là v1. Trước khi cập nhật lương mới cho nhân viên “An” từ 25000 lên 30000 thì chỉ có bộ v1 là ở trong NV_TT và nó là bản hiện thời với giá trị ở TET là uc. Sau đó một giao tác T có mốc thời gian TS(T) là “1998/06/04; 08:56:12” cập nhật lương thành 30000.

- Khi cập nhật, bộ dữ liệu v2 sẽ được tạo ra là bản sao của bộ v1với giá trị lương mới là 30000 và có giá trị thời gian bắt đầu giao tác TST là mốc thời gian của giao tác cập nhật “1998/06/04, 08:56:12” và giá trị thời gian kết thúc giao tác TET là vẫn là uc. Bởi vì tại thời điểm này, bộ dữ liệu v2 là bộ dữ liệu hiện thời mang giá trị đúng.

- Đồng thời giá trị TET của bộ dữ liệu v1 lúc này cũng bị thay đổi thành mốc thời gian của giao tác cập nhật là “1998/06/04; 08:56:12”

Bảng 2.7. Bảng kết quả cập nhật lương cho nhân viên An

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

Với thao tác cập nhật này, chúng ta có thể viết câu lệnh thời gian như sau:

--on 1998-06-04, 08:56:12:

UPDATE NV_TT SET LUONG =30000 WHERE TEN=’An’;

COMMIT;

2.5.3. Gán nhãn thời gian giao tác cho giao tác xóa

Việc xóa một bộ dữ liệu sẽ được ánh xạ thành việc cập nhật thuộc tính TST của bộ thành giá trị tạm thời. Một bộ dữ liệu đủ điều kiện để xóa nếu có đủ predicate và là hiện hành tức TET của bộ dữ liệu là uc.

Câu lệnh thời gian:

DELETE FROM Emp WHERE Predicate

Tương ứng với câu lệnh SQL-92 như sau:

UPDATE Emp SET T-Stop = temporary value WHERE Predicate AND T-Stop = until changed

Trong một CSDL thời gian giao tác, người sử dụng có thể xem lại các trạng thái CSDL thực tế tại một thời điểm t đã qua nào đó bằng cách truy xuất tất cả các bộ phiên bản v có thời gian giao tác [v.TST, v.TET] có chứa thời điểm t.

2.6. Tiểu kết chương 2

Chương 2 của luận văn đã đi tìm hiểu chi tiết về cách thức gán nhãn thời gian giao tác trên CSDL bằng kỹ thuật gán nhãn thời gian trên từng bộ dữ liệu. Luận văn cũng đã trình bày được cách thức liên kết định danh giao tác với các bộ dữ liệu và biểu diễn giá trị uc trong CSDL thời gian giao tác. Bên cạnh việc trình bày về mặt lý thuyết, luận văn còn đưa ra những ví dụ minh họa cụ thể để mọi người có thể dễ hình dung và có cái nhìn sâu hơn về thời gian giao tác và cách thức gán nhãn thời gian giao tác trên CSDL.

Như vậy trong chương 2 của luận văn đã giải quyết được vấn đề đặt ra ở chương 1. Vậy còn vấn đề về cách thức gán nhãn thời gian hợp lệ trên CSDL và gán nhãn thời gian trên CSDL theo 2 loại thời gian sẽ diễn ra như thế nào, có tương tự như cách thức gán nhãn thời gian giao tác hay không?

Để giải quyết vấn đề này, trong chương 3 của luận văn sẽ đi tìm hiểu về thời gian hợp lệ và cách thức gán nhãn thời gian lên CSDL theo 2 loại thời gian. Thêm vào đó, luận văn sẽ trình bày 1 bài toán ứng dụng cụ thể để mọi người có cái nhìn khái quát hơn về CSDL thời gian và cách thức gán nhãn thời gian cũng như truy vấn dữ liệu trên CSDL thời gian.

Chương 3

GÁN NHÃN THỜI GIAN HỢP LỆ TRÊN CƠ SỞ DỮ LIỆU

3.1. Giới thiệu

Như chúng ta đã biết, trong CSDL thời gian có 2 loại thời gian là thời gian hợp lệ và thời gian giao tác. Ở chương 2 của luận văn đã trình bày được phương thức gán nhãn thời gian giao tác trên CSDL bằng cách thêm vào các thuộc tính thời gian bắt đầu giao tác TST và thời gian kết thúc giao tác TET có kiểu dữ liệu là Timestamp. Nhưng còn thời gian hợp lệ thì việc gán nhãn sẽ diễn ra như thế nào?.

Để làm rõ vấn đề này, trong chương 3 của luận văn sẽ trình bày một cách chi tiết về cách thức gán nhãn thời gian hợp lệ trên CSDL với những ví dụ minh họa cụ thể. Đồng thời, trong chương 3 này cũng sẽ trình bày thêm cách thức gán cả 2 loại thời gian trên CSDL để chúng ta có cách nhìn khái quát hơn về cách thức gán nhãn thời gian trên từng loại CSDL thời gian mà chúng ta đã tìm hiểu tại chương 1.

Trong chương này, luận văn sẽ trình bày những nội dung như sau: - Xử lý các giá trị Now

- Xử lý các giá trị Current_Date - Xử lý các giá trị Nobind Now

- Gán nhãn thời gian cho các bảng dữ liệu theo hai loại thời gian

- Ứng dụng cụ thể cho bài toán có gán nhãn thời gian trên cơ sở dữ liệu

3.2. Xử lý các giá trị Now

Như chúng ta đã tìm hiểu trong chương 1, thời gian hợp lệ của 1 sự việc là tất cả các khoảng thời gian mà sự việc xảy ra hay suốt quãng thời gian mà sự việc được coi là đúng trong thực tế. Để chuyển CSDL không có yếu tố thời gian

sang CSDL thời gian hợp lệ ta sẽ thêm vào 2 thuộc tính thời gian là thời gian bắt đầu hợp lệ VST và thời gian kết thúc hợp lệ VET. Bây giờ chúng ta cùng xem xét ví dụ 3.1 sau đây:

Ví dụ 3.1. Xét quan hệ NV-VT có yếu tố thời gian hợp lệ mà chúng ta đã tìm hiểu ở mục 1.3.1.

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 27)

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

(68 trang)