Este é o post final do resumo do capítulo 8 do e-book Primeiros passos com com o DB2 Express-C 9.7 e vamos falar sobre Tabelas de Catálogo do Sistema, DGTTs, CGTTs, Views, Índices, Integridade Referencial.

– Tabelas de Catálogo do Sistema

O DB2 possui um conjunto de tabelas e views que informam sobre os metadados dos objetos do banco de dados.  São 3 os schemas pertencentes a esse conjunto:

SYSIBM =>  Tabelas básicas. Ex: SYSIBM.SYSTABLES

SYSCAT => Views otimizadas baseadas na SYSIBM. Ex: SYSCAT.INDEXES

SYSSTAT => são as estatísticas do banco de dados. Ex: SYSSTAT.ROUTINES

Existem também as views administrativas com o schema SYSIBMADM. Ex: SYSIBMADM.TBSP_UTILIZATION

Você pode consultar a relação das views no link abaixo das System Catalog Views:

http://goo.gl/dEGri

E as views administrativas em: http://goo.gl/IUpnJ

Algumas informações administrativas (contidas nas SYSIBMADM) podem ser referenciadas também através de chamada de função:

Exemplo:

SELECT * 
FROM SYSIBMADM.ADMINTABINFO
WHERE TABSCHEMA = 'DB2ADMIN' AND TABNAME = 'TABELA1';

SELECT *
FROM TABLE(SYSPROC.ADMIN_GET_TAB_INFO_V97('DB2ADMIN', 'TABELA1' ));

–  DGTTs (Tabelas temporárias globais declaradas)  e CGTTs  (Tabelas temporárias globais criadas)

As DGTTs são tabelas temporárias criadas em memória,  que tem o tempo de vida somente durante o tempo de vida da transação (UOW – unit of work) e não podem ser referenciadas por outras transações. Como características principais temos a não contenção do catálogo, já que não é criada em nenhum catálogo DB2; não tem bloqueio de linha (locks) e conta ainda com a possibilidade de criação de índice.

Exemplo: 

DECLARE GLOBAL TEMPORARY TABLE temployees
LIKE employee NOT LOGGED;

DECLARE GLOBAL TEMPORARY TABLE tempdept
(deptid CHAR(6), deptname CHAR(20))
ON COMMIT DELETE ROWS NOT LOGGED;

Observando que as DGTTs são criadas no schema SESSION, quando referenciadas deve ser pré-fixado este schema:

Exemplo:

Select * from session.temployees;

As CGTTs foram introduzidas na versão 9.7 do DB2 LUW e diferenciam principalmente das DGTTs em virtude de sua definição ficar armazenada no catálogo DB,  desta forma outras conexões podem simplesmente usar a tabela sem ser necessário criá-la novamente. Embora a estrutura de tabela possa ser usada imediatamente, os dados de cada conexão são independentes uns dos outros, e desaparecerão após o encerramento da conexão.

Temos como características das CGTTs:

– São muito mais eficientes que as tabelas regulares, possibilitando a não utilização de log de transação;

– É possível a utilização em uma view, trigger

– Índices são suportados;

– Compressão de dados é definido com padrão;

– Grant, revoke, export, import são compatíveis. Operação de Load não é;

– Constraints não são suportadas.

Exemplo:

create global temporary table mycgtt (col1 int, col2 varchar(10))  on commit preserve rows;

– Views

Uma visualização é uma representação dos dados nas tabelas, um apontamento. Os dados da view não são armazenados separadamente, mas são obtidos quando a visualização é chamada. São suportadas visualizações aninhadas, ou seja, visualizações criadas com base em outras visualizações.

– Índices

Um índice é um conjunto ordenado de chaves que apontam, cada uma, para uma linha de uma tabela; permitindo a exclusividade, aumentando desta forma o desempenho. Algumas das características dos índices:

– A ordem do índice pode ser crescente ou decrescente;

– As chaves de índice podem ser exclusivas ou não;

– Diversas colunas podem ser usadas no índice, índice composto;

– Se o índice e os dados físicos forem agrupados em sequências de indexação semelhantes; tornam-se desta forma um índice cluster .

Integridade Referencial 

A integridade referencial permite que seu banco de dados gerencie os relacionamentos entre as tabelas.  Num banco de dados relacional, quando um registro aponta para o outro, dependente deste, há de se fazer regras para que o registro “pai” não possa ser excluído se ele tiver “filhos” (as suas dependências).

O relacionamento é feito através das chaves estrangeiras das tabelas, avaliadas antes da execução do comando de deleteinsert ou update.

Exemplo:

Observando que no exemplo temos duas tabelas: EMPLOYEE e DEPARTMENT que são ligadas  por uma integridade referencial através da coluna WORKDEPT (EMPLOYEE) e DEPTNO (DEPARTMENT).

Então temos:

Conceito Descrição
Tabela-pai Uma tabela de dados controladora, na qual existe a chave-pai
Tabela dependente Uma tabela que depende dos dados da tabela-pai. Ela também contém uma chave estrangeira. Para que uma linha exista em uma tabela dependente, já deve existir uma linha correspondente dentro de uma tabela-pai.
Chave primária Define a chave-pai da tabela-pai. Não pode conter valores nulos (NULL) e os valores devem ser exclusivos. Uma chave primária consiste em uma ou mais colunas dentro de uma tabela.
Chave estrangeira Tem como referência a chave primária da tabela-pai

Obs.: Também é possível impor restrições sobre os valores dos dados, para que se adequem a uma determinada propriedade ou regra de negócios. Por exemplo, se uma coluna de uma tabela armazena o sexo de uma pessoa, a restrição pode impor que os valores permitidos sejam somente “M” para masculino e “F” para feminino.

Para acessar as partes I e II deste Post clique em:

Parte I

Parte II

Para finalizar o post deixo uma pergunta sobre o conteúdo deste capítulo, em inglês, pois as provas de certificação IBM são em inglês. Escolha uma alternativa correta:

When is it appropriate to use a sequence?

A. When you want to control the order in which triggers are fired.

B. When you want to control the order in which stored procedures can be invoked.

C. When you want to automatically generate a numeric value that is not tied to any specific column or table.

D. When you want to automatically generate a numeric value for each row that is added to a specific table.