Arquitetura de Três Níveis (ANSI/SPARC)
// Externo, Conceitual e Interno
Nível Externo / Visão
Define a parte do banco de dados vista por cada usuário ou aplicação. Cada visão esconde detalhes desnecessários, fornecendo abstração e segurança. Criada via DDL.
Nível Conceitual / Lógico
Representa o esquema global dos dados, independente do armazenamento físico. O DBA cria e mantém o esquema conceitual para a comunidade de usuários.
Nível Interno / Físico
Detalha como os dados são armazenados (arquivos, índices, blocos). Garante abstração em relação aos bits e bytes físicos.
-- Criando uma visão externa CREATE VIEW clientes_resumo AS SELECT id, nome FROM clientes WHERE ativo = true; -- Consultando a visão SELECT * FROM clientes_resumo;
CREATE VIEW clientes_pedidos AS SELECT c.nome, c.email FROM clientes c JOIN pedidos p ON c.id = p.id_cliente WHERE p.valor > 100;
Componentes de um SGBD
// De consultas a transações
Processador de Consultas
- Parser: valida e gera árvore de análise.
- Otimizador: escolhe plano de execução mais eficiente (ex.: RDS no System R).
- Executor: processa operações de leitura e escrita.
Mecanismo de Armazenamento
- Buffer manager: gerencia páginas em memória (ex.: RSS no System R).
- Arquivos e índices: B-Tree, Hash, etc.
- Alocação de espaço em disco.
Gerenciador de Transações
- Controle de concorrência: locks, MVCC.
- Recuperação: logs, checkpoints.
Dicionário de Dados / Catálogo
Repositório de metadados: tabelas, colunas, tipos, permissões, estatísticas.
-- Consultando dicionário de dados SELECT table_name, column_name, data_type FROM information_schema.columns WHERE table_name = 'clientes'; -- Exemplo de transação BEGIN; UPDATE clientes SET ativo = false WHERE id = 1; COMMIT;
SELECT table_name, column_name, data_type FROM information_schema.columns WHERE table_name = 'pedidos';
Independência de Dados
// Lógica e Física
Independência Lógica
Alterações no esquema conceitual (ex.: adicionar atributo) não afetam visões externas nem aplicações existentes.
Independência Física
Mudanças no armazenamento físico (ex.: índices, estruturas de arquivo) são transparentes ao esquema conceitual.
-- Exemplo de independência lógica ALTER TABLE clientes ADD COLUMN telefone VARCHAR(20); -- Visão existente não é afetada SELECT * FROM clientes_resumo; -- Exemplo de independência física CREATE INDEX idx_clientes_email ON clientes(email);
ALTER TABLE clientes ADD COLUMN data_nascimento DATE; SELECT * FROM clientes_resumo; -- Visão não inclui a nova coluna
Atividade: Estudo de Caso
// Mapeando a arquitetura do PostgreSQL
Escolha o PostgreSQL e desenhe um diagrama textual mostrando:
1. Visões externas (ex.: visão para app de vendas).
2. Esquema conceitual (tabelas e relacionamentos).
3. Esquema interno (arquivos, índices B-Tree).
Discuta como os componentes (processador de consultas, armazenamento, transações, catálogo) interagem para executar:
SELECT * FROM produto WHERE categoria_id = 10;
-- Exemplo de visão externa CREATE VIEW produtos_vendas AS SELECT nome, preco FROM produto WHERE categoria_id = 10; -- Esquema conceitual CREATE TABLE produto ( id SERIAL PRIMARY KEY, nome VARCHAR(100), preco DECIMAL, categoria_id INT ); -- Índice interno CREATE INDEX idx_produto_categoria ON produto(categoria_id);
EXPLAIN SELECT * FROM produto WHERE categoria_id = 10; -- Output: Mostra uso do índice idx_produto_categoria
Quiz Interativo
// Teste seus conhecimentos sobre arquitetura de SGBDs
Teste de Conhecimento
Responda às perguntas abaixo para consolidar o aprendizado sobre a arquitetura de SGBDs relacionais.
1. Qual é o propósito do nível externo na arquitetura ANSI/SPARC?
2. O que descreve o nível conceitual?
3. Qual componente do SGBD gerencia índices e buffers?
4. O que é independência lógica de dados?
5. Qual é a função do dicionário de dados?
6. Qual nível da arquitetura ANSI/SPARC representa o esquema global, independente do armazenamento físico?
7. Qual componente do SGBD é responsável por gerenciar buffers e estruturas em disco?
8. O que descreve a independência física de dados?
9. Qual componente do SGBD interpreta, otimiza e executa consultas SQL?
RUN db_architecture_check; -- Quiz finalizado. Parabéns por explorar a arquitetura de SGBDs!