PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho...

30
PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho [email protected]

Transcript of PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho...

Page 1: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres: Um Banco de Dados Orientado a Objetos

Álvaro Vinícius de Souza Coêlho

[email protected]

Page 2: 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)

Page 3: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Versão não comercial disponível no site da universidade

• Escrito em C

• 180.000 linhas de código

Page 4: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Relacional Estendido

• Objetos

• OIDs “tradicionais”

• Objetos Compostos

• Herança Múltipla

• Versões

Page 5: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Dados históricos

• Linguagem de consulta– PostQUEL – extensão da linguagem QUEL do

INGRES

Page 6: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 7: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 8: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Fornece um OID para cada elemento da relação – “mapeando” tabelas em objetos

• Como criar classes e objetos?

Page 9: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 10: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Declaração:Create empresa (CNPJ char [15],

razaosocial = char[25],

Endereço = char[30],

Pessoas = postquel)

Key (CNPJ)

Page 11: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres• Declaração:

Create pessoa ( RG (char[11],nome = char[25],Idade = int,endereco = char [50],empregador = empresa,Filhode = pessoaCasadocom = pessoa)

Key (RG)

Page 12: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Herança

Create PrestServico (precohora = float)

Inrerits (pessoa)

Page 13: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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.

Page 14: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Tipos de dados PostQuel

• Servem para executar um método que faz o acesso ao relacionamento

• Uma consulta feita em PostQuel

Page 15: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 16: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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?

Page 17: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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)

Page 18: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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!

Page 19: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Percurso do fecho transitivo de um esquema

• Característica do postquel em extensão a quel

• Mostrar todos os ancestrais de José

Page 20: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 21: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 22: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• A consultaRetrieve func.salario

From func[D]

Where func.nome = “José”

• Retorna o salário de José na data D

Page 23: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Regras

• Ação executada no banco sob ordem de determinado eventoOn evento to objeto where condição

Then do [instead]

comandos

Page 24: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres

• Evento pode ser– Retrieve– Replace– Delete– Append– New (replace ou append)– Old (delete ou replace)

Page 25: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 26: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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)

Page 27: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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”

Page 28: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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

Page 29: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

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...

Page 30: PostGres: Um Banco de Dados Orientado a Objetos Álvaro Vinícius de Souza Coêlho alvaro_degas@yahoo.com.br.

PostGres.

FIM!

“Numa democracia, o direito de ser ouvido não inclui automaticamente o direito de ser levado a sério”

Hubert HumphreyDegas