Một hệ quản trị CSDL có yếu tố thời gian sẽ quản lý những dữ liệu tham chiếu tới thời gian Time-referenced data, do đó các yếu tố thời gian gắn liền với các thực thể trong CSDL.. UCHƯƠN
Trang 1MỤC LỤC
HTDANH MỤC CÁC BẢNG VÀ HÌNH VẼ 3TH
TUMỞ ĐẦUU T 4
TUCHƯƠNG 1: TỔNG QUAN VỀ CSDL VÀ CSDL THỜI GIANUT 6
TU1.1- GIỚI THIỆUUT 6
TU1.2 NHẮC LẠI MỘT SỐ KHÁI NIỆM TRONG CSDL QUAN HỆ:UT 7
TU1.3- CƠ SỞ DỮ LIỆU CÓ YẾU TỐ THỜI GIANUT 9
TU1.3.1- Dữ liệu thời gian và một số khái niệm cơ bản:UT 9
TU1.3.2- Khái niệm về Thời gian hợp thức và Thời gian giao dịch:UT 11
TU1.3.3- Các vấn đề về thời gian hoá:UT 14
TU1.3.3.1 - Bán thời gian hoá:UT 15
TU1.3.3.1.1 - Các ràng buộc:UT 17
TU1.3.3.1.2 - Truy vấnUT 17
TU1.3.3.2 -Thời gian hóa toàn phần:UT 18
TU1.3.3.2.1 – Ràng buộcUT 21
TU1.3.3.2.2 – Truy vấn:UT 23
TU1.4- BIỂU DIỄN YẾU TỐ THỜI GIAN TRONG CSDL THỜI GIAN.UT 24
TU1.4.1- Khoảng thời gianUT 24
TU1.4.2- Các kiểu khoảng:UT 26
TU1.4.2- Toán tử vô hướng trên khoảng:UT 29
TU1.4.3- Các toán tử gộp nhập trên khoảngUT 31
TU1.4.5- Ràng buộc trên các khoảngUT 41
TU1.4.6- Toán tử Update trên khoảng:UT 46
TUCHƯƠNG 2: THIẾT KẾ CƠ SỞ DỮ LIỆU THỜI GIANUT 48
TU2.1- QUÁ TRÌNH THIẾT KẾUT 49
TU2.1.1- Dư thừa dữ liệu và các dị thường cập nhậtUT 51
TU2.1.2- Chiều thời gian của thiết kế logicUT 52
TU2.2 KIỂU VÀ MODUL THỜI GIAN:UT 54
Trang 2TU2.2.1- Kiểu thời gian:UT 54
TU2.2.2 - Module thời gian:UT 57
TU2.3 PHỤ THUỘC HÀM THỜI GIAN:UT 59
TU2.3.1 - Các tiên đề suy diễn cho TFDs:UT 61
TU2.3.2 - Bao đóng của một tập các thuộc tính:UT 68
TU2.4 CHUẨN HOÁ THỜI GIAN:UT 70
TU2.5 DẠNG CHUẨN BOYCE-CODD CÓ YẾU TỐ THỜI GIAN.UT 79
TU2.5.1 Tách các lƣợc đồ module thời gian về dạng TBCNF:UT 80
TU2.6 BẢO TOÀN PHỤ THUỘC:UT 86
TU2.7 DẠNG CHUẨN BA CÓ YẾU TỐ THỜI GIANUT 88
TU2.7.1 Tách lƣợc đồ module thời gian về dạng T3NF:UT 89
TUCHƯƠNG 3:UT TUNGÔN NGỮ TRUY VẤN TSQL2UT 96
TU3.1- GIỚI THIỆUUT 96
TU3.2- MỘT SỐ TÍNH NĂNG CẦN THIẾT CỦA NGÔN NGỮ TSQL2:UT 97
TU3.3- MỘT SỐ ĐẶC TẢ VỀ SỰ MỞ RỘNG CỦA TSQL2:UT 99
TU3.4-VÍ DỤ MINH HOẠ.UT 102
TU3.4.1 - Lƣợc đồ cho CSDL thử nghiệm.UT 102
TU3.4.2 - Lƣợc đồ trong TSQL2UT 104
TU3.4.3 - Cập nhật dữ liệu thử nghiệm.U T 106
TU3.4.4 - Một số truy vấn:UT 110
TUMỘT SỐ HƯỚNG NGHIÊN CỨU TIẾP THEOUT 113
TUKẾT LUẬNUT 117
TUTÀI LIỆU THAM KHẢOUT 118
Trang 3DANH MỤC CÁC BẢNG VÀ HÌNH VẼ
TUCHƯƠNG 1: TỔNG QUAN VỀ CSDL VÀ CSDL THỜI GIANUT 6
TUBảng 1.1 CSDL Nhà cung cấp & Mặt hàng (Phiên bản dạng ảnh hiện tại)UT 9
TUBảng 1.2 CSDL Nhà cung cấp & Mặt hàng (Phiên bản bán thời gian hoá với các giá trị đơn giản)UT 15
TUBảng 1.3 CSDL Nhà cung cấp & Mặt hàng (Phiên bản thời gian hoá toàn phần thứ nhất, Sử dụng các nhãn thời gian)UT 19
TUBảng 1.4 CSDL Nhà cung cấp & Mặt hàng (Phiên bản thời gian hoá toàn phần sau cùng , Sử dụng các khoảng)UT 25
TUCHƯƠNG 2: THIẾT KẾ CƠ SỞ DỮ LIỆU THỜI GIANUT 48
TUHình 2.1 Quá trình thiết kế một CSDLUT 50
TUHình 2.2: Ví dụ về quan hệ các khóa học.UT 52
TUHình 2.3 Phép tách tự nhiên.UT 53
TUHình 2.4: Thuật toán tìm UTX TPU + U PU.UT 69
TUHình 2.5: Thuật toán tách về dạng chuẩn TBCNF.UT 82
TUHình 2.6 Hàm RaiseUT 87
TUHình 2.7 Thuật toán tách về dạng chuẩn T3NF.UT 93
TUCHƯƠNG 3:UT TUNGÔN NGỮ TRUY VẤN TSQL2UT 96
TUBảng 3.1 - Nhanvien_TblUT 109
TUBảng 3.2 - Kynang_TblUT 109
TUBảng 3.3 - Phong_ban_TblUT 110
Trang 4MỞ ĐẦU
Hầu hết các ứng dụng kỹ thuật về cơ sở dữ liệu (CSDL) trong tự nhiên đều mang yếu tố thời gian Ví dụ: các ứng dụng về tài chính như: quản lý đầu tư, kế toán, ngân hàng; các ứng dụng lưu trữ hồ sơ như: quản lý nhân sự, hồ sơ bệnh án, quản lý kiểm kê, kiểm toán; các ứng dụng về lập lịch trong ngành đường sắt, hàng không, đặt chỗ khách sạn; các ứng dụng khoa học như: dự báo thời tiết, thảm hoạ tự nhiên…v.v Tất cả những ứng dụng đó đều dựa trên những CSDL ghi lại dữ liệu tham chiếu tới thời gian và được gọi là “CSDL có yếu tố thời gian” hay “CSDL thời
gian” (Temporal Database)
Với những ứng dụng rộng rãi trong mọi lĩnh vực đời sống, quản trị CSDL thời gian được xem là một lĩnh vực nghiên cứu đầy sức lôi cuốn, đã có hàng trăm nhà nghiên cứu với trên 2000 bài viết về vấn đề này trong suốt 2 thập kỷ qua Việc xây dựng và ứng dụng một CSDL có yếu tố thời gian thành công mang một ý nghĩa rất quan trọng trong thực tiễn Một CSDL thời gian phải phản ánh hay biểu diễn được một cách chân thực nhất, chính xác nhất về dữ liệu tại mọi thời điểm Một hệ quản trị CSDL có yếu tố thời gian sẽ quản lý những dữ liệu tham chiếu tới thời gian
(Time-referenced data), do đó các yếu tố thời gian gắn liền với các thực thể trong
CSDL
Nói một cách không chặt chẽ, cơ sở dữ liệu (CSDL) thời gian là một CSDL bao gồm dữ liệu mang tính lịch sử thay vì dữ liệu hiện tại Một vài trong số những nghiên cứu này đã thừa nhận một quan điểm cực đoan là dữ liệu trong một CSDL
đó chỉ được chèn (Insert), không bao giờ xoá (Delete) hoặc được cập nhật (Update),
trong trường hợp đó CSDL chỉ bao gồm dữ liệu mang tính lịch sử Ở một thái cực khác là một CSDL dạng ảnh, chỉ bao gồm dữ liệu hiện tại và dữ liệu đã được xóa hoặc cập nhật khi các sự kiện biểu diễn bởi dữ liệu không còn đúng (hay nói cách khác, một CSDL dạng ảnh chỉ là một CSDL như cách hiểu thông thường, chứ không phải là CSDL biểu thị thời gian)
Trang 5Trong quá trình lưu trữ và thao tác trên CSDL thì giá trị của một số thuộc tính ổn định theo thời gian, nhưng với một số thuộc tính khác thì giá trị của chúng lại thay đổi theo thời gian Luận văn này nghiên cứu, hệ thống lại khái niệm về mô hình dữ liệu quan hệ có yếu tố thời gian kéo theo các phép toán đại số, mở rộng các phụ thuộc hàm và các dạng chuẩn có yếu tố thời gian
Trong thực tế, chúng ta sẽ gặp phải rất nhiều khó khăn khi quản trị CSDL thời gian bằng những mô hình dữ liệu và các ngôn ngữ truy vấn thông thường (không mang yếu tố thời gian) Từ những khái niệm cơ sở về CSDL thời gian, luận văn tập trung vào nghiên cứu và trình bày cách giải quyết một số vấn đề liên quan như:
Biểu diễn yếu tố thời gian trong CSDL
Xây dựng những mô hình CSDL thời gian, thêm yếu tố thời gian vào ngôn ngữ truy vấn và chuẩn hoá các lệnh truy vấn
Thiết kế CSDL thời gian ở mức Logic và Khái niệm
Xử lý các câu lệnh truy vấn, các toán tử đại số, các chỉ mục (index) trên
CSDL thời gian
Bản luận văn được chia thành bốn phần Phần thứ nhất nhắc lại một số khái niệm cơ bản về CSDL quan hệ, tiếp theo đó tập trung vào giới thiệu những nét tổng quan về CSDL thời gian, những thuật ngữ cũng như những cơ sở để tiếp cận với CSDL thời gian Trong phần thứ hai, luận văn đi sâu vào việc nghiên cứu cách xây dựng, thiết kế những CSDL có yếu tố thời gian, những vấn đề liên quan đến phụ thuộc hàm thời gian, các dạng chuẩn thời gian và những thuật toán tách lược đồ module thời gian về các dạng chuẩn Để có những minh hoạ rõ nét và cụ thể hơn về CSDL thời gian, phần ba sẽ giới thiệu ngắn ngọn về ngôn ngữ truy vấn thời gian (TSQL2) thông qua một ví dụ cụ thể Phần cuối của luận văn là phần nhận xét, kết luận và một số hướng nghiên cứu tiếp theo
Trang 6UCHƯƠNG 1U: TỔNG QUAN VỀ CSDL VÀ CSDL THỜI GIAN 1.1- GIỚI THIỆU
Một CSDL là một tập hợp các dữ liệu có liên quan với nhau chứa thông tin
về một tổ chức nào đó (như một trường đại học, một ngân hàng, một công ty, hay một nhà máy…), được lưu trữ trên các thiết bị nhớ thứ cấp (như đĩa từ, đĩa quang học…) để đáp ứng nhu cầu khai thác thông tin của nhiều người sử dụng với nhiều mục đích khác nhau Do đó, trước hết CSDL phản ánh được thông tin về hoạt động của một tổ chức nhất định, nghĩa là biểu thị một “góc” của thế giới thực (tạm gọi là một thế giới nhỏ) Như vậy CSDL cũng phải phản ánh được một cách trung thực sự thay đổi của thế giới nhỏ đó, nó phải tập hợp thông tin mang tính hệ thống chứ không thể là một tập hợp dữ liệu tuỳ tiện chứa những thông tin rời rạc không có mối quan hệ với nhau Thông tin lưu trữ trong CSDL được chia sẻ cho nhiều người sử dụng hay cho nhiều ứng dụng khác nhau Từ đó cho thấy việc thiết kế, xây dựng một CSDL phản ánh thế giới nhỏ đó một cách khách quan, chân thực và chính xác
đã trở thành một nhu cầu tất yếu Từ những năm 80 của thế kỷ hai mươi, các hệ CSDL dựa trên mô hình quan hệ được sử dụng một cách rộng rãi bởi tính đơn giản
và các cơ sở toán học của nó Tuy nhiên cũng giống như những các hệ CSDL thông thường, CSDL quan hệ cũng chỉ biểu thị được những dữ liệu ở dạng tĩnh (dạng ảnh) với mỗi sự kiện của thực thể tương ứng
Trong một CSDL dạng ảnh, yếu tố thời gian của bức ảnh thông thường được xem là thời điểm hiện tại (nghĩa là thời gian khi mà CSDL thực sự được xem xét Ngay cả khi yếu tố thời gian của CSDL dạng ảnh đôi khi diễn ra khác với “hiện tại”, điều đó không tạo ra sự khác biệt nào đáng kể đến cách quản lý và sử dụng dữ liệu Tuy nhiên, như chúng ta sẽ thấy dữ liệu trong một CSDL thời gian được quản lý và
sử dụng rất khác trong hàng loạt phương diện quan trọng so với cách nó được quản
lý và sử dụng trong một CSDL dạng ảnh; điều này được xem là phần quan trọng nhất và sẽ được trình bày cụ thể sau phần nhắc lại một số những khái niệm cơ bản
về CSDL quan hệ
Trang 71.2 NHẮC LẠI MỘT SỐ KHÁI NIỆM TRONG CSDL QUAN HỆ:
Mô hình quan hệ biểu thị dữ liệu trong một CSDL như là một bảng giá trị gồm các hàng và các cột Mỗi hàng trong bảng là một tập các giá trị có liên quan đến nhau, các giá trị này biểu thị một sự kiện tương ứng với một thực thể hay một mối quan hệ trong thế giới thực [1]
Miền (Domain): Một miền D là một tập hợp các giá trị nguyên tố, hiểu theo
nghĩa mỗi giá trị trong miền không thể phân chia trong phạm vi mô hình quan hệ
Quan hệ (Relation): Một quan hệ trên một tập các thuộc tính là một tập con
của tích Đềcác của một hay nhiều miền:
Cho một quan hệ r xác định trên tập thuộc tính Ω = {AB 1 B, AB 2 B,…,AB n B} Khi đó
r ⊆ Dom(AB 1 B) × Dom(AB 2 B) × … × Dom(AB n B), trong đó Dom(AB i B) là miền của
thuộc tính AB i B, là tập các giá trị có thể của nó
Lược đồ quan hệ (Relation schema): Một lược đồ quan hệ R là một cặp có
thứ tự R = <Ω, F>, trong đó Ω là tập hữu hạn các thuộc tính của quan hệ, F
là tập các điều kiện giữa các thuộc tính (F còn gọi là tập các ràng buộc toàn
vẹn)
Siêu khoá của một lược đồ quan hệ R là một tập hợp gồm một hay nhiều
thuộc tính của lược đồ R có tính chất xác định duy nhất một bộ trong mỗi thể hiện của R
Khoá của một lược đồ quan hệ là một siêu khoá của lược đồ này sao cho mọi
tập con thực sự của nó không là một siêu khoá
Khoá ngoài của một lược đồ quan hệ là tập hợp gồm một hay nhiều thuộc
tính là khoá của một lược đồ quan hệ khác
Phụ thuộc hàm: Cho U là một tập thuộc tính và R(U) là một lược đồ quan
hệ trên U Giả sử X, Y ⊆U Khi đó, Y được gọi là phụ thuộc hàm vào X trên lược đồ R(U), ký hiệu là X Y, nếu với mọi quan hệ r trên lược đồ R(U), với hai bộ bất kỳ tB 1 B, tB 2 B ∈ r, mà tB 1 B[X] = tB 2 B[X] thì tB 1 B[Y] = tB 2 B[Y]
Trang 8 Bao đóng: Ta gọi bao đóng của tập hợp phụ thuộc hàm F là tập các phụ
thuộc hàm đƣợc suy diễn logic từ F và ký thiệu nó là F* Hay nói một cách hình thức: F*= { X Y | F ⊨ (X Y) }
Khoá: Giả sử U là một tập thuộc tính, R là một lƣợc đồ quan hệ trên U thỏa
một tập phụ thuộc hàm F, K là một tập con của U Ta nói K là một khoá của
R nếu:
o (K U) ∈ F*, nghĩa là với mọi quan hệ r của lƣợc đồ R, hai bộ bất
kỳ của r bằng nhau trên K thì bằng nhau (r ∈ R) (tB 1 B, tB 2 B ∈ r)
tB 1 B[K] = tB 2 B[K] tB 1 B = tB 2 B
o Nếu K‟ là tập con thực sự của K thì (K‟ U) ∉ F*
Hệ tiên đề suy diễn Armstrong:
o Phản xạ: Nếu Y ⊆ X thì X Y
o Gia tăng: Nếu X Y thì với mọi Z ⊆ U : XZ YZ
o Bắc cầu: Nếu X Y và Y Z thì X Z
Phép tách với kết nối không mất thông tin: Phép tách R thành {RB 1 B,
RB 2 B, ,RB 3 B} đƣợc gọi là tách không mất thông tin đối với tập phụ thuộc hàm F, nếu với mỗi quan hệ r trên R thoả mãn F, ta đều có r = rB 1 B* rB 2 B* * rB k B, trong
đó rB i B = UB i B (r) (rB i B là kết quả của phép chiếu r trên UB i B)
Dạng chuẩn 3NF: Lƣợc đồ quan hệ R đƣợc gọi là thuộc dạng chuẩn ba
(3NF) nếu nó thuộc dạng chuẩn thứ nhất và với mọi X A đúng trên R thì
hoặc X phải là siêu khoá hoặc A phải là thuộc tính khoá
Dạng chuẩn BCNF: Lƣợc đồ quan hệ R chuẩn hóa với tập phụ thuộc hàm F
đƣợc gọi là thuộc dạng chuẩn BCNF nếu có X A đúng trên lƣợc đồ R và A
∉ X thì X chứa một khoá của R (nói cách khác, X là siêu khoá)
Trang 91.3- CƠ SỞ DỮ LIỆU CÓ YẾU TỐ THỜI GIAN
1.3.1- Dữ liệu thời gian và một số khái niệm cơ bản:
Trước khi bắt đầu xem xét tới các mô hình dữ liệu thời gian và những ngôn ngữ truy vấn, chúng ta sẽ nghiên cứu những khái niệm độc lập với mô hình dữ liệu,
sự gắn kết của yếu tố thời gian với các sự kiện, đó là vấn đề cốt lõi của quản lý dữ liệu thời gian Trong chương này chúng ta sẽ sử dụng một CSDL đơn giản về “Nhà cung cấp & Mặt hàng” để giải thích và minh hoạ những vấn đề liên quan đến CSDL thời gian
Bảng 1.1 CSDL Nhà cung cấp & Mặt hàng (Phiên bản dạng ảnh hiện tại)
(Các thuộc tính là khoá chính trong các ví dụ được in đậm và Ugạch chânU)
Trang 10UChú ý:U mỗi bộ trong bảng S thể nhiện: “Nhà cung cấp có số hiệu S#, có tên
là TENCONGTY, có tình trạng là TRANGTHAI và có trụ sở tại địa chỉ là DIACHI”; mỗi bộ trong bảng SP minh hoạ nhà cung cấp S# hiện tại có khả năng cung ứng mặt hàng P#
Tất nhiên CSDL này là một CSDL dạng ảnh, và nó chỉ ra rằng trong số các nhà cung cấp thì giá trị trạng thái hiện tại của S1 là 20 Một cách tương phản, phiên bản mang yếu tố thời gian của CSDL đó có thể chỉ ra không chỉ giá trị trạng thái hiện tại là 20, mà nó còn chỉ ra rằng giá trị này được thiết lập từ ngày 1 tháng 7 và
có thể giá trị đó là 15 từ ngày 5-04 đến 30-06 v.v
Hiển nhiên, đặc điểm nổi bật của CSDL thời gian là chính yếu tố thời gian
Do đó trong số các nghiên cứu về CSDL thời gian có nhiều khảo cứu về chính bản chất của thời gian và một vài vấn đề sau đã được nghiên cứu thấu đáo:
Liệu thời gian có điểm đầu cũng như điểm kết thúc?
Thời gian là liên tục hay xuất hiện theo những lượng rời rạc?
Việc mô tả khái niệm quan trọng: “hiện tại” (now) tốt đến mức nào?
Những vấn đề này tuy rất thú vị nhưng không đơn thuần thuộc về khía cạnh CSDL, và do vậy chúng ta sẽ không đi sâu vào xem xét trong chương này Thay vào
đó, ta đưa ra các giả định hợp lý tại những chỗ thích hợp Cách tiếp cận này cho phép ta tiếp cận mục đích ban đầu một cách trực tiếp hơn Tuy nhiên ta cũng chú ý rằng, các nghiên cứu về thời gian dẫn tới một số kết luận thú vị, nêu lên ý tưởng phát triển dữ liệu thời gian cũng có thể có các ứng dụng trong nhiều lĩnh vực khác Xuyên suốt chương này, ta vẫn sử dụng khóa thời gian, toán tử thời gian, quan hệ thời gian, mặc dù các khái niệm này không giới hạn chỉ trong dữ liệu thời gian Sau đây ta chỉ tập trung vào những vấn đề chúng ta quan tâm và quan trọng nhất của rất nhiều ý tưởng nghiên cứu (nói cách khác, trong chương này chúng ta sẽ chắt lọc những phần hay (chất lượng) của các nghiên cứu thông qua các vấn đề về các thuật ngữ và những vấn đề nhỏ khác)
Dữ liệu thời gian [2]: (Temporal data) Nếu dữ liệu là một cách biểu diễn mã hóa của các sự kiện, thì dữ liệu thời gian là biểu diễn mã hoá của các sự kiện
Trang 11có nhãn thời gian (timestamps) Trong một CSDL thời gian, theo cách giải
thích cực đoan của thuật ngữ này, tất cả dữ liệu đều mang tính thời gian, nghĩa là mọi bản ghi thực tế là các nhãn thời gian
Quan hệ thời gian: (Temporal relation) Một quan hệ thời gian là một quan
hệ mà trong mỗi bộ dữ liệu bao gồm ít nhất một nhãn thời gian (nghĩa là phần mô tả bao gồm tối thiểu một thuộc tính có kiểu nhãn thời gian)
Biến quan hệ thời gian: (Temporal relvarP
1
P) là một quan hệ mà phần mô tả của nó là mô tả một quan hệ mang tính thời gian
CSDL thời gian: là một CSDL mà trong đó mọi biến quan hệ đều là thời gian CSDL thời gian quản lý những dữ liệu tham chiếu tới thời gian, do đó các yếu tố thời gian gắn liền với những thực thể trong CSDL
1.3.2- Khái niệm về Thời gian hợp thức và Thời gian giao dịch:
Những nghiên cứu trong thập kỷ trước về CSDL thời gian chỉ ra một vấn đề
hóc búa Dữ liệu thay đổi theo thời gian (Time-varying data) được xem là rất đơn
giản: nó có thể có nhiều hơn một giá trị, mỗi giá trị ứng với mỗi khoảng thời gian, nhưng việc thiết kế một mô hình dữ liệu thời gian đúng là vô cùng phức tạp Đã có rất nhiều mô hình dữ liệu thời gian, tính tới nay đã có khoảng trên 40 mô hình được trình bày trong những tài liệu, và chắc chắn sẽ còn nhiều hơn thế Do vậy chúng ta
sẽ làm thế nào để nắm được bản chất của dữ liệu thời gian
Các học giả đã từ lâu công nhận sự lưỡng phân (dichotomy) và tính đối ngẫu (duality) giữa những sự kiện (events) và trạng thái (states) Một trạng thái là cái gì
đó mà nó đúng (true) về một đối tượng trong một khoảng thời gian, nhưng không
đúng trong các khoảng thời gian trước đó và sau đó Một sự kiện được xem là một
điều gì đó “xảy ra” (happen) Các sự kiện phân định các trạng thái
Với ví dụ Bảng 1.1 ở trên, ta sẽ xem xét một số cách diễn đạt tự nhiên liên
quan đến nhãn thời gian như sau:
Trang 121 Nhà cung cấp S1 được chọn (nghĩa là được ký kết hợp đồng) vào ngày
Phát biểu 1 khẳng định rõ ràng rằng S1 không trở thành nhà cung cấp trước ngày 01/07/1999, tức là ngày 30/06/1999 chẳng hạn, trong khi phát biểu 2 không nói
gì về sự kiện đó cũng như không suy ra sự kiện đó
Giả sử rằng hôm nay là 25/09/2000, phát biểu 2 nói rằng S1 là nhà cung cấp trong mọi ngày từ 01/07/1999 tới 25/09/2000, trong khi phát biểu 1 không nói gì
về sự kiện đó cũng như không suy ra sự kiện đó
Do đó, phát biểu 1 và 2 là không tương đương nhau, và không phát biểu nào suy ra được phát biểu kia
Điều đó nghĩa là, các bộ dữ liệu trong các CSDL dạng ảnh thường bao gồm những yếu tố như ngày tháng của một thời điểm, và các phát biển như phát biểu 2 hoặc 3 thường là dành cho việc giải thích Nếu là trường hợp này thì phát biểu 1 ở dạng hiện tại của nó là không lý giải chính xác, đầy đủ về bộ dữ liệu đang xét
Chúng ta có thể làm chính xác hơn bằng cách phát biểu lại nó như sau: Nhà cung cấp S1 đã hầu như được chọn ký hợp đồng vào 01-07-1999 Điều gì thêm vào
đó, nếu phiên bản này của phát biểu 1 thực sự là điều giả thiết của chúng ta về bộ
Trang 13hai giá trị được giả sử mang ý nghĩa Do đó phát biểu 2 ở dạng hiện tại của nó cũng không được hiểu một cách hoàn toàn chính xác – nó cần phải được phát biểu lại như sau: “Nhà cung cấp S1 không phải là nhà cung cấp chính thức vào ngày
30-06-1999, mà chỉ bắt đầu từ ngày 01-07-1999.”
Nhận thấy rằng phát biểu 1 diễn tả một thời điểm mà một sự kiện nào đó xảy
ra trong khi phát biểu 2 và 3 diễn tả trong một khoảng thời gian trong đó một trạng thái xác định tiếp tục tồn tại Chúng ta đã cân nhắc thận trọng lựa chọn một ví dụ, trong đó một trạng thái xác định có thể được suy diễn ra từ thông tin về một sự kiện nhất định: Kể từ khi S1 được lựa chọn chính thức lần gần nhất vào 01-07-1999, nhà
cung cấp đó đã có trạng thái là đang ký hợp đồng kể từ ngày đó đến ngày hiện tại
Thực tế cho thấy những kỹ thuật CSDL cũ quản lý các thời điểm xảy ra sự kiện khá tốt, tuy nhiên chúng không quản lý tốt các khoảng thời gian
Điều tiếp theo nhận thấy rằng, mặc dù phát biểu 2 và 3 là tương đương về mặt lôgic, nhưng dạng thức của chúng lại khác nhau đáng kể Cụ thể là dạng của
phát biểu 2 không thể sử dụng để ghi lại sự kiện của quá khứ (bởi vì “từ” hàm ý đến
hiện tại), trong khi dạng của phát biểu 3 lại có thể- với điều kiện là chúng ta thay thế
cụm từ “ngày hiện tại” trong câu đó bởi một ngày chính xác nào đó như
25-09-2000 (Tất nhiên, câu đó sẽ tương ứng với một bộ ba chứ không phải bộ hai) Ta kết
luận rằng: khái niệm “trong khoảng” là rất quan trọng với những bản ghi mang tính
lịch sử, ít nhất là với dữ liệu trạng thái nếu không phải là với dữ liệu sự kiện
Có hai loại thời gian trong CSDL thời gian và việc hiểu chính xác được khái niệm của hai loại thời gian này là vấn đề rất quan trọng
Thuật ngữ [2]:
Thời gian hợp thức (Valid time): Những thời điểm mà tại đó một sự kiện nào đó xảy ra hoặc các khoảng thời gian trong đó tồn tại một trạng
thái xác định được gọi là thời gian hợp thức Chính xác hơn là thời gian
hợp thức của một mệnh đề p là tập các thời điểm tại đó p được tin là
true
Trang 14 Thời gian giao dịch (Transaction time): là một tập các thời điểm mà tại
đó p đã được thực sự biểu diễn là true trong CSDL
- Thời gian hợp thức có thể được cập nhật để phản ánh những niềm tin thay
đổi, nhưng thời gian giao dịch thì không thể; đó là do thời gian giao dịch được quản
lý hoàn toàn bởi hệ thống, và không có người dùng nào được phép thay đổi chúng bằng bất kỳ cách nào (điển hình là đương nhiên chúng được ghi lại, ẩn hoặc tường
minh, trong nhật ký giao dịch (transaction log))
- Mặc dù mọi sự kiện đều có một thời gian hợp thức nhưng thời gian hợp
thức của một sự kiện có thể không nhất thiết dược ghi lại trong CSDL (có thể do
không nhận ra hoặc không liên quan đến ứng dụng)
- Thời gian giao dịch có thể được gắn với bất kỳ thực thể nào trong CSDL
chứ không phải chỉ gắn với các sự kiện Cho dù mọi thực thể đều có thể được gán
cho một thời gian giao dịch nhưng người thiết kế CSDL có thể thiết kế chỉ cho một
số các thực thể cần thiết Khía cạnh thời gian giao dịch của một thực thể CSDL có khoảng thời gian tồn tại từ phép chèn (insertion) cho đến phép xoá (detetion), và do ngữ nghĩa của thời gian giao dịch phép xoá là xoá về lôgic chứ không phải là xoá
vật lý, mà chỉ thôi không còn là một phần trạng thái hiện tại của CSDL
1.3.3- Các vấn đề về thời gian hoá:
Bây giờ ta tiếp tục thảo luận về một số ràng buộc đơn giản và truy vấn cho
CSDL về Nhà cung cấp & Mặt hàng trong Bảng 1.1, tiếp theo ta sẽ xem xét điều gì
sẽ xảy ra với những ràng buộc và truy vấn khi CSDL được mở rộng để bao gồm những yếu tố đặc trưng thời gian khác nhau
Ràng buộc (CSDL dạng ảnh hiện tại): Các ràng buộc mà chúng ta xem xét ở đây
là các ràng buộc về khóa (key constraints) Thuộc tính in đậm và gạch chân
trong Bảng 1.1 được sử dụng để biểu diễn rằng {S#} và {S#,P#} theo thứ tự
là khóa chính của S và SP {S#} là một khóa ngoài trong SP tham chiếu tới khóa chính của S {P#} trong SP có thể là một khoá ngoài tham chiếu tới khoá
Trang 15chính của một biến quan hệ “mặt hàng”, P, nhưng chúng ta không muốn dùng biến quan hệ đó trong ví dụ đơn giản này
Truy vấn (ảnh hiện tại): Ta chỉ xem xét 2 truy vấn mà cả 2 đều được thể hiện rất đơn giản:
Truy vấn 1.1: Lọc ra số hiệu của các nhà cung cấp đang cung ứng một loại
hàng nào đó
SP{S#}
Truy vấn 1.2: Lọc ra số hiệu của các nhà cung cấp hiện đang không có khả
năng cung ứng một loại hàng nào:
1.3.3.1 – Bán thời gian hoá:
Để tiến hành một cách thận trọng, bước tiếp theo của chúng ta là thực hiện bán thời gian hoá các biến quan hệ S và SP bằng cách thêm vào một thuộc tính nhãn thời gian, SINCE, với mỗi biến quan hệ S và SP và đổi tên chúng một cách
phù hợp như trong Bảng 1.2 dưới đây :
Bảng 1.2 CSDL Nhà cung cấp & Mặt hàng (Phiên bản bán thời gian hoá với các giá trị đơn giản) S:
US#U TENCONGTY TRANGTHAI DIACHI SINCE
Trang 16Để cho đơn giản, chúng ta sẽ không thể hiện các nhãn thời gian thực trong
Bảng 1.2; thay vào đó ta dùng ký hiệu dưới dạng d01, d02…., trong đó d có thể
theo quy ước đọc là “ngày”, một quy ước được sử dụng trong suốt chương này (Các ví dụ của chúng ta do đó tất cả đều sử dụng các điểm thời gian đặc biệt đó là ngày) Ta giả sử rằng “ngay 01” là ngày ngay trước “ngay 02”, “ngay 02” là ngày ngay trước “ngay 03” và tuần tự như vậy
Tân từ đối với S_SINCE là kể từ ngày SINCE thì nhà cung cấp S# được đặt tên là TENCONGTY, có một trạng thái là TRANGTHAI, và có trụ sở tại thành phố DIACHI đã được ký kết hợp đồng chính thức Tân từ đối với SP_SINCE là kể từ ngày SINCE thì nhà cung cấp S# có khả năng cung cấp mặt hàng P#
Trang 171.3.3.1.1 Các ràng buộc:
Khoá chính và khoá ngoài của cơ sơ dữ liệu bán thời gian hoá này vẫn nguyên như trước Tuy nhiên, chúng ta cần thêm một ràng buộc nữa – có thể được xem như là sự bổ sung cho ràng buộc khoá ngoài từ SP_SINCE tới S_SINCE để biểu thị sự kiện là không có nhà cung cấp nào có thể cung cấp bất kỳ mặt hàng nào trước khi nhà cung cấp đó được ký kết chính thức Hay nói cách khác, nếu bộ sp
trong SP_SINCE tham chiếu tới bộ giá trị s trong S_SINCE, thì giá trị SINCE trong sp không được nhỏ hơn trong s:
CONSTRAINT AUG_SP_TO_S_FK
IS_EMPTY (((S_SINCE RENAME SINCE AS SS) JOIN
(SP_SINCE RENAME SINCE AS SPS)) WHERE SPS < SS); Với ví dụ này chúng ta bắt đầu nhận thấy vấn đề Cho trước một CSDL bán
thời gian như Bảng 1.2, chúng ta sẽ có thể phải phát biểu nhiều ràng buộc “khoá
ngoài được bổ sung” như vậy, và điều ta mong muốn là có được một phương pháp nhanh chóng thuận tiện cho mục tiêu của chúng ta
1.3.3.1.2 Truy vấn
Bây giờ chúng ta sẽ xem xét phiên bản “bán thời gian” của truy vấn 1.1 và 1.2:
Truy vấn 2.1: Lọc ra số hiệu của các nhà cung cấp mà đang cung ứng loại
hàng nào đó, chỉ ra trong mỗi trường hợp ngày nào nhà cung cấp đó có thể cung ứng
Nếu nhà cung cấp Sx hiện tại có thể cung cấp vài mặt hàng, thì Sx có khả năng cung cấp sớm nhất kể từ ngày SINCE chỉ thị cho Sx trong SP_SINCE (ví dụ, nếu Sx là S1, ngày sớm nhất SINCE là d04) Do đó:
SUMMARIZE SP PER SP{S#} ADD MIN (SINCE) AS SINCE
sẽ cho kết quả là:
Trang 18 Truy vấn 2.2: Lọc ra số hiệu của các nhà cung cấp mà hiện không thể cung
ứng bất kỳ loại hàng nào, chỉ ra trong mỗi trường hợp ngày nào nhà cung cấp
đó không thể cung ứng
Trong dữ liệu đơn giản của chúng ta chỉ có một nhà cung cấp hiện không cung cấp được mặt hàng nào đó là S5 Tuy nhiên ta không thể suy được ngày nào S5 được ký hợp đồng nhưng không cung cấp được mặt hàng nào, bởi vì thông tin trong CSDL là không đầy đủ và vẫn chỉ là được bán thời gian hoá Ví dụ giả sử ngày hiện tại là d10: thì S5 đã có thể cung cấp ít nhất một mặt hàng kể từ ngày d02, khi S5 được ký kết ít nhất cho tới ngày d09; hoặc cho tới một thái cực khác,
có thể là S5 chưa từng bao giờ cung ứng mặt hàng nào
Để trả lời cho truy vấn 2.2, ta phải hoàn thiện việc “thời gian hoá” CSDL của chúng ta, hoặc chí ít là phần SP của nó Để cho chính xác hơn, ta phải lưu những bản ghi có tính lịch sử trong CSDL để chỉ ra rằng nhà cung cấp nào là có thể cung ứng mặt hàng nào, khi nào như trong phần tiếp theo đây
1.3.3.2 -Thời gian hóa toàn phần:
Bảng 1.3 mô tả một phiên bản thời gian hoá hoàn toàn về CSDL các Nhà
cung cấp & Mặt hàng mà chúng ta đang nghiên cứu Nhận thấy rằng các thuộc tính SINCE đã trở thành thuộc tính FROM, và mỗi biến quan hệ thời gian có thêm một thuộc tính nhãn thời gian gọi là TO Thuộc tính FROM và TO cùng biểu diễn một khái niệm của một khoảng thời gian mà trong đó một điều gì đó là đúng; do vậy ta
Trang 19thay tên biến quan hệ SINCE bằng FROM_TO Vì hiện tại chúng ta đang lưu trữ các bản ghi mang tính lịch sử, do đó có nhiều bộ dữ liệu trong cở sở dữ liệu hơn là các phiên bản trước Để xác định ta giả sử rằng ngày hiện tại là ngày d10, nên d10 xem như là giá trị TO cho mỗi bộ gắn liền với trạng thái hiện tại của mỗi sự vụ Chú
ý là: Bạn có thể băn khoăn bằng kỹ thuật nào để thay thế toàn bộ những giá trị d10
đó thành d11 vào đúng lúc nửa đêm Chúng ta sẽ tạm đặt vấn đề này sang một bên
và sẽ quay trở lại trong các phần sau
Bảng 1.3 CSDL Nhà cung cấp & Mặt hàng (Phiên bản thời gian hoá toàn phần thứ nhất, Sử dụng các nhãn thời gian)
Trang 20TO (không phải ngày ngay sau TO)” Tân từ đối với SP_FROM_TO là tương tự
Trang 211.3.3.2.1 – Ràng buộc
Trước hết chúng ta tránh trường hợp ngớ ngẩn là thời điểm TO đứng trước thời điểm FROM trong cặp FROM_TO:
CONSTRAINT S_FROM_TO_OK IS_EMPTY (S_FROM_TO WHERE TO < FROM);
CONSTRAINT SP_FROM_TO_OK IS_EMPTY (SP_FROM_TO WHERE TO < FROM);
Tiếp theo ta nhận thấy trong Bảng 1.3 có thêm thuộc tính FROM được gạch
chân mà chúng ta thêm vào trong khoá chính của cả S_FROM_TO và SP_FROM_TO; ví dụ khoá chính của S_FROM_TO hiển nhiên không chỉ là {S#}, bởi vậy chúng ta không thể có cùng một nhà cung cấp được ký kết lại có nhiều hơn một giai đoạn liên tục Áp dụng tương tự cho SP_FROM_TO Chú ý: Ta có thể sử dụng các thuộc tính TO thay cho thuộc tính FROM; thực tế cả hai bảng S_FROM_TO và SP_FROM_TO đều có hai khoá dự tuyển là các ví dụ tốt về biến quan hệ mà với chúng hiển nhiên là không có lý do gì để chọn một trong những khóa đó làm khoá chính Chúng ta thực hiện việc chọn lựa chỉ thuần tuý để được sự xác định rõ
Tuy nhiên những khoá chính đó không tự nó nắm bắt được mọi ràng buộc như ta mong muốn Ví dụ khi xem xet biến quan hệ S_FROM_TO Rõ ràng là nếu
có một bộ cho nhà cung cấp Sx trong đó biến quan hệ với giá trị FROM là f và TO
có giá trị là t, khi đó ta muốn không có một bộ cho nhà cung cấp Sx nào trong biến quan hệ đó chỉ ra rằng Sx đã được ký chính thức vào ngày ngay trước ngày f hoặc ngay sau ngày t Ví dụ giả sử nhà cung cấp S1, với nhà cung cấp đó ta chỉ có một
bộ S_FROM_TO, với FROM = d04 và TO = d10 Thực tế chỉ {S#, FROM} là khoá chính cho biến quan hệ đó thì hiển nhiên không đủ để ngăn chặn sự xuất hiện của
một bộ giá trị S1 “trùng lặp thêm” (“additional -overlaping”) với FROM = d02 và
TO = d06 chỉ ra trong số những điều khác rằng S1 được ký kết chính thức vào ngày ngay trước ngày d04 Rõ ràng điều mà ta mong muốn là với hai bộ giá trị của S1 này có thể hợp nhất được lại thành một bộ giá trị với FROM = d02 và TO = d10
Trang 22Do đó ràng buộc ở đây là chặn những điểm lặp và tiếp giáp đó:
Biểu thức này là khá phức tạp, không đề cập đến cách viết tổng quát, ví dụ “T1+1”
là một ngày ngay sau ngày được biểu diễn bởi T1, vấn đề này ta sẽ quay trở lại sau trong Phần 1.4.2 (Các kiểu khoảng)
Tiếp theo, chú ý rằng tổ hợp các thuộc tính {S#, FROM} trong biến quan hệ SP_FROM_TO không phải là một khoá ngoài từ SP_FROM_TO tới S_FROM_TO (cho dù nó bao gồm những thuộc tính giống nhau, S# và FROM, tương tự khoá chính của S_FROM_TO) Tuy nhiên, chúng ta cần chắc chắn rằng nếu một nhà cung cấp nào đó xuất hiện trong SP_FROM_TO, thì cũng nhà cung cấp đó sẽ xuất hiện trong S_FROM_TO:
Ta sẽ thử như sau:
CONSTRAINT AUG_SP_TO_S_FK_AGAIN2 /* chưa chính xác! */
IS_EMPTY ((S_FROM_TO RENAME FROM AS SF, TO AS ST) JOIN (SP_FROM_TO RENAME FROM AS SPF, TO AS SPT)) WHERE SPF < SF OR SPT > ST);
Trang 23Tuy nhiên đặc tả này thực tế là không chính xác Để hiểu rõ tại sao, cho S_FROM_TO như mô tả trong Bảng 1.3, và cho S_PFROM_TO bao gồm một bộ giá trị của nhà cung cấp S2 với FROM = d03 và TO = d04 Sự sắp xếp đó rõ ràng là phù hợp, khi đó ràng buộc AUG_SP_TO_S_FK_AGAIN2 giống như một phép chặn thực sự trạng thái
Chúng ta sẽ không giải quyết vấn đề này ở đây mà sẽ xem xét trong phần sau (Ràng buộc trên khoảng) Tuy nhiên ta nhận thấy giống như nội dung của một thuật ngữ mà nếu (như chú ý ở phần trước) sự kết hợp thuộc tính {S#,FROM,TO} trong
biến quan hệ S_FROM_TO được xem như một “khóa dự tuyển thời gian” , khi đó
tổ hợp các thuộc tính {S#,FROM,TO} trong biến quan hệ SP_FROM_TO được
xem là “khóa ngoài thời gian” (cho dù thực tế nó không phải là một khóa ngoài
như vậy)
1.3.3.2.2 – Truy vấn:
Các phiên bản “thời gian hóa toàn phần” của truy vấn 1.1 và 1.2 là:
UTruy vấn 3.1:U Cho S#-FROM-TO là bộ ba giá trị của những nhà cung cấp có khả năng cung cấp một số mặt hàng vào một số thời điểm nào đó, trong đó FROM và TO cùng chỉ rõ một khoảng liên tục tối đa trong đó nhà cung cấp S# thực tế đã có khả năng cung cấp một số mặt hàng Chú ý: Chúng ta sử
dụng thuật ngữ “tối đại” (maximal) ở đây như một giải thích ngắn gọn thuận
tiện hàm ý (trong trường hợp sắp tới) rằng nhà cung cấp S# đã không thể cung cấp bất kỳ mặt hàng nào vào ngày ngay trước ngày FROM và ngay sau ngày TO
UTruy vấn 3.2:U Cho S#-FROM-TO là bộ ba giá trị của những nhà cung cấp không có khả năng cung cấp bất kỳ mặt hàng tại mọi thời điểm, trong đó FROM và TO cùng chỉ rõ một khoảng liên tục tối đại trong đó nhà cung cấp S# thực tế đã không có khả năng cung cấp bất kỳ mặt hàng nào
Trang 24Vấn đề của dữ liệu có yếu tố thời gian là nó nhanh chóng dẫn đến các ràng buộc và truy vấn mà đều trong tình trạng quá phức tạp trừ khi hệ thống có thể cung cấp những phương pháp ngắn gọn được thiết kế tốt, tất nhiên như chúng ta biết với
hệ thống những sản phẩm thương mại ngày nay thì lại không thể
1.4- BIỂU DIỄN YẾU TỐ THỜI GIAN TRONG CSDL THỜI GIAN 1.4.1- Khoảng thời gian
Chúng ta sẽ bắt đầu sự phát triển về một tập hợp thích hợp ngắn ngọn Bước đầu tiên và cơ bản nhất là thừa nhận sự cần thiết phải đề cập tới các khoảng
(Intervals) một cách đúng đắn, thay vì chỉ xem chúng như là những cặp giá trị độc
lập như chúng ta đã thực hiện ở các phần trước Vậy chính xác một khoảng là gì?
Căn cứ vào Bảng 1.3, nhà cung cấp S1 đã có thể cung cấp mặt hàng P1 trong suốt
khoảng từ ngày 04 đến ngày 10 Nhưng “từ ngày 04 đến ngày 10” có nghĩa là gì? Chắc chắn là nó bao gồm ngày 5,6,7,8 và 9, vậy còn điểm đầu và điểm cuối, ngày 4
và 10 thì sao? Điều đó chỉ ra rằng: cho trước một khoảng xác định, đôi khi ta thấy điểm đầu và điểm cuối là bao gồm trong khoảng nhưng đôi khi thì không phải vậy Nếu khoảng từ ngày 4 đến ngày 10 có bao gồm ngày 4, ta gọi đó là khoảng đóng tại điểm đầu, trường hợp ngược lại ta gọi khoảng là mở tại điểm đầu Cũng tương tự vậy nếu khoảng bao gồm cả ngày 10 ta gọi là khoảng đóng tại điểm cuối, ngược lại
ta gọi là khoảng mở tại điểm cuối
Ta quy ước cách chỉ rõ một khoảng bởi điểm đầu và điểm cuối của nó (theo trật tự đó) như sau: ký hiệu dấu “ [ “ cho khoảng đóng và “(“ cho khoảng mở Do
đó có 4 cách khác nhau để biểu diễn một khoảng xác định từ ngày 4 tới ngày 10 bao gồm cả ngày 4 và ngày 10:
[d04, d10]
[d04, d11)
(d03, d10]
(d03, d11)
Trang 25Chú ý: Thực tế kiểu đóng [ ] thường được sử dụng nhiều hơn cả, và ta cũng dùng
kiểu này trong các biểu diễn tiếp theo
Cho trước khoảng [d04, d10] là những giá trị trong thứ tự đúng của nó;
Việc tổ hợp các thuộc tính FROM và TO của SP_FROM_TO (trong Bảng 1.3) thành
một thuộc tính đơn, DURING, những giá trị của chúng được rút ra từ một kiểu khoảng nào đó là có ý nghĩa Ưu điểm ngay lập tức của ý tưởng này là tránh được một sự lựa chọn tuỳ hứng cần thiết như là lựa chọn khoá nào làm khoá chính trong các khoá {S#,FROM} và {S#,TO} Một ưu điểm khác là nó cũng tránh được điều
cần thiết phải quyết định: liệu các khoảng FROM –TO trong Bảng 1.3 được lý giải là
đóng hay mở đối với mỗi giá trị FROM và TO; thực tế [d04, d10], [d4, d11), (d03, d10] và (d03, d11) bây giờ trở thành 4 cách biểu diễn khác nhau có thể có của cùng một khoảng và chúng ta không cần thiết phải biết đâu là cách biểu diễn thực sự Một ưu điểm nữa là biến quan hệ ràng buộc “để tránh được điều vô lý là một cặp FROM ≤ TO trong đó thời điểm TO lại xảy ra trước thời điểm FROM” (như
ta đặt trong phần 5.3) là không cần thiết nữa, bởi vì ràng buộc “FROM TO” là ẩn trong mọi khái niệm về một kiểu khoảng
Bảng 1.4 là kết quả khi chấp nhận tiếp cận này đối với CSDL ví dụ của
chúng ta
Bảng 1.4 CSDL Nhà cung cấp & Mặt hàng (Phiên bản thời gian hoá toàn phần sau cùng , Sử dụng các khoảng) S_DURING:
US#U TENCONGTY TRANGTHAI DIACHI DURING
Trang 26họ thông thường những kiểu dữ liệu “DATETIME” trong đó độ chính xác là “ngày” (trái với, “giờ” hoặc “mini giây” hoặc “tháng”) Điều này cho phép chúng ta bắt buộc kiểu chính xác của khoảng trong những vấn đề như sau:
Điều đầu tiên và trên hết tất nhiên là một kiểu khoảng; điều này bản thân nó
là đủ để xác định những toán tử trên giá trị khoảng trong vấn đề bàn đến (ví
Trang 27dụ giống như phát biểu: một giá trị r thuộc một kiểu quan hệ nào đó đủ để xác định những toán tử - JOIN, vv – áp dụng được cho giá trị r đó.)
Điều thứ hai, khoảng trong vấn đề bàn luận rất rõ ràng là một khoảng từ một ngày nào đó tới một ngày khác, và điều này là đủ để xác định tập của các giá trị khoảng mà các giá trị này tạo nên một kiểu khoảng đang xét
Kiểu đặc trưng của [d04, d10] do vậy là INTERVAL(DATE) trong đó:
a INTERVAL là một phần tử sinh kiểu (tương tự mảng trong các ngôn ngữ lập trình thông thường) cho phép chúng ta định nghĩa một loạt các kiểu khoảng đặc trưng (xem thêm phần thảo luận dưới)
b DATE là một kiểu điểm trong kiểu khoảng đặc trưng này
Điều chú ý quan trọng là, thông thường kiểu điểm PT xác định cả kiểu và độ chính xác giá trị của điểm đầu và điểm cuối – và mọi điểm nằm giữa - của kiểu INTERVAL(PT) (Tất nhiên là trong trường hợp kiểu DATE, độ chính xác là ẩn)
UChú ý:U Thông thường, ta không xem xét độ chính xác như là một phần của kiểu có thể ứng dụng được, mà như là một ràng buộc toàn vẹn Ví dụ cho trước khai báo DECLARE X TIMESTAMP(3) và DECLARE Y TIMESTAMP(6); X,Y là có cùng một kiểu nhưng chịu các ràng buộc khác nhau (X bị ràng buộc lấy các giá trị mini giây và Y bị ràng buộc lấy các giá trị micro giây) Do đó chẳng hạn nói rằng TIMESTAMP(3) hoặc DATE là một kiểu điểm hợp lệ là gói (bundle) hai khái niệm làm một, mà thực sự cần được tách riêng ra Thay vì đó, tốt hơn là định nghĩa hai kiểu TB 1 B và TB 2 B, cả hai với một biểu diễn có thể TIMESTAMP nhưng với ràng buộc
độ chính xác khác nhau, và do đó nói rằng TB 1 B và TB 2 B (ví dụ không phải là TIMESTAMP(3) and TIMESTAMP(6)) là kiểu điểm hợp lệ Tuy nhiên để cho đơn giản ta theo những quy ước đã sử dụng trong chương này và biểu diễn độ chính xác
đó là một phần của kiểu
Trang 28Đặc điểm nào cần có cho một kiểu nếu nó là hợp lệ như một kiểu điểm? Tất nhiên chúng ta thấy rằng một khoảng được xác định bởi điểm đầu và điểm cuối của nó; đồng thời cũng thấy rằng (ít nhất không mang tính hình thức) một khoảng gồm một tập các điếm Nếu ta muốn có thể xác định hoàn toàn tập của các điểm, chỉ cho
trước điểm đầu s và điểm cuối e, trước hết chúng ta phải xác định được điểm ngay sau điểm s (trong một trật tự thoả thuận nào đó) Ta gọi điểm ngay sau đó là điểm
kế tiếp của s; để cho đơn giản, ta coi nó như là s+1 Do đó hàm xác định s+1 từ s là
một hàm kế tiếp cho kiểu điểm (và độ chính xác) trong vấn đề bàn luận Hàm kế tiếp đó cần phải được định nghĩa cho mọi giá trị của kiểu điểm, trừ một điểm được
chỉ định là “điểm cuối” (Do đó cũng sẽ có một điểm được chỉ định là “điểm đầu”,
mà nó không được kế tiếp từ bất kể điểm nào)
Sau khi đã xác định được s+1 là một kế tiếp của s, tiếp theo ta phải xác định liệu s+1 có đứng sau e hay không, theo cùng trật tự đã thoả thuận về kiểu điểm đang xét Nếu nó không đứng sau, thì s+1 thực sự là một điểm trong [s, e], và bây giờ ta phải xem xét điểm tiếp theo s+2 Lặp lại quá trình này cho tới khi gặp điểm đầu tiên
s+n mà đứng sau e (đó là điểm kế tiếp của e), ta sẽ nhận ra mọi điểm trong khoảng
[s, e]
Chú ý rằng điểm s+n trong thực tế là một kế tiếp của e (nghĩa là nó thực sự đứng ngay sau e), bây giờ ta có thể phát biểu chắc chắn rằng chỉ có duy nhất đặc tính của một kiểu PT hợp lệ như một kiểu điểm là một hàm kế tiếp phải được định
nghĩa cho nó Sự tồn tại của hàm đó chỉ ra rằng cần phải có một thứ tự toàn phần
cho các giá trị trong PT (và do đó ta có thể giả định các toán tử so sánh - “<”, “≤”,
…vv – là sẵn có và xác định với mọi cặp giá trị PT)
Định nghĩa [2]: Cho PT là một kiểu điểm Khi đó một khoảng (hoặc giá trị khoảng)
i của kiểu INTERVAL(PT) là một giá trị vô hướng mà theo đó hai toán tử một ngôi
(START và END) và một toán tử hai ngôi IN được định nghĩa như sau:
a mỗi toán tử START(i) và END (i) trả lại một giá trị kiểu PT
b START(i) ≤ END (i)
Trang 29c Cho p là một giá trị của PT Khi đó p IN i là đúng khi và chỉ khi cả
START(i) ≤ p và p ≤ END (i) là đúng
UChú ý:U yêu cầu trong định nghĩa này là hàm kế tiếp được xác định cho kiểu PT
Cũng phải chú ý rằng, theo định nghĩa, các khoảng là luôn luôn không rỗng (nghĩa
là, luôn có ít nhất một điểm “TRONG” bất kỳ khoảng nào cho trước.)
1.4.2- Toán tử vô hướng trên khoảng:
Trong phần này ta sẽ định nghĩa một số toán tử vô hướng thích hợp áp dụng
cho các giá trị khoảng Xét kiểu khoảng INTERVAL(PT) Cho p là một giá trị của kiểu PT Chúng ta sẽ tiếp tục sử dụng ký hiệu p+1, p+2… để biểu thị những kế tiếp của p, và p+1…vv (một ngôn ngữ thực có thể cung cấp một vài loại toán tử NEXT) Tương tự, ta sử dụng ký hiệu p-1, p-2,…vv để biểu điễn những giá trị đứng kế trước
p, kế trước p-1,…vv (một ngôn ngữ thực có thể cung cấp một vài loại toán tử
PRIOR)
Cho pB 1 B và pB 2 B là các giá trị trong PT Khi đó ta định nghĩa MAX(pB 1 B, pB 2 B) sẽ trả
lại giá trị pB 2 B nếu pB 1 B < pB 2 B là đúng, hoặc pB 1 B trong trường hợp ngược lại và MIN(pB 1 B, pB 2 B)
sẽ trả lại giá trị pB 1 B nếu pB 1 B < pB 2 B là đúng, hoặc pB 2 B trong trường hợp ngược lại
Ký hiệu ta đã sử dụng sẽ áp dụng cho những chọn lựa khoảng (ít nhất trong ngữ cảnh không hình thức) Ví dụ, yêu cầu chọn lựa [3, 5] và [3, 6], cả hai đều sinh
ra giá trị của kiểu INTERVAL(INTEGER) bao gồm các điểm 3, 4, và 5 (Một ngôn ngữ thực có thể đòi hỏi một vài cú pháp tường minh hơn, ví dụ như: INTERVAL([3, 5]).)
Cho iB 1 B là một khoảng [sB 1 B, eB 1 B] có kiểu là INTERVAL(PT) Như chúng ta đã biết: START(iB 1 B) sẽ trả lại giá trị là sB 1 B và END(iB 1 B) sẽ trả lại giá trị eB 1 B, ta định nghĩa
thêm STOP(iB 1 B) sẽ trả lại giá trị eB 1 B+1 Giả sử i2 B là một khoảng [sB 2 B, eB 2 B] cũng có kiểu INTERVAL(PT) Khi đó ta định nghĩa một số toán tử so sánh khoảng có ngữ nghĩa
ít nhiều rõ ràng như sau Chú ý: Những toán tử này thường được gọi là toán tử
Allens, do Allens là người đầu tiên giới thiệu [3]:
Trang 30 iB 1 B = iB 2 B khi và chỉ khi cả sB 1 B=sB 2 B và eB 1 B=eB 2 B là đúng
iB 1 B là BEFORE iB 2 B khi và chỉ khi eB 1 B < sB 2 B đúng
iB 1 B là MEETS iB 2 B khi và chỉ khi sB 1 B=eB 2 B + 1 hoặc sB 2 B = eB 1 B+1 đúng
iB 1 B là OVERLAPS iB 2 B khi và chỉ khi cả sB 1 B ≤ eB 2 B và sB 2 B ≤ eB 1 B đều đúng
iB 1 B là DURING iB 2 Bkhi và chỉ khi sB 2 B≤ sB 1 B và eB 2 B ≥ eB 1 B đúng
iB 1 B là STARTS iB 2 B khi và chỉ khi sB 1 B = sB 2 B và eB 1 B ≤ eB 2 B
iB 1 Blà FINISHES iB 2 B khi và chỉ khi eB 1 B = eB 2 B và sB 1 B ≥ sB 2 B
Dưới đây là mô tả mang tính đồ hoạ của các toán tử Allens:
Ngoài các toán tử Allens ta có thể định nghĩa thêm một số toán tử như sau:
iB 1 B MERGES iB 2 B khi và chỉ khi iB 1 B MEETS iB 2 B hoặc iB 1 B OVERLAPS iB 2 B
iB 1 B CONTAINS iB 2 B khi và chỉ khi iB 2 BDURING iB 1 Blà đúng.P P
Để xác định độ dài của một khoảng, ta sử dụng toán tử DURATION(i) nó sẽ trả lại số các điểm trong i Ví dụ DURATION([d03, d07]) = 5
Cuối cùng, ta định nghĩa một số toán tử hai ngôi mà chúng cho kết quả là các khoảng như sau:
iB 1 B UNION iB 2 Bcho kết quả là [MIN(sB 1 B,sB 2 B), MAX(eB 1 B,eB 2 B)] nếu iB 1 B MERGES iB 2 B là đúng và không xác định trong trường hợp ngược lại
iB 1 B INTERSECT iB 2 Bcho kết quả là [MAX(sB 1 B,sB 2 B), MIN(eB 1 B,eB 2 B)] nếu iB 1 B OVERLAPS
iB 2 B là đúng và không xác định trong trường hợp ngược lại
UChú ý:U ở đây UNION và INTERSECT là những toán tử tập hợp tổng quát chứ không phải là những toán tử quan hệ đặc biệt
Trang 311.4.3- Các toán tử gộp nhập trên khoảng
Trong phần này sẽ giới thiệu về hai toán tử đặc biệt quan trọng là UNFOLD
và COALESCE Mỗi toán tử này lấy một tập của các khoảng thuộc cùng một kiểu như một toán hạng đơn của nó và trả lại kết quả cũng là một tập khác như vậy Có thể coi kết quả của cả hai trường hợp như là một dạng chính tắc đối với tập gốc Cho XB 1 B và XB 2 B lần lượt là tập hợp:
{[d01,d01],[d03,d05],[d04,d06]} và {[d01,d01],[d03,d04],[d05,d05],[d05,d06]}
Dễ dàng nhận thẩy rằng XB 1 B không giống XB 2 B Và cũng dễ nhận thấy là (a) tập hợp của mọi điểm p nằm trong một khoảng nào đó của XB 1 B là giống với (b) tập của mọi điểm p nằm trong một khoảng nào nó thuộc XB 2 B (những điểm mà ta đề cập ở đây là d01, d03, d04, d05 và d06) Tuy nhiên, chúng ta không quan tâm nhiều đến tập của các điểm đó như vậy mà sẽ xem xét tập tương ứng của các khoảng đơn vị (ta gọi là XB 3 B):
{ [d01,d01], [d03,d03], [d04,d04 ], [d05,d05 ], [d06,d06 ] }
XB 3 B được gọi là ở dạng trải mở (unfolded) của XB 1 B và XB 2 B
Định nghĩa [2] (Dạng trải mở): Nếu X là một tập các khoảng có cùng chung
một kiểu, thì dạng trải mở của X là một tập của tất cả các khoảng có dạng [p, p]
trong đó p là một điểm trong một khoảng nào đó thuộc X
Chú ý rằng trong ví dụ này XB 1 B, XB 2 B và XB 3 B là khác nhau về lực lượng Điều tất nhiên là XB 3 B (ở dạng trải mở) là tập có nhiều lực lượng nhất, nhưng cũng dễ dàng
tìm được một tập XB 4 B có cùng dạng trải mở như XB 1 B mà có lực lượng nhỏ hơn XB 3 B Ví dụ:
XB 4 B = { [d01,d01], [d03,d04 ], [d05,d06 ] }
Trang 32Ta cũng rất dễ tìm được một tập lý thú hơn nhiều– và cần thiết, duy nhất –
XB 5 B mà có cùng dạng trải mở và có lực lượng nhỏ nhất có thể:
XB 5 B = { [d01,d01], [d03,d06 ] }
XB 5 B được gọi là dạng hợp kết (coalesced) của XB 1 B (và cũng là của XB 2 B, XB 3 B, và XB 4 B)
Định nghĩa (Dạng hợp kết [2]): Nếu X là một tập các khoảng có chung một
kiểu, thì dạng hợp kết của X là một tập Y các khoảng có cùng chung một kiểu
mà:
X và Y có cùng dạng trải mở và
Không có phần tử phân biệt iB 1 B và iB 2 B nào của Y mà iB 1 B MERGES iB 2 B là đúng
Chú ý rằng rất nhiều tập riêng biệt có thể có dạng hợp kết giống nhau
Định nghĩa (Toán tử một ngôi UNFOLD và COALESCE [2]): Cho X là một tập
các khoảng kiểu INTERVAL(PT) Khi đó UNFOLD(X) sẽ trả về giá trị dạng trải
mở của X, và COALESCE(X) sẽ trả về dạng hợp kết của X
Chú ý: Ta sẽ phải nói thêm là dạng trải mở và hợp kết là những thuật ngữ phi
chuẩn, thực tế không xuất hiện dưới bất kỳ thuật ngữ dạng chuẩn nào cho những khái niệm đó, thậm chí cho dù những khái niệm như vậy tất nhiên là đã được bàn luận trong nhiều tài liệu, tạp chí
1.4.4- Toán tử quan hệ trên các khoảng
Bây giờ ta sẽ quay trở lại truy vấn 3.1 và 3.2 trong Phần 1.3.3.2.2 Trước tiên
ta tập trung vào truy vấn 3.1 Truy vấn 4.1 là một phát biểu lại của truy vấn 3.1 với
theo CSDL của Bảng 1.4:
Trang 33 Truy vấn 4.1: Tìm ra các cặp S# - DURING cho các nhà cung cấp có khả
năng cung cấp một mặt hàng nào đó tại một thời điểm nào đó, trong đó DURING chỉ rõ thời gian tối đa liên tục mà trong đó nhà cung cấp S# trong thực tế là có khả năng cung cấp một mặt hàng nào đó
Hãy nhớ lại phiên bản trước của truy vấn này, truy vấn 2.1 yêu cầu sử dụng phép gộp nhóm và gộp nhập (cụ thể hơn là, nó bao gồm toán tử SUMMARIZE) Do đó
sẽ không lấy làm ngạc nhiên là truy vấn 4.1 cũng sẽ đỏi hỏi những toán tử nào đó có bản chất là gộp nhóm gộp nhập Tuy nhiên ta sẽ tiếp cận vấn đề về phát biểu truy vấn này với từng bước nhỏ mỗi lần Trước hết là:
WITH SP_DURING {S#, DURING} AS T1 : Bước này chỉ đơn giản là loại bỏ số hiệu mặt hàng Do đó kết quả của nó - T1- có dạng như sau:
Trang 34Chú ý là quan hệ này chứa thông tin dư thừa; ví dụ chúng ta được thông tin không dưới 3 lần rằng nhà cung cấp S1 có thể cung cấp thứ gì đó vào ngày 6 Kết quả yêu cầu, loại bỏ được những dư thừa đó, là rõ ràng như sau:
US#U DURING S1 [d04, d10]
Bây giờ, rốt cuộc ta sẽ tiến đến một điểm mà ta có thể đạt được dạng hợp gộp nhờ vào một biểu diễn đơn giản ở dạng:
T1 COALESCE DURING Tuy nhiên, chúng ta cần xây dựng điểm đó dần dần Nhận thấy trước hết là
chúng ta đã quen với thuật ngữ dạng hợp gộp trong hai đoạn trước mang một ý
nghĩa khác biệt một chút với cách ta đã sử dụng trong Phần 1.4.3 (Các toán tử gộp nhập trên khoảng) Toán tử COALESCE như đã định nghĩa trong phần trước đó nhận một tập các khoảng là đầu vào và sinh ra một tập các khoảng như là đầu ra Tuy nhiên ở đây chúng ta đang nói về một phiên bản khác của toán tử đó mà nó nhận một quan hệ một ngôi là đầu vào và cho đầu ra là quan hệ một ngôi khác (cùng
có mô tả giống nhau), và đó là các bộ trong những quan hệ chứa các khoảng thực
sự
Do đó các bước đưa ta từ T1 tới RESULT là:
WITH (T1 GROUP (DURING) AS X) AS T2 :
Trang 35Toán tử GROUP đƣợc sử dụng ở đây để “ghép” (nest) giá trị DURING với giá
trị S#, số hiệu mỗi nhà cung cấp đƣợc ghép cặp với một tập các khoảng thay vì với một khoảng đơn
Trang 36US4U UDURINGU
[d04, d10]
Cuối cùng chúng ta tách nhóm:
T3 UNGROUP YBiểu thức này sinh ra quan hệ trước đó ta gọi là RESULT Hay nói cách khác, nó đồng thời chỉ ra tất các các bước (và làm đơn giản hoá một chút), RESULT
là kết quả của việc định giá toàn bộ biểu thức sau:
WITH SP_DURING {S#, DURING} AS T1,
(T1 GROUP (DURING) AS X) AS T2, (EXTEND T2 ADD COALESCE (X) AS Y) {ALL BUT X}
AS T3 : T3 UNGROUP Y
Điều hiển nhiên là ta muốn có thể có từ T1 đến RESULT trong một toán tử đơn Cuối cùng ta phát biểu một “toán tử COALESCE” mới có cú pháp như sau:
R COALESCE A
(trong đó R là một biểu thức quan hệ và A là một thuộc tính - của một kiểu khoảng nào đó - của quan hệ được ký hiệu bởi biểu thức đó) Ngữ nghĩa của toán tử này được xác định bởi sự tổng quát hoá một cách hiển nhiên những toán tử nhóm
(grouping), mở rộng (extension), chiếu (projection) và tách (ungrouping ) do đó ta
Trang 37có được RESULT từ T1 Chú ý: Nó có thể giúp ta xác quan sát thấy hợp nhất
(coalescing) R trên A bao gồm việc nhóm R bằng mọi thuộc tính của R khác với A
(tương tự, ví dụ biểu thức “T1 GROUP(DURING)….” có thể được đọc là “ nhóm T1 theo S#, S# là thuộc tính duy nhất của T1 không được đề cập đến trong mệnh đề GROUP)
Gộp mọi vấn đề đã đề cập ở trên cùng với nhau, bây giờ chúng ta có thể đưa
ra một phát biểu đơn giản hợp lý của truy vấn 4.1 như sau:
SP_DURING { S#, DURING } COALESCE DURING
Chú ý: Toàn bộ phép toán được biểu diễn bởi biểu thức này là một ví dụ về điều
một vài tác giả gọi là phép chiếu thời gian (temporal projection) Cụ thể hơn, nó là
một phép chiếu của SP_DURING trên S# và DURING (Xem lại phiên bản gốc của truy vấn này, truy vấn 1.1 bao gồm phép chiếu thông thường của SP trên S#) Nhận thấy rằng phép chiếu thời gian không phải là một phép chiếu đúng như vậy mà nó là
một “tương tự thời gian – temporal analog” của một phép chiếu thông thường
Bây giờ ta chuyển sang truy vấn 3.2, truy vấn 4.2 là một phát biểu lại của
truy vấn đó theo CSDL của Bảng 1.4:
Truy vấn 4.2: Tìm ra các cặp S# - DURING đối với các nhà cung cấp không
có khả năng cung cấp bất kỳ mặt hàng nào tại một thời điểm nào đó, trong đó DURING chỉ rõ thời gian liên tục tối đa mà trong khoảng thời gian đó nhà cung cấp S# trong thực tế là không có khả năng cung cấp bất kỳ mặt hàng nào
Xem lại phiên bản gốc của truy vấn này, truy vấn 1.2 bao gồm một toán tử hiệu quan hệ “Hiệu thời gian” (giống toán tử hiệu thông thường) bao gồm hai toán hạng quan hệ Ta tập trung vào toán hạng bên trái trước Nếu ta trải mở kết quả của phép chiếu (thông thường) S_DURING {S#, DURING} trên DURING, ta có được một quan hệ - gọi là T1 – có dạng sau:
Trang 38Cho trước dữ liệu mẫu của Bảng 1.4, T1 thực sự bao gồm tổng số 23 bộ giá trị
Nếu ta định nghĩa một phiên bản “quan hệ một ngôi” của UNFOLD (tương tự với phiên bản “quan hệ một ngôi” của COALESCE), khi đó ta sẽ có T1 như sau:
(EXTEND (S_DURING {S#,DURING} GROUP (DURING) AS X)
ADD UNFOLD (X) AS Y) {ALL BUT X} UNGROUP Y Tuy nhiên như đã đề xuất, ta có thể đơn giản hoá vấn đề bằng cách sáng chể ra một
toán tử “trải mở quan hệ” (relation unfold) với cú pháp như sau (và ngữ nghĩa rõ
ràng):
R UNFOLD A Bây giờ ta có thể viết:
Trang 39WITH (S_DURING {S#, DURING} UNFOLD DURING) AS T1 :
Ta xử lý toán hạng bên phải của hiệu thời gian nhƣ sau:
WITH (SP_DURING {S#, DURING} UNFOLD DURING) AS T2 : Bây giờ ta có thể áp dụng phép hiệu quan hệ :
S2 [d07, d07]
S3 [d03, d07]
S5 [d02, d10]
Trang 40Và phát biểu của truy vấn 4.2 là một biểu thức lồng như sau:
((S_DURING {S#, DURING} UNFOLD DURING)MINUS
(SP_DURING UNFOLD DURING)) COALESCE DURING Như đã chỉ rõ, toàn bộ phép toán được xác định bởi biểu thức này là một ví dụ về điều một vài tác giả gọi là phép hiệu thời gian Cụ thể hơn, nó là một “phép hiệu thời gian” giữa các phép chiếu của S_DURING và SP_DURING lần lượt trên S# và DURING Chú ý rằng, giống phép chiếu thời gian, hiệu thời gian không đúng là một hiệu theo nghĩa thông thường mà nó là một “tương tự thời gian ” của một hiệu thông thường
Tuy nhiên chúng ta chưa thực sự kết thúc ở đây Biểu thức “hiệu thời gian” giống như đã chỉ ra trong ví dụ đỏi hỏi phải được thực hiện rất thường xuyên cần phải xác định một cách ngắn gọn hơn cho chúng Cụ thể là, cần có một toán tử đơn nắm bắt được trình tự (a) trải mở cả hai toán hạng, (b) tìm hiệu, và sau đó (c) hợp nhất Đề xuất ngắn gọn của chúng tôi là:
R1 I_MINUS R2 ON A
R1 và R2 là những biểu thức quan hệ biểu diễn quan hệ rB 1 B và rB 2 B mà có cùng kiểu và
A là một thuộc tính của kiểu khoảng nào đó là chung cho cả hai quan hệ (tất nhiên
là tiếp đầu tố I viết tắt của interval (khoảng))
Như ta đã thấy, biểu thức này được định nghĩa là tương đương về ngữ nghĩa như sau:
( (R1 UNFOLD A) MINUS (R2 UNFOLD A) ) COALESCE A
Ta có thể có các định nghĩa tương tự cho những toán tử I_ như: I_UINION và I_INTERSECT
Có một điểm hiệu năng quan trọng phải thực hiện trong liên kết với các toán
tử như I_MINUS Việc thực hiện trải mở cả hai toán hạng, tìm hiệu, sau đó là hợp nhất có thể mất quá nhiều thời gian và không gian Có một vài phương pháp hiệu quả hơn thế Thực tế, ta có thể hy vọng rằng bộ tối ưu hoá sẽ sử dung phương pháp hiệu quả đối với I_MINUS ngay khi đặt vào đó một biểu thức dài dòng Một lĩnh vực dành cho nghiên cứu thêm về một biểu thức khá phức tạp như sau: