Validità temporale e relazioni chiave primaria / esterna


11

Ho letto diversi tutorial di Oracle che mostrano validità temporale e funzionalità temporali. Tuttavia, negli esempi che ho letto, non esiste una chiave primaria utilizzata nelle tabelle 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

Le chiavi primarie devono essere aggiunte a queste tabelle? Lo sto chiedendo perché mi chiedo come una di queste tabelle temporali debba essere referenziata da un'altra tabella. Posso aggiungere una chiave esterna da una tabella temporale a un'altra?

Se aggiungo un realtionship pk / chiave esterna e quindi aggiorno il riferimento nella tabella con pk, la tabella con fk punta a un record che non è più pertinente .... i dati temporali interrompono la normale chiave primaria - chiave esterna relazioni? In tal caso, in che modo ciò influisce sulle prestazioni, utilizzo semplicemente una colonna normale come "chiave esterna" e seleziono quella giusta per un periodo di riferimento in una query?

Qualcuno sa o ha a portata di mano esempi o tutorial che mostrano dati temporali con un uso pk / fk normale o pseudo-normale?

Grazie

Risposte:


2

Purtroppo presentare SQL o le sue implementazioni in tutti i prodotti RDBMS non supporta completamente le relazioni temporali.

Solo Teradata e DB2 hanno alcune funzionalità che implementano vincoli che hanno tempo nelle due o più colonne.

Il mio esempio:

SET TEST DI SCHEMA;

CREATE TABLE PRODUCT (
product_ID INT NOT NULL,
suplier NVARCHAR (50),
PRIMARY KEY (product_ID)
);

CREA CAMPAGNA TABELLA (ID_
campagne NON NOT NULL,
ID_INT prodotti NON NULL,
prezzo DECIMAL,
PRIMARY KEY (campaign_ID)
)
;

ALTER TABLE CAMPAGNA
AGGIUNGI VINCITORE XFK_campaign_productid
CHIAVE ESTERA (product_ID) RIFERIMENTI PRODOTTO (product_id) SULL'ELIMINAZIONE DI
AZIONE;

Se si aggiungono colonne temporali business_startdate e business_enddate e facoltativamente
transazione_starttime e transazioni_endtime, non è più possibile applicare l'integrità referenziale.

Potrebbe essere necessario implementare trigger o stored procedure o codifica a livello di applicazione se si desidera implementare un vincolo come questo:

CREATE TABLE CAMPAGNA (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
DATA business_startdate NOT NULL,
DATA business_enddate NOT NULL,
transaction_starttime TIMESTAMP NOT NULL,
transaction_endtime TIMESTAMP NOT NULL,
DECIMAL prezzo,
PRIMARY KEY (campaign_id, business_startdate, transaction_starttime)
)
;

Per DB2 esiste un vincolo di chiave primaria temporale nella sintassi seguente:

CREA CAMPAGNA TABELLA (ID_
campagna NON NULL,
ID_INT prodotto NON NULL, data_inizio
business NON DATA NULL, data DATE NON NULL
business,
prezzo DECIMALE,
PERIODO BUSINESS_TIME (
data_inizio business, data_attività) , PRIMARY KEY (campaign_ID, BUSINESS_TIME SENZA SOVRAPPOSIZIONI
)
;


Potete fornire un collegamento su funzioni che implementano vincoli che hanno tempo nelle due o più colonne?
AK,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.