# Alteração da Estrutura de Banco de Dados

## Exclusão de Campos ou Tabelas

Quando um campo ou tabela deixar de ser utilizado, ele **não** deve ser removido da unit de criação e **não** deve ser executado nenhum comando SQL de exclusão (`DROP`).

A estrutura deve permanecer intacta no banco de dados, mesmo sem utilização pelo sistema.

---

## Escolha da Unit para Criação de Tabelas

A unit utilizada para a criação de uma tabela é definida pelo seu escopo de uso:

- **`CriaTabEsp.pas`:** Utilizada para tabelas específicas de um único módulo.
- **`CriaTab.pas`:** Utilizada para tabelas compartilhadas entre dois ou mais módulos do sistema.

---

## Atualização e Versionamento de Tabelas

#### Cenário A: Tabelas de Módulo Único (`CriaTabEsp.pas`)

Ao criar ou modificar uma tabela de módulo único, é obrigatório registrar a alteração na unit `uMatrizAlt__.pas` correspondente ao módulo modificado, chamando o método de atualização com o número da versão do módulo.

- **Exemplo Prático (Módulo de Compras - CC):** Se uma nova coluna for adicionada a uma tabela exclusiva de Compras, você deve acessar a unit `uMatrizAltCC.pas` e incluir a chamada:

```pascal
AddMatrizAlt('PLANFISC', '5.194');
```

#### Cenário B: Tabelas Compartilhadas (`CriaTab.pas`)

Quando uma tabela compartilhada for criada ou modificada, o desenvolvedor deve identificar todos os módulos afetados e replicar a chamada de atualização em **todas** as units `uMatrizAlt__.pas` desses respectivos módulos.

##### Como identificar os módulos afetados:

1. Acesse a unit `DDL.Classes.pas`.
2. Verifique, dentro das procedures `CriaMatrizSistemas__`, quais delas fazem uso dessa tabela. Você encontrará uma estrutura semelhante a esta:

```pascal
AddTabela(AMatriz, 'PLANFISC', 'Plano Fiscal');
```

3. Para cada módulo identificado, adicione a chamada `AddMatrizAlt` com o número da versão do módulo na sua respectiva unit de alteração.

- **Exemplo Prático:** Você adicionou um novo campo na tabela `PLANFISC` (alterando a `CriaTab.pas`). Ao buscar por `PLANFISC` na unit `DDL.Classes.pas`, você identificou que ela é utilizada pelas seguintes procedures: 
    - `CriaMatrizSistemasCC` (Módulo CC)
    - `CriaMatrizSistemasEX` (Módulo EX)
    - `CriaMatrizSistemasVD` (Módulo VD)
    
    Portanto, você deverá abrir as units `uMatrizAltCC.pas`, `uMatrizAltEX.pas` e `uMatrizAltVD.pas` e adicionar a chamada de atualização em cada uma delas:
    
    ```pascal
    AddMatrizAlt('PLANFISC', '5.194');
    ```
    
    <p class="callout warning">**Atenção:** cada módulo possui um número de versão diferente. Caso tenha dúvidas, consulte o guia de [como identificar o número da versão de cada módulo](https://wiki.supersoft.com.br/books/padroes-de-codigo/page/como-identificar-o-numero-da-versao-de-um-modulo).</p>