Validitas Temporal dan Hubungan Utama / Asing

11

Saya telah membaca beberapa tutorial oracle yang menunjukkan validitas temporal dan fitur waktu. Namun, dalam contoh yang saya baca, tidak ada kunci utama yang digunakan dalam tabel demo.

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

Haruskah kunci utama ditambahkan ke tabel ini? Saya bertanya karena saya bertanya-tanya tentang bagaimana salah satu tabel temporal ini harus dirujuk oleh tabel lain. Bisakah saya menambahkan kunci asing dari satu tabel temporal ke yang lain?

Jika saya menambahkan pk / foreign keyhiphip, dan kemudian memperbarui yang direferensikan dalam tabel dengan pk, tabel dengan fk menunjuk ke catatan yang tidak lagi relevan .... apakah data sementara mematahkan kunci primer normal - kunci asing hubungan? Dan jika demikian, bagaimana hal ini mempengaruhi kinerja, apakah saya hanya menggunakan kolom normal sebagai 'kunci asing' dan memilih yang tepat untuk periode waktu yang dirujuk dalam kueri?

Adakah yang tahu atau memiliki contoh atau tutorial yang berguna yang menunjukkan data sementara dengan penggunaan pk / fk normal atau pseudo-normal?

Terima kasih

pengguna1778606
sumber

Jawaban:

2

Sayangnya SQL yang ada atau implementasinya di semua produk RDBMS tidak sepenuhnya mendukung hubungan temporal.

Hanya Teradata dan DB2 yang memiliki beberapa fitur yang mengimplementasikan kendala yang memiliki waktu di dua atau lebih kolom.

Contoh saya:

SET TES SKEMA;

BUAT PRODUK TABEL (
product_ID INT NOT NULL,
suplier NVARCHAR (50),
KUNCI UTAMA (product_ID)
);

CREATE TABLE CAMPAIGN (
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
harga DECIMAL,
KUNCI UTAMA (campaign_ID)
)
;

ALTER TABLE CAMPAIGN
ADD CONSTRAINT XFK_campaign_productid
KUNCI ASING (product_ID) REFERENSI PRODUK (product_id)
PADA HAPUS HAPUS TANPA TINDAKAN;

Jika Anda menambahkan kolom temporal business_startdate dan business_enddate dan opsional
transaction_starttime dan transaction_endtime, Anda tidak dapat lagi menerapkan integritas referensial.

Anda mungkin harus menerapkan pemicu atau prosedur tersimpan atau pengkodean tingkat aplikasi jika Anda ingin menerapkan batasan seperti ini:

MENCIPTAKAN KAMPANYE TABEL (
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
transaction_starttime TIMESTAMP NOT NULL,
transaction_endtime TIMESTAMP NOT NULL,
harga DECIMAL,
KEY PRIMARY (KEJUTAN PRIMER, kampanye), waktu bisnis_startdate
)
;

Untuk DB2 ada sementara batasan kunci primer dalam sintaks berikut:

BUAT KAMPANYE TABEL (
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
harga DECIMAL,
PERIOD BUSINESS_TIME (business_startdate, business_enddate),
PRIMARY KEY (kampanye_ID, BUSINESS_TIME
)
;

Analis
sumber
Bisakah Anda memberikan tautan pada fitur yang menerapkan kendala memiliki waktu di dua atau lebih kolom?
AK
@AlexKuznetsov di sini adalah tautan ibm.com/developerworks/data/library/techarticle/…
Analis