Quản lý thời gian trong DB2 với tính nhất quán thời gian

DB2 10 cho z/OS và DB2 10 cho Linux, UNIX và Windows đưa vào việc quản lý dữ liệu dựa trên thời gian để cho phép bạn truy vấn và thao tác dữ liệu trong quá khứ, hiện tại và tương lai trong khi vẫn duy trì toàn bộ lịch sử về mọi thay đổi dữ liệu. Bộ sưu tập các tính năng về thời gian trong DB2 còn được gọi là Time Travel Query (Truy vấn theo hành trình thời gian).

pdf16 trang | Chia sẻ: lylyngoc | Lượt xem: 1477 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Quản lý thời gian trong DB2 với tính nhất quán thời gian, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Quản lý thời gian trong DB2 với tính nhất quán thời gian Giới thiệu về quản lý dữ liệu thời gian với DB2 DB2 10 cho z/OS và DB2 10 cho Linux, UNIX và Windows đưa vào việc quản lý dữ liệu dựa trên thời gian để cho phép bạn truy vấn và thao tác dữ liệu trong quá khứ, hiện tại và tương lai trong khi vẫn duy trì toàn bộ lịch sử về mọi thay đổi dữ liệu. Bộ sưu tập các tính năng về thời gian trong DB2 còn được gọi là Time Travel Query (Truy vấn theo hành trình thời gian). DB2 hỗ trợ ba kiểu bảng thời gian:  Các bảng thời gian theo thời gian-hệ thống — Ở đây DB2 duy trì trong suốt một lịch sử về các hàng cũ đã được cập nhật hoặc bị xóa theo thời gian. Với các cấu kiện mới theo tiêu chuẩn ngôn ngữ SQL, người dùng có thể "quay lại đúng lúc" và truy vấn cơ sở dữ liệu tại bất kỳ thời điểm nào được chọn trong quá khứ. Điều này được dựa trên các các dấu thời gian hệ thống đã gán nội bộ mà DB2 sử dụng chúng để quản lý thời gian hệ thống, còn được gọi là thời gian giao dịch.  Các bảng thời gian theo thời gian-ứng dụng — Ở đây các ứng dụng cung cấp các ngày tháng hoặc các dấu thời gian để mô tả tính hiệu lực của dữ liệu kinh doanh. Các cấu kiện SQL mới cho phép các ứng dụng chèn, truy vấn, cập nhật và xóa dữ liệu trong quá khứ, hiện tại hay tương lai. DB2 tự động áp dụng các ràng buộc và các chia tách hàng để duy trì chính xác thời gian kinh doanh, còn được gọi là thời gian có hiệu lực.  Các bảng hai thời gian (bitemporal) — Quản lý cả thời gian hệ thống lẫn thời gian kinh doanh. Các bảng hai thời gian kết hợp tất cả các khả năng của các bảng thời gian theo thời gian-hệ thống và theo thời gian-ứng dụng. Cách kết hợp này cho phép các ứng dụng quản lý tính hiệu lực của dữ liệu kinh doanh trong khi DB2 vẫn duy trì một lịch sử đầy đủ về bất kỳ các lần cập nhật hay xóa nào. Với phần còn lại của bài này, chúng tôi giả sử bạn đã quen với những điều cơ bản về các bảng thời gian theo thời gian-ứng dụng trong DB2. Việc thảo luận về tính toàn vẹn tham chiếu (RI) thời gian cũng áp dụng cho thời gian kinh doanh trong các bảng hai thời gian. Bạn nên biết cách tạo và sử dụng các bảng như vậy và hiểu cách DB2 có thể thực hiện các chia tách hàng khi bạn cập nhật hoặc xóa dữ liệu với phần thời gian kinh doanh đã quy định. Bài "Một vấn đề về Thời gian: Quản lý dữ liệu thời gian trong DB2" cung cấp một bài giới thiệu về các chủ đề này. Về đầu trang Tính toàn vẹn tham chiếu thời gian là gì? Một ví dụ Trong phần này, chúng tôi xem lại tính toàn vẹn tham chiếu truyền thống trong một cơ sở dữ liệu quan hệ rồi mở rộng thảo luận về tính toàn vẹn tham chiếu thời gian. Kịch bản của chúng tôi gồm một doanh nghiệp hư cấu nhận các sản phẩm từ các nhà cung cấp, bán các sản phẩm này cho khách hàng và đôi khi thực hiện các chương trình khuyến mãi nhằm cung cấp các sản phẩm được chọn với các mức giảm giá trong các khoảng thời gian hạn chế. Để giúp bạn hiểu cách bạn có thể thực hiện và thực thi tính toàn vẹn tham chiếu thời gian, chúng tôi sử dụng kịch bản ứng dụng và dữ liệu mẫu ví dụ này. Tính toàn vẹn tham chiếu truyền thống Liệt kê 1 cho thấy hai bảng liên quan đến việc quản lý kinh doanh này. Bảng cha mẹ, product_avail (sản phẩm có sẵn), gồm có một hàng cho mỗi sản phẩm có sẵn và xác định nhà cung cấp đang cung cấp sản phẩm này. Bảng con, promotion (khuyến mãi), có một hàng cho từng đề xuất riêng, được định nghĩa bằng một ID khuyến mãi, ID sản phẩm tương ứng và giá đã giảm. Cả hai bảng đều có thể có thêm các cột, nhưng để đơn giản, lúc này chỉ cần vài cột như vậy là đủ. Liệt kê 1. Ví dụ đơn giản về tính toàn vẹn tham chiếu giữa bảng cha mẹ và bảng con CREATE TABLE product_avail( prodID INTEGER NOT NULL, supplier VARCHAR(32), PRIMARY KEY(prodID) ); CREATE TABLE promotion( promoID INTEGER NOT NULL, prodID INTEGER NOT NULL, price DECIMAL(10,2), PRIMARY KEY(promoID), FOREIGN KEY (prodID) REFERENCES product_avail(prodID) ); Do chỉ có thể đưa ra một chương trình khuyến mãi cho một sản phẩm có sẵn, nên mỗi hàng trong bảng khuyến mãi phải có một prodID (mã định danh sản phẩm) tồn tại trong bảng product_avail. Điều kiện này được gọi là tính toàn vẹn tham chiếu và được khai báo và được thực thi bởi ràng buộc khóa ngoài (FK) trên bảng khuyến mãi. Do ràng buộc này, bất kỳ nỗ lực nào để chèn hoặc cập nhật một chương trình khuyến mãi với một prodID không tồn tại trong bảng product_avail sẽ bị DB2 loại bỏ. Giới thiệu về thời gian Trong doanh nghiệp hư cấu của chúng tôi, các nhà cung cấp khác nhau có thể cung cấp các sản phẩm tương tự tại các thời điểm khác nhau trong năm. Tương tự như vậy, chúng tôi có thể chọn để chạy các chương trình khuyến mãi khác nhau cho cùng một sản phẩm tại các thời điểm khác nhau. Do thời gian là một chiều quan trọng trong kinh doanh, nên chúng tôi tạo ra các bảng trong Liệt kê 1 làm các bảng thời gian theo thời gian-ứng dụng, có nghĩa là chúng tôi đưa một khoảng thời gian BUSINESS_TIME (Thời gian kinh doanh) vào trong cả hai bảng (xem Liệt kê 2). Khoảng thời gian BUSINESS_TIME đã bổ sung gồm một cặp các cột ngày tháng hoặc dấu thời gian cộng với khai báo PERIOD (Khoảng thời gian) để định nghĩa cặp cột này như là một khoảng thời gian. Chúng tôi cũng có thể chọn mở rộng định nghĩa khóa chính với các từ khóa tùy chọn BUSINESS_TIME WITHOUT OVERLAPS (Thời gian kinh doanh không chồng lên nhau) để cho biết rằng nhiều hàng có thể có cùng giá trị prodID miễn là các khoảng thời gian BUSINESS_TIME của những hàng này không chồng lên nhau. Hãy áp dụng sự mở rộng khóa ngoài cho bảng khuyến mãi. Từ cột prodID trong bảng product_avail bây giờ có thể có các giá trị sao chép, nó có thể không còn được tham chiếu như là một khóa ngoài trong bảng khuyến mãi nữa. Chúng tôi sẽ cần thực thi tính toàn vẹn tham chiếu theo cách khác. Liệt kê 2. Bây giờ các bảng trong Liệt kê 1 là các bảng thời gian theo thời gian-ứng dụng CREATE TABLE product_avail( prodID INTEGER NOT NULL, supplier VARCHAR(32), avail_start DATE NOT NULL, avail_end DATE NOT NULL, PERIOD BUSINESS_TIME (avail_start, avail_end), PRIMARY KEY(prodID, BUSINESS_TIME WITHOUT OVERLAPS) ); CREATE TABLE promotion( promoID INTEGER NOT NULL, prodID INTEGER NOT NULL, price DECIMAL(10,2), promo_start DATE NOT NULL, promo_end DATE NOT NULL, PERIOD BUSINESS_TIME (promo_start, promo_end), PRIMARY KEY(promoID, BUSINESS_TIME WITHOUT OVERLAPS) ); Hình 1 cho thấy các bảng được điền với thông tin về ba sản phẩm và hai chương trình khuyến mãi. Ví dụ, sản phẩm 9105 do nhà cung cấp là công ty A phân phối bắt đầu 01.01.2012 và kết thúc vào 01.06.2012, có nghĩa là ngày cuối cùng giao nhận sản phẩm là 31.05.2012. (Lưu ý rằng các khoảng thời gian luôn luôn được quy định theo cách bao hàm-loại trừ; các ngày tháng kết thúc đã quy định không còn là một phần của thời hạn hiệu lực nữa). Từ 01.06 trở đi, sản phẩm 9015 do công ty B cung cấp, kết thúc vào 01.09. Trong Tháng Chín và Tháng Mười, chúng tôi không nhận được nguồn cung cấp nào về sản phẩm 9015, nhưng trong Tháng Mười Một và Tháng Mười Hai, sản phẩm này lại có sẵn từ công ty A. Khi chúng tôi không có nhà cung cấp nào về một sản phẩm, thì sản phẩm đó được coi là tạm thời không có. Hình 1. Dữ liệu mẫu ví dụ Khóa chính (prodID, BUSINESS_TIME WITHOUT OVERLAPS) bảo đảm rằng không có hai nhà cung cấp cùng phân phối sản phẩm giống nhau tại cùng một thời điểm. Nếu chúng ta muốn cho phép nhiều nhà cung cấp phân phối sản phẩm giống nhau tại cùng một thời điểm, chúng tôi có thể định nghĩa khóa chính là (prodID, supplier, BUSINESS_TIME WITHOUT OVERLAPS). Bảng khuyến mãi trong Hình 1 định nghĩa hai chương trình khuyến mãi cho sản phẩm 9105. Chương trình khuyến mãi đầu tiên đưa ra sản phẩm có giá $ 19,95 từ 15.01.2012, kết thúc vào 15.03.2012. Đó là, ngày cuối cùng được giảm giá là 14.03.2012. Chương trình khuyến mãi thứ hai bắt đầu vào 01.05 và kết thúc vào 01.07.2012, với một mức giá $ 16,95. Tại tất cả các thời điểm khác, giá thường lệ cho sản phẩm 9105 vẫn có hiệu lực. Giá đó được lưu trữ ở chỗ khác. Tính toàn vẹn tham chiếu thời gian Các dữ liệu trong Hình 1 thực hiện một mối quan hệ khóa ngoài truyền thống giữa hai bảng vì mỗi chương trình khuyến mãi đều tham chiếu một ID sản phẩm đã tồn tại trong bảng product_avail. Tuy nhiên, doanh nghiệp của chúng tôi cũng phải bảo đảm rằng một chương trình khuyến mãi được cung cấp chỉ trong một khoảng thời gian khi các sản phẩm tương ứng thực sự có sẵn. Hãy tưởng tượng sự lộn xộn và sự bất mãn trong số các khách hàng nếu chúng tôi đã quảng cáo giảm giá cho một sản phẩm mà không có sẵn sản phẩm đó trong bất kỳ kho hàng nào của mình. Nói chung, bạn có thể muốn thực thi một mối quan hệ theo thời gian giữa các khoảng thời gian kinh doanh của các hàng cha mẹ và các hàng con trong hai bảng liên quan. Các ví dụ về các mối quan hệ này gồm những điều sau đây:  Bằng nhau về khoảng thời gian — Khoảng thời gian kinh doanh của hàng con phải trùng với khoảng thời gian của một hàng cha mẹ duy nhất. Trong ví dụ của chúng tôi, điều kiện này sẽ làm cho khoảng thời gian của chương trình khuyến mãi luôn chồng lên khoảng thời gian trong đó sản phẩm có sẵn từ một nhà cung cấp cụ thể. Một khóa ngoài (FK) truyền thống dựa trên ID sản phẩm và các cột bắt đầu và kết thúc thời gian có thể tuân thủ mối quan hệ này.  Chính sách ngăn chặn thời gian — Khoảng thời gian kinh doanh của hàng con phải được chứa hoàn toàn trong các khoảng thời gian của một hoặc nhiều hàng cha mẹ.  Chính sách ngăn chặn thời gian, hàng cha mẹ duy nhất — Khoảng thời gian kinh doanh của hàng con phải được chứa trong khoảng thời gian của một hàng cha mẹ duy nhất.  Chồng lên — Khoảng thời gian kinh doanh của hàng con phải chồng lên khoảng thời gian của một hàng cha mẹ.  Bắt đầu-trong phạm vi — Khoảng thời gian kinh doanh của hàng con phải bắt đầu trong phạm vi của khoảng thời gian của một hàng cha mẹ.  Bắt đầu-sau — Khoảng thời gian kinh doanh của hàng con phải bắt đầu sau khoảng thời gian của một hàng cha mẹ. Hình 2 hiển thị trực quan các khoảng thời gian kinh doanh của dữ liệu mẫu ví dụ trong Hình 1 và cho phép chúng tôi kiểm tra một số các mối quan hệ theo thời gian được liệt kê ở trên. Mỗi hàng của một bảng được biểu diễn bởi một hình chữ nhật có chiều dài đại diện cho độ rộng thời gian của khoảng thời gian kinh doanh của hàng đó. Các hàng của bảng product_avail được hiển thị bằng màu xanh dương, các hàng của bảng khuyến mãi có màu xanh lá cây. Chúng tôi có thể đưa ra các nhận xét sau trong Hình 2:  Các chương trình khuyến mãi có promoID (mã định danh của chương trình khuyến mãi) 16 và 17 không thực hiện điều kiện bằng nhau về khoảng thời gian với các hàng cha mẹ của chúng vì các khoảng thời gian khuyến mãi ngắn hơn các khoảng thời gian của các hàng cha mẹ của chúng trong bảng product_avail.  Chương trình khuyến mãi 16 thực hiện điều kiện chính sách ngăn chặn thời gian — và thậm chí là chính sách ngăn chặn thời gian với một hàng cha mẹ duy nhất — vì khoảng thời gian đề xuất của nó được chứa trong một khoảng thời gian mà sản phẩm 9105 do nhà cung cấp là công ty A cung cấp.  Chương trình khuyến mãi 17 thỏa mãn chính sách ngăn chặn thời gian (với nhiều hàng cha mẹ) vì khoảng thời gian đề xuất của nó có chứa các Tháng Năm và Sáu, lúc đó sản phẩm được công ty A và B cung cấp, không có sự gián đoạn nào trong việc cung cấp. Chương trình khuyến mãi 17 không thỏa mãn chính sách ngăn chặn thời gian với một hàng cha mẹ.  Cả hai chương trình khuyến mãi 16 và 17 đều thực hiện các mối quan hệ chồng lên và bắt đầu-trong phạm vi với các hàng sản phẩm đầu tiên. Hình 2. Hình 2. Bảng liệt kê thời gian của các khoảng thời gian của bảng product_avail (ở trên, màu xanh dương) và các khoảng thời gian của bảng khuyến mãi (ở dưới, màu xanh lá cây) Căn cứ vào trường hợp sử dụng riêng của mình và các yêu cầu ứng dụng, bạn cần xác định mối quan hệ thời gian nào cần thực thi giữa các hàng cha mẹ và các hàng con. Với ví dụ về sản phẩm và chương trình khuyến mãi của mình, chúng tôi chọn chính sách ngăn chặn thời gian (có một hoặc nhiều hàng cha mẹ) làm mối quan hệ mong muốn để định nghĩa tính toàn vẹn tham chiếu thời gian. Do đó, phần còn lại của bài này giả định chính sách ngăn chặn thời gian là khái niệm cho tính toàn vẹn tham chiếu thời gian. Các vi phạm tính toàn vẹn tham chiếu thời gian Bộ phận tiếp thị của chúng tôi dự kiến sẽ giảm doanh thu trong Tháng Tám và Tháng Chín và quyết định đưa sản phẩm 9105 ra bán chỉ với giá là 15,95 $ trong khoảng thời gian đó. Câu lệnh INSERT sau đây được ban hành cho chương trình khuyến mãi 18: INSERT INTO promotion (promoID, prodID, price, promo_start, promo_end) VALUES (18, 9105, '2012-08-01', '2012-10-01'); Chương trình khuyến mãi mới này không vi phạm tính toàn vẹn tham chiếu truyền thống bởi vì khóa ngoài 9105 vẫn tồn tại trong bảng product_avail. Tuy nhiên, bạn có thể thấy trong Hình 3 là chương trình khuyến mãi 18 vi phạm khái niệm đã chọn của chúng tôi về tính toàn vẹn tham chiếu thời gian, có nghĩa là, chính sách ngăn chặn thời gian. Tất cả chương trình khuyến mãi mới này diễn ra suốt Tháng Chín, nhưng chúng tôi không có nhà cung cấp sản phẩm 9105 nào trong Tháng Chín (và chúng tôi không còn sản phẩm nào trong kho). Nếu chúng tôi đã chọn điều kiện chồng lên hoặc bắt đầu-trong phạm vi để định nghĩa tính toàn vẹn tham chiếu thời gian, thì chương trình khuyến mãi 18 sẽ không bị vi phạm. Hình 3. Hình 3. Chương trình khuyến mãi 18 vi phạm tính toàn vẹn tham chiếu thời gian Chúng tôi có thể có khả năng nhận ra và tránh được sự vi phạm tính toàn vẹn tham chiếu thời gian này bằng cách phát hiện ra là ngày cuối cùng của chương trình khuyến mãi 18, 01.10.2012, nằm ngoài bất kỳ khoảng thời gian kinh doanh hiện có với sản phẩm 9105 trong bảng product_avail. Để khắc phục tình hình này, cần sửa đổi hoặc xóa chương trình khuyến mãi 18 khỏi bảng khuyến mãi. Bây giờ hãy xem xét một chương trình khuyến mãi khác được nhập bằng câu lệnh INSERT sau cho chương trình khuyến mãi 19: INSERT INTO promotion (promoID, prodID, price, promo_start, promo_end) VALUES (19, 9105, '2012-08-01', '2012-12-01'); Chương trình khuyến mãi này bắt đầu từ 01.08.2012 và kết thúc vào 01.12.2012. Mặc dù ngày tháng bắt đầu và kết thúc của chương trình khuyến mãi này nằm trong các khoảng thời gian có sẵn sản phẩm hiện có, tính toàn vẹn tham chiếu thời gian (chính sách ngăn chặn thời gian) bị vi phạm do có một sự gián đoạn nhà cung cấp giữa hai tháng này. Như được minh họa trong Hình 4, chương trình khuyến mãi 19 có hiệu lực trong Tháng Tám, Tháng Chín, Tháng Mười và Tháng Mười Một, nhưng chúng tôi không có sự cung cấp sản phẩm nào trong Tháng Chín và Tháng Mười. Hình 4. Chương trình khuyến mãi 18 vi phạm tính toàn vẹn tham chiếu thời gian Ví dụ về chương trình khuyến mãi 19 minh họa một thực tế quan trọng: Nếu các khoảng thời gian của hàng cha mẹ với một giá trị khóa cụ thể có thể có các sự gián đoạn thời gian, thì không thể phát hiện ra các vi phạm chính sách ngăn chặn chỉ bằng cách kiểm tra ngày tháng bắt đầu và ngày tháng kết thúc của một khoảng thời gian của hàng con có chứa trong các khoảng thời gian cha mẹ hiện có. Tuy nhiên, nếu bạn biết chắc rằng không có sự gián đoạn thời gian nào giữa các hàng cha mẹ có giá trị khóa giống nhau, thì chính sách ngăn chặn thời gian dễ thực thi hơn. Chương trình khuyến mãi 17 minh họa một nhận xét quan trọng khác: để thực thi chính sách ngăn chặn thời gian với một hoặc nhiều hàng cha mẹ thì để kiểm tra xem cả hai ngày tháng bắt đầu và ngày tháng kết thúc của một khoảng thời gian của hàng con có được chứa trong cùng một khoảng thời gian của hàng cha mẹ không thường chưa đủ. Một bước kiểm tra như vậy sẽ thực thi chính sách ngăn chặn thời gian trong một hàng cha mẹ duy nhất và sẽ loại bỏ chương trình khuyến mãi 17. Về đầu trang Các tùy chọn để thực thi tính toàn vẹn tham chiếu thời gian Thường có bốn lựa chọn để xử lý toàn vẹn tham chiếu thời gian: 1. Không thực thi. Không định nghĩa bất kỳ ràng buộc nào khi bạn biết tính toàn vẹn tham chiếu thời gian không liên quan với ứng dụng của bạn hoặc không bao giờ bị vi phạm. 2. Thực thi trong ứng dụng. Một sự lựa chọn tốt nếu các ứng dụng của bạn đã thực thi tính toàn vẹn tham chiếu thời gian. Nếu không, nó có thể dẫn đến làm tăng thêm tính phức tạp ứng dụng và đặt một gánh nặng lên các nhà phát triển ứng dụng. 3. Thực thi bằng cách sử dụng các trigger. Tạo các trigger cho các hoạt động chèn, cập nhật và xóa để thực thi tính toàn vẹn tham chiếu thời gian. 4. Thực thi bằng cách sử dụng các thủ tục đã lưu. Tạo các thủ tục đã lưu để thực thi tính toàn vẹn tham chiếu thời gian cho nhiều hàng trong hàng loạt các hoạt động. Trong phần còn lại của bài này, chúng tôi sẽ cung cấp một số ví dụ cho các tùy chọn 3 và 4, các trigger và các thủ tục đã lưu, để thực thi chính sách ngăn chặn thời gian giữa một hàng con và một hoặc nhiều hàng cha mẹ. Các mẫu mã ví dụ đã được thử nghiệm trên DB2 10 cho Linux, UNIX và Windows®, nhưng các khái niệm chung tương tự cũng áp dụng với DB2 cho z/OS®. Về đầu trang Thực thi tính toàn vẹn tham chiếu thời gian bằng các trigger Để thực thi tính toàn vẹn tham chiếu thời gian, bạn có thể tạo các trigger cho một số hoặc tất cả các sự kiện sau:  Chèn các hàng vào bảng con. o Tính toàn vẹn tham chiếu thời gian có thể bị vi phạm nếu khoảng thời gian của một chương trình khuyến mãi sản phẩm mới không có trong một khoảng thời gian kinh doanh của sản phẩm đó. Một trigger có thể phát hiện ra tình trạng này và loại bỏ việc chèn thêm chương trình khuyến mãi.  Cập nhật các hàng trong bảng con o Tính toàn vẹn tham chiếu thời gian có thể bị vi phạm nếu khóa chính hoặc khoảng thời gian kinh doanh của một hàng con bị thay đổi. Trigger có thể loại bỏ việc cập nhật nếu cần.  Xóa các hàng khỏi bảng cha mẹ. o Tính toàn vẹn tham chiếu thời gian có thể bị vi phạm nếu một sản phẩm bị xóa trong khi chương trình khuyến mãi liên quan vẫn còn tồn tại. Trong trường hợp này, trigger có thể thực hiện một quy tắc xóa theo sự lựa chọn của bạn, chẳng hạn như:  Loại bỏ và khôi phục lại hoạt động xóa.  Xóa hết dữ liệu xếp chồng và loại bỏ các hàng liên quan trong bảng con.  Sửa đổi các hàng con theo một số cách khác do ứng dụng định nghĩa.  Cập nhật các hàng trong bảng cha mẹ. o Tính toàn vẹn tham chiếu thời gian có thể bị vi phạm nếu khóa chính hoặc khoảng thời gian kinh doanh của một hàng cha mẹ bị thay đổi. Trong trường hợp này, trigger hoặc có thể loại bỏ việc cập nhật hoặc nó có thể xóa hoặc sửa đổi các hàng liên quan trong bảng con. Các phần sau sẽ cung cấp các trigger mẫu ví dụ cho các hoạt động chèn và cập nhật các hàng trong bảng con. Các trigger tính toàn vẹn tham chiếu thời gian cơ bản (không có các gián đoạn thời gian nào) Trong phần này chúng tôi giả định rằng các khoảng thời gian cho bất kỳ sản phẩm đã biết nào trong bảng cha mẹ (product_avail) không bao giờ có các gián đoạn thời gian. Giả định này hàm ý rằng sự vi phạm tính toàn vẹn tham chiếu thời gian của chương trình khuyến mãi 19 trong Hình 4 không thể xảy ra được và do đó trigger không cần kiểm tra trường hợp riêng biệt này. Điều này cho phép thực hiện trigger đơn giản. Sau đó chúng tôi thảo luận cách có thể mở rộng trigger này để xử lý các gián đoạn thời gian. Liệt kê 3 hiển thị một trigger được thực hiện bất cứ khi nào một hàng mới được chèn vào trong bảng promotion (khuyến mãi). Trigger này kiểm tra tính toàn vẹn tham chiếu thời gian cho hàng mới, tức là nó kiểm tra xem khoảng thời gian của hàng khuyến mại mới có được chứa trong (các) khoảng thời gian của một hoặc nhiều hàng cha mẹ có ID sản phẩm giống nhau không. Trigger thực hiện hai bước kiểm tra. Đầu tiên, nó kiểm tra xem ngày tháng bắt đầu của chương trình khuyến mãi