DES:BncDdsIntegridade

De Wiki Unioeste NTI
Ir para: navegação, pesquisa

VoltarVoltar a Página Inicial - Menu Sistemas

Integridade entre tabelas

Os bancos de dados dos sistemas da Unioeste foram agrupados por sistema. Por exemplo, o BdAcademicoProducao armazena as tabelas do sistema Academus, o BdRcrHumanos, as tabelas do SGRH. O banco BdUnioesteProducao agrupa tabelas que são utilizadas por mais de um sistema, sendo como um banco de dados central, agrupando as tabelas compartilhadas pelos demais sistemas.
Essa separação das tabelas em bancos menores sempre foi um problema, pois perde-se a integridade referencial dos bancos de dados relacionais, ocorrendo de registros filhos ficarem "órfãos", ou seja, o registro pai é excluído sem que seja feita uma checagem nas tabelas filhas de outros bancos de dados, permitindo assim a exclusão.
Para evitar isso, foi implementada a checagem de integridade por triggers nas tabelas pai, que fazem a consulta nas tabelas filhas, impedindo a exclusão de um registro caso exista registros dependentes em tabelas filhas.

Procedimentos implementados

  • BdUnioesteModelo: criado o banco de dados que contém todas as tabelas de todos os bancos de dados. Este banco é gerado a partir do script do DER, onde as tabelas são especificadas como um banco de dados único, mantendo a integridade referencial entre todos os objetos
  • BdUnioesteModelo.LogDDL: criada tabela para armazenar o nome das tabelas que sofreram alterações no BdUnioesteModelo
  • BdUnioesteModelo.BdUnioesteModelo_DDL: trigger Data Definition Language (DDL) que será executada nas operações CREATE_TABLE, ALTER_TABLE, DROP_TABLE, feitas em qualquer tabela do BdUnioesteModelo. Esta trigger irá gravar o nome de cada tabela alterada na tabela LogDDL
  • BdUnioesteModelo.spGeraTriggerIntegridade: criada stored procedure que é responsável por gerar as triggers de integridade para as tabelas que possuem tabelas filhas. Este procedimento pode receber como parâmetro o nome da tabela pai, ou então pode-se passar NULL, para que sejam geradas as triggers para todas as tabelas do BdUnioesteModelo. O procedimento usa o BdUnioesteModelo para obter a lista de tabelas dependentes de uma tabela pai. A partir desta listagem, é construída a trigger, a qual é criada no banco de dados que possui a tabela pai. A trigger tem funcionamento simples: existem SELECTS para cada tabela filha em seu respectivo banco de dados. Se for encontrado um registro filho, é gerado um erro e a execução do DELETE é interrompida.
  • BdUnioesteModelo.spProcessaLogDDL: criada stored procedure que é responsável por buscar na tabela LogDDL as tabelas ainda não processadas. Para cada uma destas tabelas, será chamado a spGeraTriggerIntegridade, a qual fará a criação/atualização das triggers da tabela
  • jUnioesteModelo_ProcessaDDLLog: criado job que irá executar todos os dias à noite, chamando a spProcessaLogDDL que, por sua vez, chama a spGeraTriggerIntegridade

Funcionamento geral

Quando uma alteração/criação/exclusão de tabela precisar ser feita em qualquer banco de dados, o DBA deverá:

  1. executar as alterações inicialmente em seu banco de dados produção
  2. executar posteriormente as alterações no BdUnioesteModelo
  3. a trigger DDL vai ser disparada, gravando as tabelas alteradas na LogDDL
  4. o job jUnioesteModelo_ProcessaDDLLog é executado à noite, fazendo então a alteração/criação das triggers de integridade para todas as tabelas alteradas pelo DBA
    1. se necessário, pode-se antecipar a execução, fazendo manualmente

O DBA deverá seguir o roteiro acima, na ordem descrita, para garantir a correta criação das triggers de integridade.

Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas