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).
16 trang |
Chia sẻ: lylyngoc | Lượt xem: 1464 | Lượt tải: 1
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