Временная валидность и отношения с основными /внешними ключевыми

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

http://docs.oracle.com/cd/E16655_01/appdev 0,121 /e17620 /adfns_design.htm # ADFNS1005 http://www.oracle.com/webfolder/technetwork /учебники /OBE /дб /12с /г1 /ILM /временной /temporal.html

Должны ли быть добавлены первичные ключи к этим таблицам? Я спрашиваю, потому что мне интересно, как одна из этих временных таблиц должна ссылаться на другую таблицу. Можно ли добавить внешний ключ из одной временной таблицы в другую?

Если я добавлю реальную сделку pk /foreign key, а затем обновляю ссылку в таблице с помощью pk, таблица с fk указывает на запись, которая больше не актуальна .... выполняет временные перерывы данных нормальный первичный ключ - отношения внешнего ключа? . И если да, как это влияет на производительность, я просто использую обычный столбец как «внешний ключ» и выбираю правильный для ссылочного периода времени в запросе?

Кто-нибудь знает или имеет какие-либо примеры или руководства, которые могут показывать временные данные с обычным или псевдо-нормальным использованием pk /fk?

Спасибо

11 голосов | спросил user1778606 15 SunEurope/Moscow2013-12-15T08:26:04+04:00Europe/Moscow12bEurope/MoscowSun, 15 Dec 2013 08:26:04 +0400 2013, 08:26:04

1 ответ


2

К сожалению, данный SQL или его реализации во всех продуктах РСУБД не полностью поддерживают временные отношения.

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

Мой пример:

SET SCHEMA TEST;

СОЗДАТЬ ТАБЛИЧНУЮ ПРОДУКЦИЮ (
product_ID INT NOT NULL,
suplier NVARCHAR (50),
ПЕРВИЧНЫЙ КЛЮЧ (product_ID)
) ;

СОЗДАТЬ ТАБЛИЦУ КАМПАНИИ (
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
цена DECIMAL,
ПЕРВИЧНЫЙ КЛЮЧ (campaign_ID)
)
;

ALTER TABLE CAMPAIGN
ADD CONSTRAINT XFK_campaign_productid
FOREIGN KEY (product_ID) ССЫЛКИ ПРОДУКТ (product_id)
ВКЛ. УДАЛИТЬ НЕТ ДЕЙСТВИЙ;

Если вы добавите временные столбцы business_startdate и business_enddate и, если хотите, transaction_starttime и transaction_endtime, вы больше не можете использовать ссылочную целостность.

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

СОЗДАТЬ ТАБЛИЦУ КАМПАНИИ (
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,
ПЕРВИЧНЫЙ КЛЮЧ (campaign_ID, business_startdate, transaction_starttime)
)
;

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

СОЗДАТЬ ТАБЛИЦУ КАМПАНИИ (
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
цена DECIMAL,
PERIOD BUSINESS_TIME (business_startdate, business_enddate),
ПЕРВИЧНЫЙ КЛЮЧ (campaign_ID, BUSINESS_TIME БЕЗ ПЕРЕГОВОРОВ)
)
;

ответил Analyst 16 MonEurope/Moscow2013-12-16T11:41:21+04:00Europe/Moscow12bEurope/MoscowMon, 16 Dec 2013 11:41:21 +0400 2013, 11:41:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132