Geçici Geçerlilik ve Birincil / Yabancı Anahtar İlişkileri


11

Zamansal geçerlilik ve zaman özelliklerini gösteren birkaç kehanet dersini okudum. Ancak, okuduğum örneklerde, demo tablolarında kullanılan birincil anahtar yoktur.

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

Bu tablolara birincil anahtarlar eklenmeli mi? Bu geçici tablolardan birine başka bir tablo tarafından nasıl başvurulması gerektiğini merak ediyorum çünkü soruyorum. Bir geçici tablodan diğerine yabancı anahtar ekleyebilir miyim?

Bir pk / yabancı anahtar realtionhip'i ekler ve sonra tabloda başvurulan pk ile güncelleştirirsem, fk içeren tablo artık geçerli olmayan bir kayda işaret eder .... geçici veriler normal birincil anahtarı - yabancı anahtarı kırıyor mu? ilişkiler? Ve eğer öyleyse, bu performansı nasıl etkiler, 'yabancı anahtar' olarak normal bir sütun mu kullanırım ve bir sorguda başvurulan zaman dilimi için doğru olanı mı seçerim?

Normal veya sahte normal pk / fk kullanımıyla geçici verileri gösteren herhangi bir örneği veya öğreticiyi bilen veya kullanan herhangi biri var mı?

Teşekkürler

Yanıtlar:


2

Ne yazık ki, tüm RDBMS ürünlerinde SQL veya uygulamaları sunulması, geçici ilişkileri tam olarak desteklememektedir.

Yalnızca Teradata ve DB2, iki veya daha fazla sütunda zaman kısıtlamaları uygulayan bazı özelliklere sahiptir.

Örneğim:

ŞEMA TESTİNİ AYARLA;

TABLO ÜRÜNÜ
OLUŞTURUN ( product_ID INT NULL DEĞİL,
suplier NVARCHAR (50),
PRIMARY KEY (product_ID)
);

TABLO KAMPANYASI OLUŞTUR (
kampanya_ID INT NULL,
product_ID INT NULL DEĞİL,
fiyat DECIMAL,
PRIMARY KEY (kampanya_kimliği)
)
;

ALTER MASA KAMPANYASI
SÖZLEŞME EKLE XFK_campaign_productid
YABANCI ANAHTAR ( ürün_kimliği ) REFERANSLAR ÜRÜN ( ürün_kimliği )
SİLME EĞLENCE YOK;

Business_startdate ve business_enddate ve isteğe bağlı olarak
transaction_starttime ve transaction_endtime geçici sütunlarını eklerseniz , artık referans bütünlüğünü zorlayamazsınız.

Aşağıdaki gibi bir kısıtlama uygulamak istiyorsanız tetikleyicileri veya saklı yordamları veya uygulama düzeyi kodlamasını uygulamanız gerekebilir:

TABLO KAMPANYASI OLUŞTUR (
kampanya_ID INT NULL DEĞİL,
product_ID INT NULL DEĞİL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
transaction_starttime TIMESTAMP NOT NULL,
transaction_endtime TIMESTAMP NOT NULL değil , business_enddate DATE NOT NULL, transaction_starttime TIMESTAMP NOT NULL, transaction_endtime TIMESTAMP NOT NULL,
price DECIMAL,
PRIMARY KEY (kampanya_kimliği, business_starttt
)
;

DB2 için, aşağıdaki sözdiziminde geçici bir birincil anahtar sabitlemesi vardır:

TABLO KAMPANYASI OLUŞTUR (
kampanya_ID INT NULL,
product_ID INT NULL DEĞİL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
fiyat DECIMAL,
PERIOD BUSINESS_TIME (business_startdate, business_enddate),
PRIMARY KEY (kampanya_kimliği, BUSINESS_TIME OVERLAPS OLMADAN
)
;


İki veya daha fazla sütunda zaman kısıtlaması uygulayan özellikler hakkında bir bağlantı sağlayabilir misiniz?
AK

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.