300 likes | 401 Views
PostGres: Um Banco de Dados Orientado a Objetos. Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br. 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
E N D
PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br
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?
Pessoa Empresa RazãoSocial Endereço Nome Idade Endereço Trabalha em Contrata(Pessoa) Demite(Pessoa) Casar(Pessoa) Separar() TerFilho(Nome) Aniversaria() Mudar(NovEnd) Casado com Filho de PostGres • O projeto:
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