Schema e Instância
Ao trabalhar com bancos de dados, é fundamental distinguir dois conceitos complementares: o schema (estrutura) e a instância (conteúdo).
Schema do Banco de Dados
O schema de um banco de dados é a sua estrutura lógica — a descrição das relações, seus atributos e os tipos de dados de cada atributo. O schema muda raramente e é definido durante o projeto do banco de dados.
Representa-se o schema de uma relação pelo nome da relação seguido dos seus atributos entre parênteses:
\[professor(\underline{id\_prof},\ nome,\ id\_escola,\ ch\_semanal,\ salario)\]
O atributo sublinhado indica a chave primária (conceito detalhado na próxima seção).
O banco de dados da UnDF possui oito relações com os seguintes schemas:
- \(centro(\underline{id\_centro},\ sigla,\ nome\_centro)\)
- \(escola(\underline{id\_escola},\ sigla,\ nome\_escola,\ id\_centro)\)
- \(curso(\underline{id\_curso},\ sigla\_curso,\ nome\_curso,\ id\_escola,\ n\_semestres,\ carga\_horaria,\ tipo\_curso)\)
- \(professor(\underline{id\_prof},\ nome,\ id\_escola,\ ch\_semanal,\ salario)\)
- \(aluno(\underline{id\_aluno},\ nome,\ id\_curso,\ ano\_ingresso)\)
- \(disciplina(\underline{id\_disciplina},\ nome\_disciplina,\ id\_curso,\ semestre,\ carga\_horaria)\)
- \(ministra(\underline{id\_disciplina},\ \underline{ano},\ \underline{semestre},\ \underline{turma},\ id\_prof,\ horario,\ sala)\)
- \(matricula\_disciplina(\underline{id\_disciplina},\ \underline{ano},\ \underline{semestre},\ \underline{turma},\ \underline{id\_aluno},\ nota,\ aprovado)\)
Instância do Banco de Dados
A instância de um banco de dados é o conjunto de dados efetivamente armazenados em um determinado momento — um snapshot do banco de dados.
A instância muda continuamente à medida que dados são inseridos, alterados ou removidos. O schema, por sua vez, permanece estável.
A tabela a seguir é uma instância do schema professor:
| id_prof | nome | id_escola | ch_semanal | salario |
|---|---|---|---|---|
| 21200001 | Eduarda Souza | 21 | 20 | 3200 |
| 21400002 | Felipe Araujo | 21 | 40 | 6400 |
| 31200001 | Gustavo Costa | 31 | 20 | 3300 |
| 31400002 | Helena Carvalho | 31 | 40 | 6700 |
| 31200003 | Igor Melo | 31 | 20 | 3100 |
| 11400001 | Bruno Teixeira | 11 | 40 | 6500 |
| 11400002 | Carla Pinto | 11 | 40 | 6600 |
Amanhã, após a contratação de um novo professor, essa instância terá oito tuplas — mas o schema continuará sendo exatamente o mesmo.
Analogia com Programação
A distinção entre schema e instância tem um paralelo direto com conceitos de linguagens de programação:
| Conceito em BD | Analogia em programação |
|---|---|
| Schema de uma relação | Declaração de tipo de uma variável (ex: struct Professor) |
| Instância de uma relação | Valor atual da variável em tempo de execução |
| Schema do banco de dados | Conjunto de todas as declarações de tipos do programa |
| Instância do banco de dados | Estado da memória do programa em um dado instante |
Assim como o tipo de uma variável não muda durante a execução do programa mas o seu valor muda o tempo todo, o schema de um banco de dados é estável enquanto a instância está em constante evolução.
Para Praticar
1. Schema ou instância? Classifique cada operação abaixo como alteração de schema, de instância ou nenhuma das duas:
| Operação | Tipo de alteração |
|---|---|
Inserir um novo aluno na tabela aluno |
? |
Adicionar a coluna email à tabela professor |
? |
Executar um SELECT para listar disciplinas |
? |
Remover a tabela prereq do banco |
? |
| Atualizar o salário de um professor | ? |
| Operação | Tipo |
|---|---|
| Inserir um novo aluno | Instância |
Adicionar coluna email |
Schema |
SELECT para listar disciplinas |
Nenhuma |
Remover a tabela prereq |
Schema |
| Atualizar salário | Instância |
Schema muda com DDL (CREATE, ALTER, DROP); instância muda com DML (INSERT, UPDATE, DELETE); consultas não alteram nada.
2. Schema implica instância? É possível existir um schema sem nenhuma instância? E uma instância sem schema?
Schema sem instância: sim — uma tabela recém-criada com CREATE TABLE e zero linhas tem schema mas instância vazia. Instância sem schema: não é possível em bancos relacionais — toda instância deve obedecer ao schema definido previamente. O schema é a “planta”, a instância é o “edifício”.
3. Novo atributo, schema ou instância? O schema de aluno é:
\[aluno(\underline{id\_aluno},\ nome,\ id\_curso,\ ano\_ingresso)\]
Se a UnDF decidir registrar também o e-mail institucional de cada aluno, o que muda — schema ou instância? Escreva o novo schema.
Muda o schema — é preciso adicionar um atributo. O novo schema seria:
\[aluno(\underline{id\_aluno},\ nome,\ id\_curso,\ ano\_ingresso,\ email)\]
Após essa mudança de schema, a instância precisaria ser atualizada (via UPDATE) para popular o novo campo — caso contrário, os valores ficariam null.