Validade temporal e relacionamentos de chave primária / estrangeira


11

Eu li vários tutoriais da Oracle que mostram validade temporal e recursos de tempo. No entanto, nos exemplos que li, não há chave primária usada nas tabelas de demonstração.

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

As chaves primárias devem ser adicionadas a essas tabelas? Estou perguntando, porque estou pensando em como uma dessas tabelas temporais deve ser referenciada por outra tabela. Posso adicionar uma chave estrangeira de uma tabela temporal para outra?

Se eu adicionar um realtionship de chave estrangeira / pk e atualizar o referenciado na tabela com o pk, a tabela com o fk apontará para um registro que não é mais relevante ... os dados temporais quebram a chave primária normal - chave estrangeira relacionamentos? E, se sim, como isso afeta o desempenho, apenas uso uma coluna normal como a 'chave estrangeira' e seleciono a correta para um período de referência em uma consulta?

Alguém conhece ou tem alguns exemplos ou tutoriais úteis que mostram dados temporais com uso normal ou pseudo-normal de pk / fk?

obrigado

Respostas:


2

Infelizmente, o SQL presente ou suas implementações em todos os produtos RDBMS não suportam totalmente as relações temporais.

Somente o Teradata e o DB2 têm alguns recursos que implementam restrições com tempo nas duas ou mais colunas.

Meu exemplo:

SET TESTE DO ESQUEMA;

CRIAR TABELA DE PRODUTO (
product_ID INT NOT NULL,
fornecedor NVARCHAR (50),
PRIMARY KEY (product_ID)
);

CRIAR CAMPANHA DE TABELA (
campaign_ID INT NÃO NULL,
product_ID INT NOT NULL,
preço DECIMAL,
PRIMARY KEY (campaign_ID)
)
;

ALTER TABLE CAMPAIGN
ADD CONSTRAINT XFK_campaign_productid
CHAVE ESTRANGEIRA (product_ID) REFERÊNCIAS PRODUCT (product_id)
EM EXCLUIR SEM AÇÃO;

Se você adicionar colunas temporais business_startdate e business_enddate e, opcionalmente,
transaction_starttime e transaction_endtime, não poderá mais impor a integridade referencial.

Pode ser necessário implementar gatilhos ou procedimentos armazenados ou codificação no nível do aplicativo se você deseja implementar uma restrição como esta:

CREATE TABLE CAMPAIGN (
campaign_ID INT NÃO NULL,
product_ID INT NÃO NULL,
business_startdate DATE NOT NULL,
business_enddate DATE NOT NULL,
transaction_starttime TIMESTAMP NOT NULL,
transaction_endtime TIMESTAMP NOT NULL,
preço DECIMAL,
PRIMARY KEY (campaign_ID, first_startdate
)
;

Para o DB2, existe uma restrição de chave primária temporal na seguinte sintaxe:

Criar campanha TABLE (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
DATA business_startdate NOT NULL,
DATA business_enddate NOT NULL,
DECIMAL preço,
PERÍODO BUSINESS_TIME (business_startdate, business_enddate),
PRIMARY KEY (campaign_id, BUSINESS_TIME SEM sobreposições)
)
;


Você pode fornecer um link sobre os recursos que implementam restrições com tempo nas duas ou mais colunas?
AK

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.