Hiệu lực tạm thời và các mối quan hệ chính / nước ngoài


11

Tôi đã đọc qua một số hướng dẫn tiên tri cho thấy tính năng thời gian và tính hợp lệ. Tuy nhiên, trong các ví dụ tôi đã đọc, không có khóa chính được sử dụng trong các bảng demo.

http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_design.htmlm#ADFNS1005 http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm /temporal/temporal.html

Có nên thêm khóa chính vào các bảng này? Tôi đang hỏi bởi vì tôi đang tự hỏi về cách một trong những bảng tạm thời này nên được tham chiếu bởi một bảng khác. Tôi có thể thêm khóa ngoại từ bảng tạm thời này sang bảng khác không?

Nếu tôi thêm một thực tế khóa pk / khóa ngoại, và sau đó cập nhật tham chiếu trong bảng với pk, bảng có điểm fk thành một bản ghi không còn phù hợp .... liệu dữ liệu tạm thời có phá vỡ khóa chính thông thường - khóa ngoại các mối quan hệ? Và nếu vậy, điều này ảnh hưởng đến hiệu suất như thế nào, tôi chỉ sử dụng một cột bình thường làm 'khóa ngoại' và chọn đúng cho khoảng thời gian được tham chiếu trong truy vấn?

Có ai biết hoặc có bất kỳ ví dụ hoặc hướng dẫn tiện dụng nào hiển thị dữ liệu tạm thời với việc sử dụng pk / fk bình thường hoặc giả không?

Cảm ơn

Câu trả lời:


2

Thật không may, hiện tại SQL hoặc các triển khai của nó trong tất cả các sản phẩm RDBMS không hỗ trợ đầy đủ các mối quan hệ tạm thời.

Chỉ Teradata và DB2 có một số tính năng triển khai các ràng buộc có thời gian trong hai hoặc nhiều cột.

Ví dụ của tôi:

KIỂM TRA SCHema;

TẠO SẢN PHẨM BẢNG (sản
phẩm_ID INT KHÔNG NULL,
NVARCHAR trước đó (50),
KEY PRIMARY (sản phẩm_ID)
);

TẠO BẢNG CHIẾN DỊCH (
chiến dịch_ID INT KHÔNG NULL, sản
phẩm_ID INT KHÔNG NULL,
giá KHAI THÁC,
KHÓA CHÍNH (chiến dịch_ID)
)
;


THAY ĐỔI BẢNG CHIẾN DỊCH THÊM THÊM XÂY DỰNG XFK_campaign_productid
FOREIGN KEY (sản phẩm_ID ) TÀI LIỆU THAM KHẢO SẢN PHẨM (sản phẩm_id)
TRÊN XÓA KHÔNG CÓ HÀNH ĐỘNG;

Nếu bạn thêm các cột tạm thời business_startdate và business_enddate và tùy chọn
giao dịch_starttime và giao dịch_endtime, bạn không thể thực thi tính toàn vẹn tham chiếu nữa.

Bạn có thể phải thực hiện các trình kích hoạt hoặc các thủ tục được lưu trữ hoặc mã hóa mức ứng dụng nếu bạn muốn thực hiện một ràng buộc như thế này:

CREATE TABLE CHIẾN DỊCH (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
business_startdate NGÀY NOT NULL,
NGÀY business_enddate NOT NULL,
transaction_starttime dấu thời gian NOT NULL,
transaction_endtime dấu thời gian NOT NULL,
DECIMAL giá,
PRIMARY KEY (campaign_id, business_startdate, transaction_starttime)
)
;

Đối với DB2 tồn tại một khóa chính tạm thời theo cú pháp sau:

CREATE TABLE CHIẾN DỊCH (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
business_startdate NGÀY NOT NULL,
business_enddate NGÀY NOT NULL,
giá thập phân,
GIAI ĐOẠN BUSINESS_TIME (business_startdate, business_enddate),
PRIMARY KEY (campaign_id, BUSINESS_TIME KHÔNG chồng chéo)
)
;


Bạn có thể cung cấp một liên kết về các tính năng thực hiện các ràng buộc có thời gian trong hai hoặc nhiều cột không?
AK

@AlexKuznetsov ở đây là liên kết ibm.com/developerworks/data/l
Nhà phân tích
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.