Resolução de Problemas Álvaro Vinícius “Degas” [email protected].
PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho...
Transcript of PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho...
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
NomeIdadeEndereço
Casar(Pessoa)Separar()TerFilho(Nome)Aniversaria()Mudar(NovEnd)
Empresa
RazãoSocialEndereço
Contrata(Pessoa)Demite(Pessoa)
Trabalha em
Filho de
Casado com
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 = pessoaCasadocom = 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çãoDefine 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 consultaRetrieve * 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 consultaRetrieve (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 consultaRetrieve 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 eventoOn 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 CargosOn new funcionario.salario where
funcionario.cargo = “Professor”Then do replace new.salario = c.salarioFrom c in cargosWhere 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 HumphreyDegas