Часова валідність та основні / зовнішні ключові відносини


11

Я прочитав кілька навчальних посібників про оракул, які показують часові обгрунтованості та часові особливості. Однак у прикладах, які я читав, в демонстраційних таблицях не використовується первинний ключ.

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

Чи слід до цих таблиць додавати первинні ключі? Я запитую, бо мені цікаво, як на одну з цих часових таблиць має посилатися інша таблиця. Чи можу я додати іноземний ключ від однієї тимчасової таблиці до іншої?

Якщо я додаю реквізит pk / іноземний ключ, а потім оновіть посилання в таблиці разом з pk, таблиця з fk вказує на запис, який вже не має значення .... чи тимчасова інформація порушує звичайний первинний ключ - зовнішній ключ стосунки? І якщо так, то як це впливає на ефективність, чи просто я використовую звичайний стовпець як "зовнішній ключ" і вибираю потрібний для відповідного періоду часу у запиті?

Хтось знає чи є в пригоді будь-які приклади чи підручники, які показують тимчасові дані з нормальним або псевдо-нормальним використанням pk / fk?

Спасибі

Відповіді:


2

На жаль, присутній SQL або його реалізація у всіх продуктах RDBMS не повністю підтримує тимчасові відносини.

Тільки Teradata та DB2 мають деякі функції, що реалізують обмеження, що мають час у двох або більше стовпців.

Мій приклад:

Встановити тест схеми;

СТВОРИТИ ТАБЛИЧНИЙ ПРОДУКТ (
product_ID INT НЕ НУЛЬНИЙ,
надто NVARCHAR (50),
PRIMARY KEY (product_ID)
);

СТВОРИТИ ТАБЛИЧНУ КАМПАНІЮ (
кампанія_ID INT НЕ NULL,
product_ID INT НЕ NULL,
ціна DECIMAL,
PRIMARY KEY (кампанія_ID)
)
;


АЛЬТЕР ТАБЛИЧНА КАМПАНІЯ ДОБАВИТИ ОГРАНИЧЕННЯ XFK_campaign_productid
ІНОЗЕМНИЙ КЛЮЧ (product_ID) ДОВІДКИ ПРОДУКТУ (product_id)
НА ВИДАЛЕННЯ НЕ ДІЙ;

Якщо ви додаєте тимчасові стовпці business_startdate та business_enddate та необов'язково
transak_starttime та transak_endtime, ви більше не можете застосовувати референтну цілісність.

Можливо, вам доведеться реалізувати тригери або збережені процедури або кодування рівня програми, якщо ви хочете реалізувати таке обмеження:

CREATE TABLE КАМПАНІЯ (
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,
ціна DECIMAL,
PRIMARY KEY (CAMPAIGN_ID, business_startdate, transaction_starttime)
)
;

Для DB2 існує часовий вміст первинного ключа у такому синтаксисі:

CREATE TABLE КАМПАНІЯ (
CAMPAIGN_ID INT NOT NULL,
PRODUCT_ID INT NOT NULL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
ціна DECIMAL,
ТЕРМІН BUSINESS_TIME (business_startdate, business_enddate),
PRIMARY KEY (CAMPAIGN_ID, BUSINESS_TIME без накладання)
)
;


Чи можете ви надати посилання на функції, що реалізують обмеження, що мають час у двох або більше стовпців?
АК

@AlexKuznetsov ось посилання ibm.com/developerworks/data/library/techarticle/…
аналітик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.