Schema e Instância

Autor

Douglas Braga

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.