PostGres: Um Banco de Dados
Orientado a Objetos
Álvaro Vinícius de Souza Coêlho
[email protected]
PostGres
• Desenvolvido na Universidade de Berkeley
• Sucessor do INGRES
• Atualmente: Miro (Comercial)
PostGres
• Versão não comercial disponível no site da
universidade
• Escrito em C
• 180.000 linhas de código
PostGres
•
•
•
•
•
•
Relacional Estendido
Objetos
OIDs “tradicionais”
Objetos Compostos
Herança Múltipla
Versões
PostGres
• Dados históricos
• Linguagem de consulta
– PostQUEL – extensão da linguagem QUEL do
INGRES
PostGres
• Dados históricos:
• Pode-se consultar sobre o estado do banco
em um determinado momento
• Armazena o estado do BD depois de cada
alteração
PostGres
• Modelo de dados baseado no relacional
• ADT (Abstract Data Type) – disponível
para que se possa definir um novo tipo no
Banco de Dados
• Todos os demais são derivados deste
PostGres
• Fornece um OID para cada elemento da
relação – “mapeando” tabelas em objetos
• Como criar classes e objetos?
PostGres
• O projeto:
Pessoa
Nome
Idade
Endereço
Casado
com
Casar(Pessoa)
Separar()
TerFilho(Nome)
Aniversaria()
Mudar(NovEnd)
Empresa
Trabalha em
RazãoSocial
Endereço
Contrata(Pessoa)
Demite(Pessoa)
Filho
de
PostGres
• Declaração:
Create empresa (CNPJ char [15],
razaosocial = char[25],
Endereço = char[30],
Pessoas = postquel)
Key (CNPJ)
PostGres
• Declaração:
Create pessoa ( RG (char[11],
nome = char[25],
Idade = int,
endereco = char [50],
empregador = empresa,
Filhode = pessoa
Casadocom = pessoa)
Key (RG)
PostGres
• Herança
Create PrestServico (precohora = float)
Inrerits (pessoa)
PostGres
• Herança múltipla
• Caso se ponha mais de uma classe no
comando inherits
• Caso haja conflito de nomes de atributos
retorna um erro.
PostGres
• Tipos de dados PostQuel
• Servem para executar um método que faz o
acesso ao relacionamento
• Uma consulta feita em PostQuel
PostGres
• Key define um atributo como OID
• Pode haver mais de um atributo
• Nenhum pode ser nulo e eles não irão se
repetir
• Implementação quase idêntica à de chave
primária do modelo relacional
PostGres
• Onde está a diferença?
• Pode-se usar um tipo definido pelo usuário
• Por exemplo, usar o par (empregador,
matricula)
• Empregador é do tipo empresa
• Como comparar empresa? Como saber se
uma empresa é igual a outra?
PostGres
• Cria-se uma função
Define function há_emp(e = empresa)
Return int as
Retrieve any(empresa.all
Where empresa.cnpj = e.cnpj
• Key empregador using há_emp, matricula)
PostGres
• Manipulação de Dados
• PostQUEL contem os comandos append, replace e
delete
– Append to pessoa (nome = ...)
– Delete pessoa where ...
– Replace pessoa (nome= ... ) where ...
• Qualquer semelhança com QUEL NÃO terá
sido mera coincidência!
PostGres
• Percurso do fecho transitivo de um esquema
• Característica do postquel em extensão a
quel
• Mostrar todos os ancestrais de José
PostGres
• A consulta
Retrieve * into classeresposta
(pessoa.filhode) from a in classeresposta
Where pessoa.nome = “José”
Or pessoa.nome = getnome(a.filhode))
• * obriga que a consulta será executada até não
retornar mais dados
• Observar que a sintaxe do getnome não é OO
PostGres
• A consulta
Retrieve (e.nome) from e in pessoa*
Where e.nome = “José”
• * aqui obriga que a consulta seja executada
em todas as subclasses da classe pessoa
PostGres
• A consulta
Retrieve func.salario
From func[D]
Where func.nome = “José”
• Retorna o salário de José na data D
PostGres
• Regras
• Ação executada no banco sob ordem de
determinado evento
On evento to objeto where condição
Then do [instead]
comandos
PostGres
• Evento pode ser
–
–
–
–
–
–
Retrieve
Replace
Delete
Append
New (replace ou append)
Old (delete ou replace)
PostGres
• Objeto é o nome de uma classe, ou do
atributo de uma classe
• Condição é um qualificador qualquer usado
em PostQUEL
• Instead indica que o comando deve
substituir, e não acompanhar o evento que
gerou a regra
PostGres
• Podem se referenciar a new e current em
lugar do nome da classe
– New é o novo valor (caso de inclusões ou
alterações)
– Current é o valor atual (caso de exclusões ou
alterações)
• Refuse: indica o cancelamento do evento
(Rollback)
PostGres
• Exemplo:
• O Salário de um funcionário no cargo de
professor deve ser o que está determinado
para este emprego na tabela Cargos
On new funcionario.salario where
funcionario.cargo = “Professor”
Then do replace new.salario = c.salario
From c in cargos
Where c.nome = “Professor”
PostGres
• Críticas
– Métodos implementados em funções – não nas
classes
– Não implementa OIDs naturais
– Relacionamentos se confundem com variáveis
de instância
– Padrão proprietário
– Viola o encapsulamento
PostGres
• Qualidades
–
–
–
–
–
Herança e Herança múltipla
Versões de dados ao longo do tempo
Completeza implementada em PostQuel
Aceita tipos definidos pelo usuário
É baratinho...
PostGres.
FIM!
“Numa democracia, o direito de ser ouvido não inclui
automaticamente o direito de ser levado a sério”
Hubert Humphrey
Degas
Download

PostGres - GEOCITIES.ws