nhật thông thƣờng INSERT, UPDATE và DELETE trên một biến quan hệ thời gian. Xét lại S_DURING một lần nữa; giả sử định nghĩa biến quan hệ đó bao gồm một khóa dự tuyển thời gian và đặc tả COALESCED nhƣ trong phần trƣớc. Cũng giả sử (nhƣ thông thƣờng) là giá trị hiện tại của S_DURING là đƣợc chỉ rõ nhƣ trong
Bảng 1.4. Bây giờ ta sẽ xem xét các trƣờng hợp sau:
INSERT: Giả sử ta thấy rằng nhà cung cấp S2 đƣợc ký hợp đồng bổ sung trong khoảng từ ngày 5 đến ngày 6 (nhƣng vẫn có tên là “CMC”, trạng thái là 10, và có trụ sở tại “SaiGon”, trong suốt khoảng thời gian đó). Ta không thể chèn một cách đơn giản một bộ, nếu ta làm nhƣ vậy thì kết quả sẽ vi phạm quy định COALESCED hai lần. Thực tế, điều ta phải làm là xóa một trong các bộ đã có của S2 và cập nhật giá trị của DURING trong bộ kia là [d02, d10].
UPDATE: Giả sử ta nhận ra rằng trạng thái của S2 là tăng từ ngày 9 đến ngày 20. Sẽ khá khó khăn để tạo ra sự thay đổi cần thiết đó, thậm chí cho dù nó có vẻ chỉ là một UPDATE thông thƣờng. Về cơ bản ta phải tách bộ giá trị của S2 [d07, d10] làm ba, với các giá trị DURING lần lƣợt là [d07, d08], [d09, d09] và [d10, d10] với những giá trị khác không thay đổi và sau đó thay giá trị
STATUS là 20 trong bộ [d09, d09].
DELETE: Giả sử ta nhận ra rằng hợp đồng của nhà cung cấp S3 kết thúc vào ngày 6 nhƣng lại đƣợc tái ký vào ngày 9. Yêu cầu cập nhật là rất cần thiết, đòi hỏi lần nữa bộ giá trị của S3 phải đƣợc tách đôi, với giá trị DURING lần lƣợt là [d03, d05] và [d9, d10].
Bây giờ ta nhận thấy rằng những giải pháp mà ta vừa mới phác thảo cho ba vấn đề này là cụ thể cho giá trị hiện tại của biến quan hệ S_DURING (cũng nhƣ những mong muốn cập nhật thông thƣờng). Ví dụ: khi xem xét vấn đề chèn, nói chung một bộ giá trị đƣợc xét cho phép Insert có thể đúng là đƣợc xen vào hoặc có thể cần
thiết phải hợp nhất với một bộ trƣớc hoặc một bộ sau, hoặc cả hai (nhƣ trong ví dụ của chúng ta). Tƣơng tự, phép chèn và cập nhật nói chung có thể cần hoặc không cần “tách” các bộ giá trị đã có.
Rõ ràng là ngƣời sử dụng không thể chấp nhận đƣợc nếu họ bị giới hạn trong việc thực hiện những toán tử thông thƣờng nhƣ: INSERT, UPDATE và DELETE; một phƣơng thức mở rộng nào đó rõ ràng là rất cần thiết. Một số triển vọng nhƣ sau:
INSERT: Thực sự vấn đề INSERT có thể đƣợc giải quyết bằng cách đơn giản là mở rộng thích hợp ngữ nghĩa của đặc tả COALESCED trên định nghĩa biến quan hệ. Cụ thể hơn, ta có thể cho phép INSERT đƣợc thực hiện theo cách thông thƣờng và do đó đòi hỏi hệ thống phải thực hiện mọi phép (tái) hợp nhất cần thiết theo sau phép INSERT đó. Nói cách khác đặc tả COALESCED không định nghĩa đơn thuần một ràng buộc nữa, nó cũng ẩn chứa bên trong những “hành động bù trừ – compensating actions” nhất định (có phần nào đó tƣơng tự nhƣ những hành động tham chiếu trên những đặc tả khoá ngoài).
Tuy nhiên, ngữ nghĩa mở rộng của COALESCED theo cách này là không đủ khả năng để giải quyết vấn đề UPDATE và DELETE.
UPDATE: Vấn đề cập nhật có thể đƣợc xử lý bằng cách mở rộng các toán tử cập nhật nhƣ ví dụ sau: UPDATE S_DURING WHERE S# = S# (S2) DURING INTERVAL ([d09,d09]) STATUS := 20 ;
Dòng thứ 3 ở đây xác định thuộc tính khoảng theo đó đặc tả COALESCED áp dụng -- là DURING trong ví dụ – và liên quan đến giá trị khoảng – [d09, d09] trong ví dụ (cú pháp của dòng thứ 3 này là: <tên thuộc tính> và <biểu thức khoảng>). Cuối cùng phép UPDATE cần phải đƣợc hiểu nhƣ sau:
a. Trƣớc hết, xác định các bộ giá trị cho nhà cung cấp S2.
b. Tiếp theo, trong các bộ giá trị đó, xác định bộ giá trị nào có giá trị DURING chứa khoảng [d09, d09] (tất nhiên là tối đa chỉ có một bộ nhƣ vậy) c. Nếu không xác định đƣợc bộ giá trị nào, thì không có cập nhật nào đƣợc thực hiện; ngƣợc lại, hệ thống sẽ tách bộ đó theo sự cần thiết và thực hiện yêu cầu cập nhật.
DELETE: vấn đề DELETE có thể đƣợc xử lý bằng cách mở rộng tƣơng tự toán tử delete. Ví dụ của chúng ta trở thành:
DELETE S_DURING WHERE S# = S# (S3) DURING INTERVAL( [d06,d08] ) ;