Roberto Baselio Lopes RA0502013 – 8º Semestre

ESTUDO COMPARATIVO DE IMPLEMENTAÇÃO DE MODELOS DE BANCO DE DADOS

Jaguariúna 2008

2

Roberto Baselio Lopes RA0502013 – 8º Semestre

ESTUDO COMPARATIVO DE IMPLEMENTAÇÃO DE MODELOS DE BANCO DE DADOS

Monografia apresentada à disciplina "Trabalho de Conclusão de Curso", do curso de Ciência da Computação da Faculdade de JAGUARIÚNA, sob orientação do Professor Luciano Calderoni, como exigência parcial para conclusão do curso de graduação.

Jaguariúna 2008

3

LOPES, Roberto Baselio. Estudo comparativo de implementação de modelos de banco de dados. Monografia defendida e aprovada na FAJ em 09 de dezembro de 2008 pela banca examinadora constituída pelos professores:

________________________________ Prof. Luciano Calderoni Professor Orientador - FAJ

________________________________ Prof. Fernando Augusto Zancheta Professor FAJ

4

Dedico este trabalho a minha companheira, que nos momentos mais difíceis esteve a meu lado, a minha mãe, pelos esforços realizados em me auxiliar, a meu professor orientador, pela maneira como me conduziu na elaboração deste, e acima de tudo a Deus, por ter me atendido e guiado pelo caminho correto.

por também acreditar em meu potencial. pelas restrições impostas a si mesma. pelos sacrifícios realizados em prol de conclusão desta atividade. a meu professor orientador Luciano Calderoni. E por último. Renato Freire Ricardo. também impactaram no resultado deste trabalho. a fim de me auxiliar nesta missão. Aos colegas Rafael Rodrigues Bueno. aceitando a tarefa de me orientar na realização deste. . aos quais. Rafael Barbosa Camargo e Kleber Quilez. canalizando e direcionando louvavelmente as minhas idéias e ações neste projeto.5 AGRADECIMENTOS Começo por agradecer a minha atual namorada e futura companheira. mas certamente o mais importante. com nossos acalorados debates e compartilhamento de conhecimento. A minha mãe Gécia Baselio.

figuras espiritualizadas. mas na verdade. Se a juventude cair nesse erro de acreditar que sim. todo mundo é igual.6 Eu acredito que não existem heróis. por exemplo. (Renato Russo) . elas inevitavelmente vão acabar descobrindo que o ídolo delas tem pés de barro. E principalmente a juventude. que são grandes modelos para a humanidade. A gente pode ter pessoas realmente espetaculares. religiosas. Eu não acredito que eu tenha uma verdade a mais.

implementação. Estes reduziram a necessidade do uso de drivers para conexões e eliminou a manipulação de dados para torná-los compatíveis com modelo relacional. as triggers. garantir a integridade. tornando-os genéricos e possíveis de serem aplicados a qualquer linguagem programação. . e mais especificamente ainda. Com o grande avanço das linguagens de programação. Paralelamente. a persistência de dados tornou-se um dos mais importantes pilares dos sistemas de informações. Estudo comparativo de implementação de modelos de banco de dados. Diante desta realidade surgem vários modelos/métodos de implantação de persistência de dados. surgiu a necessidade de integrá-las aos bancos de dados. RESUMO Com o advento da informática e sua utilização nas mais diversas finalidades. os que se utilizam da linguagem SQL. chaves primárias e estrangeiras. sendo os mais empregados atualmente os bancos de dados relacionais (SGDB). SGDBOO). 2008. a confiabilidade e a não replicação de dados passou a ser o fundamento principal na implementação de sistemas gerenciadores de bancos de dados. Monografia (Bacharelado em Ciência da Computação) – Curso de Ciência da Computação da faculdade de Jaguariúna. também surgiram os frameworks facilitando a implementação das camadas de persistência. Dentro deste contexto. temos a evolução das linguagens de programação orientada a objetos trazendo consigo os bancos de dados orientados a objetos. Framework. framework. Em outra vertente. nas operações de CRUD e alguns dos principais recursos dos bancos de dados. tecnologia. Jaguariúna. então surgiram camadas de persistências que realizavam a comunicação com os bancos de dados através de drivers. Os exemplos mais básicos são o JDBC ou o ODBC. O objetivo deste trabalho foi pesquisar as diferenças nas metodologias de persistência de dados (SGDB nativo. PALAVRAS CHAVES: Banco de dados. Roberto Baselio.7 LOPES.

The research aimed to find differences in methods of data persistence (SGDB native. framework. ensuring the integrity. the triggers.8 ABSTRACT With the advent of computers and their use in many different purposes. Inside of this context. technology. . and even more specifically. made generic possible to be applied to any programming language. The most basic example the JDBC or ODBC. the databases oriented to object. we have the evolution of programming language guided to objects bringing. the relational databases (SGDB). With the big breakthrough programming languages. These reduced the need for drivers for connections and dropped the manipulation of data to make them compatible necessary in the relational model. came the need to integrate them to the databases. it also ederged the frameworks facilitating the implementation of layers of persistence. reliability and no data replication has become the essential foundation of system managers in the implementation of databases. then emerged categories of persistency held that the communication with the databases through drivers. as currently employed. in addition. the ones which use SQL. the persistence of data has become one of the most important pillars of information systems. SGDBOO). Other side. primary keys and foreign keys. in CRUD operations and some of the main resources of databases. implementation. KEY WORDS: Database. Before this situation arise various models / methods of implantation of data of persistence. Framework.

......3..... 15  1................................................2... 40  5.......... 16  1................... 25  4............2....................3.............. ............................................. 28  4...........................  ESTUDO DE CASO................  XML ..........  BD4o ...  Hibernate (framework).................................... 11  LISTA DE CODIGOS FONTE..............................2................................................. 27  4.....................................  Cronograma ..............................1............................................... 21  2.......................... 16  1.........................................................................................  SOBRE OS BANCOS DE DADOS E FRAMEWORKS ....................1........ 18  2..........................2...3.......... 28  4. 31  5....................................................................... 20  2...............................................  Etapas da implementação banco relacional........  Etapas da implementação banco orientado a objeto........................................................................  Objetivos .......................................................................................................................................2....... 12  LISTA DE ILUSTRAÇÕES ..............................1..................................................1....................................3..................................................  Modelo Relacional .....................................................................................1........................................................................................... 30  5..............  Relacionamentos e Operações de CRUD .  INTRODUÇÃO.............1...............................................................3.............. 37  5............  PostgreSQL (modelo relacional) ............... 14  1........1..........................................................................  Hibernate .... 27  4......................1.......  Capítulos ...................................................................................................................................... 15  1.................. 31  5.......................................2................................1................1......................2...................  Framework ..........................................................................9 Sumario LISTA DE SIGLAS ..  MODELOS DE IMPLANTAÇÃO .................. 17  2... 23  3...... 21  2.......... 24  3.............  UML .........................4.....................................................  Etapas da implementação banco via framework..... 18  2............................  Operações de CRUD ...................................................2.................4.........2.. 20  2.................................................................................................. 27  4...................................5.......................1............... 41  5..............................  Modelo Orientado a objeto .....................3............2................  DB4o ........................................................................2........................................  Metodologia .........................................................................................................................................  DB4o (orientado à objeto) .........................................................................3............................................................................................ 42  .......  Hibernate .................................................................1................................................................................... 41  5..............  PostgreSQL ..........  Procedures e Triggers ................  PostgreSQL . 33  5.... 13  LISTA DE TABELAS.................................................  JDBC ......................3.............. 41  5..1................................  CONCEITOS ................. 29  5......  DER ......1..... 24  3............................. 24  3..............................  Índices e chaves ..................

................................... 45  7...................................................................  BIBLIOGRAFIA ............. 46  .............4... 42  5..........................................................4........  Metodologia .............................. 42  5....... 42  5.........................  Resultados .........................................................4............1...................................... 43  6.............................................2...................................... 44  6......................................................  Comparativo de características .......................................................3...........10 5........  Desempenho ..........................................................  RESULTADOS OBTIDOS .........1..  Ambiente ......4.....

Sistema Gerenciador de Banco de Dados Orientado a Objeto. Object Database Management Group. DAODBADB4oDBOOHQLJAVA/SEJDBCDERODBCODMGOORDBMSSIGSGDBSGDBOOSGDBRSQLUMLXMLData Acess Object. Java Database Connectivity. Structured Query Language. Banco de dados orientado a objeto. Java Standard Edition. Acrônimo da expressão em língua Inglesa Create. Retrieve.11 LISTA DE SIGLAS ANSICRUDAmerican National Standards Institute. . Unified Modeling Language. usada para definir quatro operações básicas usadas em bancos de dados relacionais. Sistema Gerenciador de Banco de Dados Relacional. Relational database management system Sistema de Informação Geográfica. Sistema Gerenciador de Banco de Dados. Update e Destroy. Diagrama Entidade-Relacionamento. DataBase Administrator. Orientação à Objeto. Open Data Base Connectivity. DataBase for Object. Hibernate Query Language. eXtensible Markup Language.

................................................................................... 34 Código Fonte 7: Classe que realiza a conexão com banco via Hibernate ......................................... 30 Código Fonte 3: Comando SQL para criação das tabelas ............... 32 Código Fonte 5: Classe para persistência de dados via JDBC ........................ 35 Código Fonte 8: Arquivo XML de mapeamento da classe proprietário ..................................... 38 Código Fonte 12: Classe cliente relacionada coma classe veiculo ............................ 33 Código Fonte 6: Arquivo XML para configuração da conexão via Hibernate ................ 40 Código Fonte 14: exemplo de declaração de chave primaria .. 35 Código Fonte 9: Arquivo XML de mapeamento da classe veículo .............. 36 Código Fonte 10: Operações de CRUD via Hibernate ..............12 LISTA DE CODIGOS FONTE Código Fonte 1: Operação de CRUD via SQL .............. 29 Código Fonte 2: Classes a serem persistidas ....................................................................................................................... 37 Código Fonte 11: Classe de conexão com bando de dados OO ..... 31 Código Fonte 4: Classe para conexão com SGDBR via JDBC ........ 39 Código Fonte 13: Operações de CRUD via DB4o.................................................... ................................ 41 ............................

.............................................. 20 Ilustração 6: Manipulação de dados via framework ........................................................... 22 Ilustração 8: Diagrama de classe para implementação de base de dado OO ............................ 23 Ilustração 9: DER das classes a serem persistidas .............. 21 Ilustração 7: Comparação de manipulação de dados ente SGBDR e SGBDOO .............................................................................................. 19 Ilustração 2: Exemplo de DER .............13 LISTA DE ILUSTRAÇÕES Ilustração 1: Exemplo de relacionamento ................................................................................................................. 31 ........... 19 Ilustração 4: Exemplo DER 1:N................................................ 19 Ilustração 3: Exemplo DER 1:1 .................... 19 Ilustração 5: Exemplo DER N:N ......................................................................................

.................... 45 ...................................................14 LISTA DE TABELAS Tabela 1: Cronograma de atividades ........... 16 Tabela 2: Comparativo entre implementações.................................................................................. 43 Tabela 3: Comparativo entre modelos de implementação ................

1. O que dificultava um pouco era o prazo que era muito curto mesmo. relacional (amplamente usado) e o orientado a objetos. O primeiro SGBD surgiu no final de 1960 tendo como motivação os primitivos sistemas de arquivos disponíveis na época. Um banco de dados é usualmente mantido e acessado por meio de um software conhecido como Sistema Gerenciador de Banco de Dados (SGBD). em redes. Atualmente. estes sistemas não controlavam acessos concorrentes nem replicação de dados dentro do SGDB. escolhi o db4o para trabalhar em um projeto de um sistema com mais ou menos 50 usuários. Muitas vezes o termo banco de dados é usado como sinônimo de SGDB. uma peça chave no controle das informações e na integridade do banco de dados. de forma que um programa de computador possa consultá-lo para responder questões. é comum misturar os dois conceitos. No mercado existem diversos tipos de banco de dados orientados a objetos como o NeoDatis. Dentre eles. de forma pura. fazendo da figura do DBA (database administrator). Era um projeto relativamente pequeno. 2008). reduzida ou estendida. os bancos de dados se tornaram o fator principal nas tomadas de decisões. . mai. Objetivos Segundo Gláucio Guerra (http://glaucioguerra. Com a evolução dos ERPs modernos. curto prazo de entrega e sem muita complexidade de modelagem. Porém. ou melhor. os SGBDs passaram a utilizar diferentes formas de representação para descrever a estrutura das informações contidas em seus bancos de dados. INTRODUÇÃO O termo banco de dados foi criado inicialmente pela comunidade de computação. para indicar coleções organizadas de informações armazenadas em computadores. Aceitando uma abordagem mais técnica. porém o termo é atualmente usado para indicar tanto bancos de dados em computadores quanto coleções de dados em geral. com a evolução dos vários paradigmas de persistência. Com o tempo. enquanto o termo SGDB deve ser aplicado ao software com a capacidade de manipular bancos de dados de forma geral.com/2007/09/05/banco-dedados-orientado-a-objetos-dbo4/.wordpress. sendo hoje em dia o relacional e o orientado a objetos os mais evidentes. MyOODB e o db4o que foram escritos em Java.15 1. qual paradigma é o mais recomendado. os seguintes modelos de dados são normalmente utilizados pelos SGBDs: hierárquico. um banco de dados é uma coleção de registros salvos em um computador em um modo sistemático. Mas com o surgimento. O termo banco de dados deve ser aplicado apenas aos dados. ObjectDB. surge à grande questão. 1. Normalmente um SGBD adota um modelo de dados. sendo no máximo 5 com uso simultâneo.

Hibernate para framework e DB4o para banco de dados orientado a objeto.2. focando os produtos PostgreSQL para banco de dados relacional. serão avaliadas as características dos modelos de implementação. Outros objetivos secundários são: • • Disponibilizar informações sobre o funcionamento das tecnologias. não precisei falar com o DBA para criar um schema no Oracle me livrando de toda a burocracia que é inevitável na maioria das vezes. Metodologia Através de pesquisa. 1. OK Set OK Out. não resultando em custos extras no caso de implantação física. OK Ago. OK Jul. evitei toda aquela configuração de mapeamento objeto-relacional com o Hibernate. 1.16 O db4o foi perfeito neste caso. bem como suas particularidades. Disponibilizar comparativos entre modelos de implementação. OK Tabela 1: Cronograma de atividades . Com o intuito de analisar esta afirmação. Sistema Gerenciador de Bando de Dados Orientado à objeto (SGDBOO) e utilizando um framework para um SGDBR.3. OK Nov. este trabalho tem o objetivo de disponibilizar um benchmark aos interessados quanto à qual modelo de persistência de dados resulta numa maior produtividade. A escolha destes produtos deve-se principalmente a suas características “opensource”. Comparando os modelos de implementação Sistema Gerenciador de Banco de Dados Relacional (SGDBR). Cronograma Atividade Levantamento Bibliográfico Preparação do ambiente de desenvolvimento Implantação do programa base Implantação das tecnologias de persistência Coleta de resultados preliminares Compilação do relatório inicial Testes Correção de Divergências Análise dos Resultados Entrega do trabalho Mar OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK Abr OK Mai OK Jun.

bem como as etapas recomendadas para tal implementação. a metodologia adotada na pesquisa e o cronograma de atividades.4. CAPÍTULO 6 – Neste ponto estão descritas as conclusões. Capítulos CAPÍTULO 1 – Neste capítulo consta uma pequena introdução sobre o tema. CAPÍTULO 5 – Neste capítulo consta um estudo de caso onde é minimamente implementado um banco de dados nos três modelos de persistência propostos.17 1. CAPÍTULO 4 – Neste capítulo consta uma breve explanação sobre as tecnologias e conceitos necessários para a implementação dos bancos de dados selecionados. CAPÍTULO 2 – Neste capítulo são abordados os conceitos dos modelos de persistência de dados. CAPÍTULO 3 – Neste capítulo temos uma breve descrição dos bancos de dados e framework selecionados para a pesquisa deste trabalho. os objetivos que se pretende atingir com este trabalho. CAPÍTULO 7 – Aqui são descritos os livros e sites pesquisados. com base na análise do estudo de caso. . a fim de se obter um panorama geral de cada modelo.

18 2. determinando os valores que podem e os que não podem ser armazenados. chaves . uma coleção dos operadores. O modelo relacional atende as necessidades de aumentar a independência de dados nos sistemas gerenciadores de banco de dados. o relvar (variável de relacionamento) e restrições de base de dados. a maioria apresenta funcionalidades que violam a teoria. Estas definem os estados e mudanças de estado. ou informalmente tabelas.1. que constituem a base da linguagem SQL. poucos sistemas de gestão de bases de dados seguem o modelo de forma restrita. A discussão se esses bancos de dados merecem ser chamados de relacional ficou esgotada com tempo e foi padronizada pela arquitetura ANSI / SPARC em três níveis de componentes: • • • uma coleção de estruturas de dados. tendo como estrutura básica uma tabela para cada entidade. incapacidade de representar parte da informação e perda de informação. variando assim em poder e complexidade. Os relacionamentos são construídos pelos atributos em comum nas entidades. que descreve como as bases de dados devem funcionar. Outro ponto forte são os relacionamentos propriamente ditos. o orientado à objeto e uma introdução ao conceito do framework como ferramenta auxiliar de persistência de dados. Essas restrições são: integridade referencial. Embora esta teoria seja a base para o software de bases de dados relacionais. a álgebra e o cálculo relacionais. se mostrando mais flexível e adequado ao solucionar os vários problemas que surgem na concepção e implementação da base de dados. o atributo. Modelo Relacional O modelo relacional é uma teoria matemática desenvolvida por Edgar Frank Codd (1970). provendo um conjunto de funções apoiadas na álgebra relacional para persistência e recuperação de dados. uma coleção de restrições da integridade. logo algumas restrições precisaram ser impostas para evitar aspectos indesejáveis. 2. formalmente chamadas de relações. MODELOS DE IMPLANTAÇÃO Existem vários modelos de implementação de banco de dados. abaixo teremos os conceitos dos modelos focos de estudos desta monografia: o modelo relacional. definindo o conjunto consistente de estados de base de dados e de alterações de estados. As restrições de integridade podem ser de quatro tipos: o domínio (ou tipo de dados). Um dos pontos fortes do modelo relacional de banco de dados proposto por Edgar é a possibilidade de definição de um conjunto de restrições de integridade. como: Replicação de informação.

Ilustração 1: Exemplo de relacionamento Ilustração 2: Exemplo de DER No exemplo acima se pode identificar que o Cliente Pedro ocupa o quarto simples. que tem a função de indicar como ocorre este relacionamento: O relacionamento pode ser dos tipos: • 1:1 (um para um) – Exemplo: casamento.19 e integridade de junções de relações. Ilustração 4: Exemplo DER 1:N . mostram como ocorre o relacionamento entre tabelas. onde um veículo pode possuir apenas um proprietário. As figuras a seguir. Outras características dos relacionamentos é seu tipo. onde um marido pode possuir apenas uma esposa e uma esposa apenas um marido. mas um proprietário pode possuir vários veículos. e o Cliente Paulo ocupa o quarto de casal. Ilustração 3: Exemplo DER 1:1 • 1:N (um para ene) – Exemplo: Veiculo automotor.

1. sendo que se diferencia de uma simples biblioteca. Schimidt (Object-oriented application frameworks . O processo de criação de uma base dados consiste em: • • • • • • Elaborar um modelo de entidade relacionamento DER.2. um framework pode ser definido como uma estrutura de suporte definida em que outro projeto de software pode ser organizado e desenvolvido. Frameworks são projetados com a intenção de facilitar o desenvolvimento dos projetos software. linguagens de script e outros softwares para ajudar a desenvolver e juntar diferentes componentes de um projeto de software. Criação da classe/função que vai persistir o objeto 2. bibliotecas de código. Etapas da implementação banco relacional. Framework “Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação” Mohamed Fayad e Douglas C. uma vez que se concentra apenas em oferecer implementação de funcionalidades.20 • N:N (ene para ene) – Exemplo quarto de hotel. Criação das tabelas no banco de dados. Criação de classe/função de conexão com o banco de dados. 1997) Em computação. . reduzindo teoricamente o tempo de implantação. Ilustração 5: Exemplo DER N:N 2.1. onde um quarto pode ser alugado por varias pessoas e uma pessoa pode alugar vários quartos. Criação dos objetos que serão persistidos. Definição dos relacionamentos. Um framework pode incluir programas de suporte.

Criação das tabelas no banco de dados onde serão persistidos os dados Criação dos objetos que serão persistidos. . ou semi-automático. Etapas da implementação banco via framework O processo de criação de uma base de dados consiste basicamente em: • • • • • • Elaborar um modelo de entidade relacionamento DER. já que no SGDBR o objeto deve ser “desmontado” na inserção. abr.21 A sua utilização para persistência de dados consiste numa camada intermediária que oculta as operações realizadas diretamente no banco.htm. construção de consultas através da montagem de protótipos. também é conhecida como um paradigma de análise. Inserção recuperação Ilustração 6: Manipulação de dados via framework A utilização de um framework de persistência de dados tende a facilitar esta atividade de “desmontar” e reconstruir.macoratti. projeto e programação de sistemas baseado na composição e interação entre diversas unidades de software chamadas de objetos. Criação do mapeamento (geralmente em XML) relacionando as propriedades do objeto aos campos na tabela Criação do arquivo de propriedades para que o Hibernate se conecte ao banco de dados. A motivação para o uso de frameworks de persistência é ter um mecanismo simples para persistência de objetos com bancos de dados SQL. a orientação a objetos. Criação da classe que vai persistir o objeto 2. 2. e “reconstruído” na recuperação. 2008).3.net/net_oocb.1. Modelo Orientado a objeto Segundo José Carlos Macoratti (http://www. foco em OO. mapeamento automático.2.

Esse grupo é constituído por representantes dos principais fabricantes de DBOO e seus membros têm o compromisso de incorporar o padrão em seus produtos. acredita-se que os DBOO serão usados em aplicações especializadas. Juntamente com o avanço da linguagem de programação orientadas a objeto. A principal característica de um BDOO e a forma como ele persiste os dados. o DBOO salva o objeto diretamente no banco. Na figura abaixo temos um digrama de um DBOO. enquanto os sistemas relacionais continuarão a sustentar os negócios tradicionais. Como mencionado anteriormente. Seu surgimento se deve aos limites de armazenamento e representação semântica impostas no modelo relacional. algumas das falhas perceptíveis do modelo relacional pareceram ter sido solucionadas com esta tecnologia e acreditava-se que tais bancos de dados ganhariam grande parcela do mercado. A estrutura padrão para os DBOO foi feita pelo Object Database Management Group (ODMG). Alguns exemplos são os sistemas de informações geográficas. em vez de projeto. prefere-se usar modelagem orientada ao objeto. Quando os DBOO foram introduzidos. . O termo Modelo Orientado a Objetos é usado para documentar o padrão que contém a descrição geral das facilidades de um conjunto de linguagens de programação orientadas a objetos e a biblioteca de classes que pode formar a base para o SGDBOO. porém. Os bancos de dados orientados a objeto (DBOO) começaram a se tornar comercialmente viáveis em meados de 1980. Ilustração 7: Comparação de manipulação de dados ente SGBDR e SGBDOO Na fase de projeto de um DBOO podem ser utilizados os diagramas de classes em UML em substituição ao DER no banco de dados relacional. onde as estruturas de dados baseadas em relações são suficientes.22 Em alguns contextos. o modelo relacional precisa “desmontar” o objeto. surgiram os bancos de dados propostos nos mesmo paradigmas. que são mais facilmente construídos usando tipos complexos de dados. Hoje.

1. Definição dos relacionamentos. Etapas da implementação banco orientado a objeto. Para a criação de banco de dados orientado a objetos são necessários os seguintes passos: • • • • Elaboração da UML ou DER das classes persistidas. . Criação da classe que vai persistir o objeto. Criação do objeto que será persistido.23 Ilustração 8: Diagrama de classe para implementação de base de dado OO 2.3.

e liderado por Gavin King. e diversos sistemas de informações geográficas. espalhados ao redor do mundo. e em 1987 tornou-se operacional. um banco com rotas de asteróides. O desempenho foi melhorado e vários recursos foram adicionados. para enfatizar a relação do POSTGRES original com a linguagem SQL. 3. com melhorias no executor de consultas e algumas partes do código foram refeitas.0). JBoss Inc (empresa comprada pela Red Hat) contratou os principais desenvolvedores do programa para fazer o seu suporte. o projeto foi rebatizado "PostgreSQL". NSF (Fundação Científica Nacional) e ESL Inc.2. foram focadas em confiabilidade e portabilidade. Em 1991 era lançada a versão 3. uma aplicação de análise financeira. e a linguagem SQL foi implementada. A implementação do projeto POSTGRES iniciou em 1986. A primeira versão lançada para o público externo foi em 1989. ARO (Departamento de Pesquisa Militar).2. Hibernate Hibernate foi criado por desenvolvedores Java. cuja última versão foi a 4. O POSTGRES foi utilizado para diversos sistemas de pesquisa e de produção.1. O código do POSTGRES foi aproveitado em um produto comercializado pela Illustra Information Technologies (posteriormente incorporada à Informix. Enquanto a ênfase do Postgres95 tinha sido a correção de falhas e otimização do código. O POSTGRES foi originalmente financiado pelo DARPA (Agência de Projetos de Pesquisa Avançada para Defesa). Por: José Claudio Vahl Júnior e Marcílio da Silva Oliveira em Uma introdução dirigida (2005) dizem que “O Hibernate é uma solução livre para armazenar objetos Java em bases de dados relacionais (Object/Relational Mapping - . SOBRE OS BANCOS DE DADOS E FRAMEWORKS Muitos bancos de dados comercialmente viáveis estão disponíveis para uso. Em 1996 o nome Postgres95 tornou-se inadequado. As versões subseqüentes. PostgreSQL O PostgreSQL é uma derivação do projeto POSTGRES da universidade de Berkeley.24 3. que agora pertence à IBM). até o Postgres95.0. sempre seguindo os padrões de SQL anteriormente estabelecidos 3. o tamanho do código fonte foi reduzido em 25%. Posteriormente. O seu código foi totalmente revisado. A numeração da versão voltou a seguir o padrão anterior ao Postgres95 (considerada a 5. o desenvolvimento das primeiras versões do PostgreSQL foi orientada à melhoria de recursos e implementação de novos recursos. e a primeira versão do PostgreSQL foi a 6. Neste capitulo abordaremos os softwares e frameworks que são foram utilizados nesta monografia. A versão 95 (Postgres95) teve mudanças radicais em relação ao projeto original.

Hibernate pode ser utilizado em aplicações Java standalone ou em aplicações Java EE. Hertz. tem fácil aprendizado. já utilizam o db4o. o Hibernate também possui uma linguagem (HQL) que facilita a recuperação dos dados evitando esforços com manipulação direta de SQL e JDBC” O objetivo do Hibernate é diminuir a complexidade entre os programas Java. BMW. utiliza pouco recurso computacional. causa um pequeno aumento no tempo de execução. comenta. O db4o é um banco de dados inteiramente orientado a objetos. 3. mantendo o programa portável para quaisquer bancos de dados SQL. ObjectDB. Uma característica do Hibernate é o uso da HQL (Hibernate Query Language) que é um dialeto SQL para o Hibernate. O Hibernate abstrai geração das chamadas SQL e libera o desenvolvedor do trabalho manual da conversão dos dados resultantes. cliente-servidor e desktop. DB4o No mercado existem diversos tipos de banco de dados orientados a objetos como o NeoDatis. mas a HQL é totalmente orientada a objeto. Seagate entre outras.25 ORM). São inúmeras as vantagens em relação ao banco de dados relacional: a ferramenta é nativa em Java (ou . Além de mapear as classes Java para as tabelas do banco de dados. Empresas como a Bosch. Read. sem precisar utilizar consultas SQL ou qualquer tipo de framework que faça o mapeamento objeto-relacional. oferece rapidez de inserção e consulta. polimorfismo e encapsulamento. Intel. Posso dizer que minha experiência foi muito boa com este BDOO com os seguintes parâmetros: • • Pouca concorrência Baixa complexidade no DER Sincronização com PDA • .com/2007/09/05/bancode-dados-orientado-a-objetos-dbo4/. MyOODB e o db4o que foram escritos em Java. em contrapartida (segundo estudos). Gláucio Guerra (http://glaucioguerra. Update e Delete). não possui nenhuma linha de código SQL para CRUD (Create. utilizando servlet ou sessões EJB beans.3. incluindo os paradigmas de herança. baseado no modelo orientado a objeto. Ela é uma poderosa linguagem de consulta que se parece muito com a SQL. que precisam trabalhar com um SGBDR.wordpress. Em seu artigo. Este SGDB permite armazenar classes Java diretamente no banco. podendo ser utilizado em aplicações do tipo embarcada.Net). 2008). mai.

mai 2008). Este banco roda até 44 vezes mais rápido que os BDs que já conhecemos. .org/.polepos. disponibilizada pelo site PolePosition que é um projeto open-source para Benchmark de banco de dados (http://www.26 A principal característica do DB4o.

abaixo temos descritos os principais conceitos necessários para a persistência de dados. tanto para humanos quanto para computadores. O propósito da Linguagem de Modelagem Unificada (Unified Modeling Language .UML) é prover uma notação de modelagem independente de linguagem de programação e de plataforma. no artigo “Why Model With UML?” (http://www.netbeans.org/kb/55/uml-why-model. UML A Unified Modeling Language (UML) é uma linguagem de modelagem não proprietária de terceira geração. o esboço da versão 0. É importante distinguir entre um modelo UML e um diagrama UML. o último é uma representação gráfica da informação do primeiro. Possibilidade de criação de tags sem limitação.27 4. . mas ela auxilia a visualizar o desenho e a comunicação entre objetos.2. A UML não é uma metodologia de desenvolvimento. Ferramentas UML são tão versáteis quanto os fundamentos de UML. em outubro de 1995. XML O XML (eXtensible Markup Language) foi estimulado pela insatisfação com os formatos existentes (padronizados ou não). O principio do projeto era criar uma linguagem que pudesse ser lida por software. Nesta mesma época. a versão 0. quando Rumbaugh se juntou a Booch na Rational.8 do Método Unificado (como era conhecido). Simplicidade e Legibilidade. 2007). 4. Os esforços para a criação da UML tiveram início em outubro de 1994. o World Wide Web Consortium (W3C) começou a trabalhar em meados da década de 1990 em uma linguagem de marcação que combinasse a flexibilidade da SGML com a simplicidade da HTML. portanto. jun. e integrar-se com as demais linguagens. Com o objetivo de unificar os métodos Booch e OMT. Nasceu então. pretendendo ser a linguagem de modelagem padrão para modelar sistemas concorrentes e distribuídos. dizem. em junho de 1996.1. CONCEITOS Ao longo desta monografia são abordados alguns termos e nomenclaturas. Hoje em dia o uso da UML faz parte das “boas práticas de engenharia". foi lançado. Jacobson se associou à Rational e o escopo do projeto da UML foi expandido para incorporar o método OOSE. mas o primeiro pode existir independentemente. 4. Sua filosofia seria incorporada por vários princípios importantes: • • • Separação do conteúdo da formatação.html.9 da UML. decorrido um ano de trabalho. Kris Richards e Cindy Castillo.

Para cada banco de dados há um driver JDBC que pode cair em quatro categorias: • Ponte JDBC-ODBC: É o tipo mais simples. JDBC Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que faz o envio de instruções SQL para qualquer banco de dados relacional. • Driver API-Nativo: O driver API-Nativo traduz as chamadas JDBC para as chamadas da API cliente do banco de dados usado. . que é traduzido para o protocolo do banco de dados por um servidor. mas restrito à plataforma Windows. Sua maior aplicação é para visualizar o relacionamento entre tabelas de um banco de dados. O XML é considerado um bom formato para a criação de documentos com dados organizados de forma hierárquica. como se vê freqüentemente em documentos de texto formatados. Ele é a principal representação do Modelo de Entidades e Relacionamentos. É o modelo mais flexível. • Driver de Protocolo de Rede: Traduz a chamada JDBC para um protocolo de rede independente do banco de dados utilizado. que um banco de dados possa através de uma aplicação escrever em um arquivo XML. Esta ponte é normalmente usada quando não há um driver puro . Concentração na estrutura da informação. API de baixo nível e base para APIs de alto nível. pode precisar de software extra instalado na máquina cliente. por exemplo.4. e não na sua aparência.Java (tipo 4) para determinado banco de dados. Essa característica permite. 4. Interligação de bancos de dados distintos. Por utilizar um protocolo independente. pode conectar as aplicações clientes Java a vários bancos de dados diferentes. pois seu uso é desencorajado devido à dependência de plataforma. Como a Ponte JDBCODBC. no qual as relações são construídas através da associação de um ou mais atributos destas tabelas. Utiliza ODBC para conectar-se com o banco de dados. Possibilita o uso de bancos de dados já instalados. Amplia o que você pode fazer com Java. 4. e outro banco distinto possa ler então estes mesmos dados.28 • • • Criação de arquivos para validação de estrutura (Chamados DTDs). convertendo métodos JDBC em chamadas às funções do ODBC. DER Diagrama entidade relacionamento é um modelo diagramático que descreve o modelo de dados de um sistema com alto nível de abstração. (properties).3.

.'campo3'. em um programa de Catálogo de Endereços. Retrieve. consulta.'valor2'. uma entrada de um contato individual pode ser considerada a unidade básica de persistência. É o tipo mais recomendado para ser usado.29 • Driver nativo: Converte as chamadas JDBC diretamente no protocolo do banco de dados. ( INSERT INTO 'tabela' ('campo1'. As operações CRUD também são relevantes em interfaces para usuários de vários níveis.. UPDATE 'tabela' SET 'campo1'= 'valor' WHERE 'condição'. Operações de CRUD CRUD é o acrônimo da expressão em língua Inglesa Create. ‘campo3’.5. Em SQL os comandos podem ser resumidos em: CREATE TABLE 'tabela' ‘campo1’. 4. atualização e destruição de dados.).) VALUES ('valor1'. DELETE FROM 'tabela' WHERE 'condição'. normalmente é independente de plataforma e escrito pelos próprios desenvolvedores. Implementado em Java. Update e Delete. usada para definir quatro operações básicas usadas em bancos de dados relacionais (RDBMS) ou em interface para usuários para criação.'valor3'.. Código Fonte 1: Operação de CRUD via SQL .. ‘campo2’. ).'campo2'. Por exemplo.

this. como “Cadastro de Veículos” e considerando apenas dois objetos. levando em conta as etapas de implementação proposta no capítulo referente aos modelos de implantação e utilizando as tecnologias selecionadas. } public int getId(){ return id. String nome){ super().id = id. } } } Código Fonte 2: Classes a serem persistidas Para o exemplo serão consideradas também as seguintes premissas • • Cada carro possui um proprietário Cada proprietário possui um ou mais carros.id = id. teremos as duas classes Java abaixo: public class Proprietario { private int id = 0. } public void setModelo(String modelo){ this. } public String getModelo() { return modelo. } public void setId(int id){ this. private String modelo = null. . o proprietário e o veículo. public Veiculo(String placa. Teremos então os processos abaixo divididos para cada um dos bancos. } public String getPlaca() { return placa. } public void setPlaca(String placa){ this. } public String getNome(){ return nome. this. private String nome = null.placa = placa.nome = nome. } public class Veiculo { private String placa = null. this. ESTUDO DE CASO Partindo de um problema básico.modelo = modelo. } public void setNome(String nome){ this. String modelo){ super().modelo = modelo.placa = placa.30 5. this. public Proprietario(int id.nome = nome.

temos o seguinte código SQL para criação das tabelas no banco: CREATE TABLE Proprietario ( ID INTEGER NOT NULL . Modelo CHAR(20) . ID INTEGER NOT NULL ). ALTER TABLE Proprietario ADD CONSTRAINT PK_PROPRIETARIO PRIMARY KEY (ID).1. Código Fonte 3: Comando SQL para criação das tabelas Nesta etapa de criação já é possível identificar um dos primeiros pilares dos bancos de dados. Para implementar isso o modelo relacional faz uso do conceito de chave estrangeira. CREATE TABLE Veiculo ( Placa CHAR(7) NOT NULL . que consiste basicamente em relacionar uma entidade conhecida e um atributo de outra entidade.1. que é o relacionamento. PostgreSQL (modelo relacional) De acordo com o problema exposto acima temos um relacionamento de 1:N que pode ser representado pelo seguinte DER: Ilustração 9: DER das classes a serem persistidas Com base neste modelo. Relacionamentos e Operações de CRUD 5.31 5. ALTER TABLE Veiculo ADD CONSTRAINT FK_Veiculo_1 FOREIGN KEY (ID) REFERENCES Proprietario (ID). ALTER TABLE Veiculo ADD CONSTRAINT PK_VEICULO PRIMARY KEY (Placa). Como já explicado anteriormente. Nome CHAR(30) ).1. ele serve para mostrar alguma característica de relação com outra entidade. .

pois se trata de um banco de dados independente de sistema operacional possuindo versões Linux e Windows®. . Abaixo podemos verificar o código fonte de uma classe Java que retorna um statement para manipulação de dados em SQL. private static Statement stmt = null. As mais comuns são: ODBC – Conexão disponível no Windows®.createStatement( ResultSet.out. private static ADOconection conexao = null.TYPE_SCROLL_INSENSITIVE.CONCUR_READ_ONLY). "postgres". stmt = con. ResultSet. no caso de um driver JDBC cada fabricante de banco de dados é responsável por implementar uma série de classes determinadas para o padrão JDBC. os próximos passos ocorrem na linguagem de programação selecionada. podemos identificar 3 elementos básicos: • Primeiro: o nome do driver “Class.postgresql. "shaman"). } catch (Exception exc) { System.Driver").forName("org. utilizaremos esta última como exemplo de conexão com o banco. } } Código Fonte 4: Classe para conexão com SGDBR via JDBC Neste código. public Statement getADOconection() { if (stmt == null){ try { Class. Uma vez que nesta apresentação estamos focados no desenvolvimento em Java.32 Definido o objeto a ser persistido e criadas as tabelas.forName” que indica qual driver será utilizado. por isso este nome pode variar muito de banco para banco. Para se conectar ao PostgreSQL existem várias formas. } } return stmt. que consiste na conexão entre a linguagem e o banco de dados.getConnection( "jdbc:postgresql://localhost/TCCpostgre:5432". Connection con = DriverManager.println(exc. JDBC – Conexão disponível para programas em Java. public class Conec(){.toString()).

ResultSet rs = stmt.execute”. " + prop.execute("insert into proprietario (id. nome) values(" + prop. que não retornam informações do banco.next(). } } public boolean operacaoInsert(Proprietario prop){ try{ Statement stmt = new ccc(). } catch (Exception e) { return false. ou seja. ele é o objeto responsável por manipular os comandos em SQL. as configurações básicas no banco devem ser executadas invariavelmente.getString("nome")).getADOconection().1. } catch (Exception e) { return null.getInt("id"). também nota-se a necessidade de desmontar o objeto para deixá-lo compatível com os dados manipuláveis pelo banco de dados e também nota-se os trabalhos para remontá-lo para que possa ser utilizado pela aplicação. o nome do usuário e por fim a senha de conexão.getADOconection().getConnection” sendo elas o endereço do serviço (IP) e nome da base de dados. rs. a criação das tabelas propostas no item anterior devem ser implementadas no banco de dados diretamente. Neste código. • Terceiro: é o elemento statement.getNome +")."). Uma vez estabelecida uma conexão com o banco (como visto anteriormente). 5.executeQuery("select * from proprietario where id = 1"). } } Código Fonte 5: Classe para persistência de dados via JDBC As operações de CRUD podem ser divididas em dois tipos: as simplesmente executadas “stmt. é possível executar os comandos SQL no banco de dados. Hibernate (framework) Apesar de todas as facilidades propostas pelo uso do Hibernate. return new Proprietario(rs.2. e as querys “stmt. rs. estas retornam uma lista de dados compatíveis com busca realizada no banco. .getId +". public Proprietario operacaoSelect(){ try{ Statement stmt = new Conec().executeQuery”. Abaixo temos um exemplo de como poderíamos executar esta operação diretamente no banco através apenas da conexão JDBC. return true. stmt.33 • Segundo: são as três Strings de conexão “DriverManager.

com as informações de conexão e link para os arquivos de mapeamento das tabelas.dialect. 3. A tag “<session-factory>” é responsável por informar ao Hibernate os parâmetros de configuração.connection. .dialect"> org. Utilizando-se de um arquivo XML. a começar pela conexão com o banco de dados. “Hibernate.username”: Nome de usuário do banco . a partir deste ponto iniciam-se diferenças.postgresql. “Hibernate.username"> postgre </property> <property name="Hibernate.connection.0//EN" "http://hibernate. “Hibernate. o Hibernate é capaz de se conectar com o banco.0.connection.dtd"> <hibernate-configuration> <session-factory> <property name="Hibernate.connection. 2.driver_class”: Corresponde ao nome do driver JDBC.hbm.hbm.xml"/> <mapping resource="veiculo. 1.net/hibernate-configuration-3.connection. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.connection.url”: Endereço de conexão do banco.connection.password"> shaman </property> <mapping resource="proprietario.dialect”: informa qual o padrão de linguagem SQL o banco de dados utiliza.34 Entretanto.Driver </property> <property name="Hibernate.hibernate.password”: Senha do usuário.sourceforge. “Hibernate.xml"/> </session-factory> Código Fonte 6: Arquivo XML para configuração da conexão via Hibernate No código fonte acima podemos verificar alguns itens importantes.PostgreDialect </property> <property name="Hibernate.connection.url"> jdbc:postgresql://localhost/TCCpostgre:5432 </property> <property name="Hibernate. E por fim as tag <mapping resource> que indicam os arquivos XML onde estão mapeados os objetos a serem persistidos.driver_class"> org. Nas tags “<property name>” são informados parâmetro individuais de conexão e informação: • • • • • “Hibernate.

openSession().SessionFactory. } } public static Session getSession() { return factory.0//EN" "hibernate-mapping-3.configure().Session.printStackTrace().hibernate.buildSessionFactory().dtd"> <hibernate-mapping> <class name="Proprietario" table="proprietario"> <id name="id" column="id" type="integer"> < generator class="assigned"/> </id> <property name="nome" column="nome" type="string"/> </class> </hibernate-mapping> Código Fonte 8: Arquivo XML de mapeamento da classe proprietário . } } Código Fonte 7: Classe que realiza a conexão com banco via Hibernate O objeto “factory” lê o arquivo XML e através do método “openSession” retorna uma sessão do Hibernate. import org.cfg.hibernate. public class HibernateUtility { private static SessionFactory factory. ao fazer uso do Hibernate.0.35 Com o parâmetro de conexão mapeado faz-se necessária a criação de uma classe que instancia conexão com o banco. factory = null. } catch (Exception e) { e. static { try { factory = new Configuration(). Entretanto.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate Mapping DTD 3. import org. é preciso algumas configurações extras.Configuration. import org.hibernate. Inicialmente é preciso mapear a tabela do banco em relação ao objeto a ser persistido através de um arquivo XML: <?xml version="1.

Outras variantes desta tag são <one-to-one> e <many to many> Uma vez mapeado o objeto. as operações podem ser realizadas pelos comandos: .0.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate Mapping DTD 3. Na tag <id> o parâmetro “name” indica o nome do atributo chave correspondente ao objeto.0//EN" "hibernate-mapping-3. “column” nome da coluna referência “class” classe correspondente ao objeto com o qual o item vai se relacionar. Outra característica neste caso é o relacionamento que também deve estar configurado no banco.36 <?xml version="1. o parâmetro “column” indica o nome da coluna na tabela e o parâmetro “type” o tipo do dado. Ele é informado ao Hibernate pela tag <one-to-many> que consiste em: • • • “name”: nome da tabela. O mesmo vale para a tag <property>.dtd"> <hibernate-mapping> <class name="Veiculo" table="veiculo"> <id name="placa" column="placa" type="string"> < generator class="assigned"/> </id> <property name="modelo" column="modelo" type="string"/> <one-to-many name="proprietario" column="id" class="Proprietario"/> </class> </hibernate-mapping> Código Fonte 9: Arquivo XML de mapeamento da classe veículo Na tag <class> o parâmetro “name” recebe o nome da classe a ser mapeada e o parâmetro “table” o nome da tabela correspondente no banco de dados.

openSession().getId). session. no modelo orientado à objeto é necessário haver uma classe de conexão com o banco de dados. .flush(). DB4o (orientado à objeto) Assim como no modelo relacional.openSession(). prop. session.flush(). HibernateUtility p = new HibernateUtility().openSession(). session. } public Usuario UsRecuperar(Proprietario prop) throws Exception { Session session = factory.flush(). a classe final. que se mostra muito similar. session. session.openSession(). session.close(). Session.1.close().getSession(). responsável por manipular os dados no banco se torna muito simples e compacta. Usuario us = session.flush(). session.save(prop).close().update(prop). 5.load(prop. public crud throws Exception{ factory = p.delete(us). } public void UsInserir(Proprietario prop) throws Exception { Session session = factory.3. } } Código Fonte 10: Operações de CRUD via Hibernate Apesar da complexidade em mapear os dados e a conexão em arquivos XML. session. session.close().37 public class crud(){ private SessionFactory factory. session. return prop. } public void UsExcluir(Proprietario prop) throws Exception { Session session = factory. } public void UsAlterar(Proprietario prop) throws Exception { Session session = factory.

openServer()” deve se informar o endereço do banco e a porta onde o serviço está executado.openServer("//localhost/banco. É necessário alterar a classe proprietário para definir o relacionamento. String senha = "123".close().38 import com.Db4o. try { // algum código db4o } finally { db. e como o relacionamento é do tipo 1:N. enquanto no comando “db. logo nossa classe ficará assim: . ObjectContainer db = Db4o. Entretanto aqui é possível verificar a primeira diferença. pois como não existem tabelas neste modelo de banco de dados. os relacionamentos ocorrem diretamente nos objetos. porta). Portanto é preciso que a classe proprietário contenha um atributo chamado veículo. public class Main { public static void main(String[] args) { Integer porta = 8000. } } Código Fonte 11: Classe de conexão com bando de dados OO No comando “Db4o.db4o.yap".grantAccess()” é informado o usuário e a senha do banco. o atributo veículo deve ser um array. import com. db.grantAccess(usuario.ObjectContainer.db4o.senha). String usuario= "user".

nome = nome. . as operações de CRUD tornam-se ainda mais simples. Como este banco de dados possui um mecanismo de serialização de objetos. mesmo que em termos de conteúdo existam objetos similares. this. } public String getNome() { return nome.id = id. } public void setNome(String nome) { this. } } Código Fonte 12: Classe cliente relacionada coma classe veiculo No DB4o. private ArrayList<Veiculo> veic = null. } public void setVeic(Veiculo vei) { veic. bastando apenas informar o objeto a sofrer a operação.id = id. para no caso de uma exclusão ou alteração ser executada no objeto correto. } public Veiculo getVeic(int index) { return veic. } public void setId(int id) { this. public Proprietario(int id.get(index). ele garante a unicidade dos objetos. private String nome = null. String nome) { this.39 public class Proprietario { private int id = 0. } public int getId() { return id.add(vei).nome = nome.

cria ponteiros para os dados armazenados em colunas especificas. O Banco de dados usa o índice de maneira semelhante ao índice remissivo de um livro.class). dos itens de uma coleção. usado no armazenamento.next(). public salvar(Cliente cli) { db. alfabético ou sistemático. } public delete(Cliente cli) { ObjectSet<Cliente> lista = db. cliente. Resumindo. } public update(Cliente cli) { ObjectSet<Cliente> lista = db. Índices e chaves Índice é um roteiro ordenado. query. acompanhado de referenciais que permitem a identificação e localização do próprio conteúdo.set(cliente). Sua função é acelerar o tempo de acesso às linhas de uma Tabela.get(obter( new Cliente (777.set(cli).setNome("Maria José"). 5.setNome("Maria José"). query.hasNext()){ return lista. o banco "organiza" o conteúdo de determinadas colunas (ou todas) para facilitar a busca. db. } public Cliente obter(Cliente cli) { Query query = db. } } } Código Fonte 13: Operações de CRUD via DB4o. Cliente cliente = lista. . Cliente cliente = lista.next().delete(cliente). cliente.constrain(Cliente. Pode ser também o conteúdo de um documento.2. você o folheia todo até achar ou procura no índice? (se ficou com a primeira opção é porque o livro é pequeno e bem conhecido .isso nem sempre acontece com seu banco de dados). busca e recuperação da informação.getId_cliente()).yap").smaller().next(). ObjectSet<Cliente> lista = query. Logo.constrain( cli. while (lista.40 public class Perssist { private ObjectContainer db = Db4o."Maria"))).get(obter (new Cliente (777. o Índice é um arquivo auxiliar associado a uma Tabela. O índice é um mecanismo auxiliar. db. Pense assim: quando você quer achar um tópico de um livro."Maria"))).openFile("c:/guerra. em um banco de dados o índice é igual qualquer outro índice. verifica um determinado assunto no Índice e depois localiza a sua posição em uma determinada página.descend("codigo").execute().query().

1.2. o DB4O consegue diferenciar os dois. campo2 <tipo> NOT NULL. é implementado tal como sua definição. campo2) ). aplicando-se também para chaves primarias e estrangeiras. campoX <tipo>. Para se criar um índice no DB40. CREATE TABLE nome_tabela ( campo1 <tipo> NOT NULL. e não deve ser confundido com uma “sequence” implantada junto a essa chave. Como dito anteriormente uma chave primaria é um índice único e não nulo.2. não nulo (no caso de chave primaria) ou um índice de outra tabela (chave estrangeira) 5. melhorando significativamente no desempenho do banco. no DB4o esta “sequence” deve ser implantada no código fonte da aplicação.41 Nesse contexto. Hibernate No hibernate. mas deve-se ter em mente que o DB4O "conhece" cada objeto dentro do banco. quando se fala em chaves (primaria ou estrangeira). Ou seja. PRIMARY KEY (campo1. Por exemplo. Código Fonte 14: exemplo de declaração de chave primaria 5. a visão relacional em um ambiente orientado a objetos não é aplicável.3. pois indicam ao SGDOO a real unicidade de um objeto. PostgreSQL Como mencionado acima. Num SGDBOO é implementado do conceito de UUID´s (Universal Unique ID) que são na realidade um objeto associado a cada objeto que existe no banco e sendo muito mais "fortes" que as ID´s.2. independente da chave customizada que eles contenham. nada mais é que um índice único.2. Podem até existir dois objetos com a mesma chave. uma vez que o hibernate apenas faz o mapeamento objeto relacional. BD4o Segundo Rogério Weinert (2008) Antes de mais nada. o conceito de índice e chaves deve ser implementado diretamente no banco de dados. num banco de dados relacional o índice auxilia na recuperação de dados. pois no caso de um SGBDOO cada objeto é único. 5. tendo por base o código fonte 2 desta apresentação teremos: .

melhorar a desempenho. a trigger é disparada e grava em uma tabela de histórico de alteração. 1. o usuário e data/hora da alteração. é muito utilizada para ajudar a manter a consistência dos dados ou para propagar alterações em um determinado dado de uma tabela para outras.ObjectField("Nome"). Processador Intel® Celeron M 1. Nesse caso. 5.6Ghz.42 Db4o.Configure().ObjectClass(typeof(Proprietario)). quando a alteração for efetuada. Ambiente Para o teste de desempenho foi utilizado o seguinte ambiente: • • • • • Notebook Itautec®. Encapsula tarefas repetitivas.3. Desempenho O teste abaixo visa de forma simples demonstrar os resultados de desempenho dos modelos de persistência de dados.4. Passo 2: . tendo seus tempos totalizados em seguida.Elaborada função que realizava automaticamente operações de inserção. deleção. .2. 5. 5. O inconveniente fica pelo fato da aplicação também ter que garantir a unicidade do objeto sempre que preciso. 5. aceita parâmetros de entrada e retorna um valor de status (para indicar aceitação ou falha na execução).Indexed(true).4. SGDB’s conforme proposto no capitulo 1 subseção 2. Já uma trigger é um recurso de programação que sempre é acionado a ocorrência de um evento. Um bom exemplo é uma trigger criada para controle de quem alterou a tabela.Foram implementados os objetos conforme descritos nos códigos fontes ao longo desta monografia. Procedures e Triggers Procedure é uma coleção de comandos em SQL para gerenciamento de Banco de dados. O procedimento armazenado pode reduzir o tráfego na rede. update e consulta repetidamente por 1000 vezes cada uma. criar mecanismos de segurança. Windows XP® Home SP3. ficando por conta do programador integrar as funções necessárias ao seu projeto.43GB memória RAM.4. Atualmente os SGDBOO não têm implantada essa característica. Metodologia Passo 1: . etc.1.

3. o que resulta em varias conversões. uma vez que se trata da implementação de uma camada extra.38 0.4.34 Tabela 2: Comparativo entre implementações Inicialmente deve-se observar que os métodos foram desenvolvidos pelo autor desta apresentação com base em analise estatísticas. e obtenção do tempo médio de cada uma das três metodologias de implementação.43 Passo 3: . Resultados Metodologia Relacional Framework Orientado à objeto SGBD / Framework PostgreSQL Hibernate DB4o Tempo médio (s) 0. . mapeamentos e consultas realizados antes da operação propriamente dita. Analisando a tabela 2 pode-se constatar certo equilíbrio entre o SGBDR e o SGBDOO.Repetição da operação por 3 vezes. entretanto deve-se levar em conta o fato de que em ambientes diferentes os resultados podem e devem variar. entretanto o uso do framework demonstrou uma queda no desempenho. 5.59 0.

mas sempre é recomendada uma análise profunda do projeto. para a maioria das aplicações. tentado estimar o volume de dados.44 6. Todavia. Outro ponto é a simplicidade com que o modelo orientado à objeto trabalha com os objetos. Por isso. sem muitos ganhos no quesito desenvolvimento. Além disso. mas: • • • Quando se busca facilidade em controlar integridade é preferível o modelo relacional. pode-se observar que todas as metodologias de implementação são muito boas. com base na metodologia usada. há situações em que todas as metodologias serão boas escolhas. Portanto deve-se entender bem quais recursos sua aplicação precisa. A seguir temos uma tabela comparativa com as principais características apresentadas por cada modelo de implementação. respeitando todas as características do objeto. Um banco de dados pode ser a diferença entre ter e não ter um negócio seja ele de qualquer porte. Tratando os objetos de uma maneira transparente ao programador. possuem recursos e vantagens que se complementam. o framework é uma ótima alternativa. uma vez que o framework é o responsável por gerenciar a persistência. todas podem ser usadas. não presentearam nenhuma característica que a tornasse uma melhor escolha em detrimento à outra. Nesses casos. Logo as tecnologias estudadas. documentação e suporte devem ser considerados. . reduzindo assim muito o tempo de desenvolvimento. o hardware disponível. RESULTADOS OBTIDOS O framework se mostra útil para aproximar o modelo relacional do modelo orientado a objeto. mas em que situação uma ou outra deve ser utilizada. e as funcionalidades necessárias. Num exemplo mais simples um controle de clientes pode ser feito tanto no modelo relacional quanto no modelo orientado a objeto. mas mostrando força imensa quando de migra de um serviço de banco de dados relacional para outro. Quando a preocupação for posteriores migrações na base de dados. basta uma pequena configuração no arquivo descrito no código fonte 6 e nada mais. é recomendável fazer testes e avaliar qual oferece mais vantagens à aplicação. o correto não é tentar descobrir qual é a melhor. sem a necessidade de configurar um banco de dados ou mesmo os vários arquivos de mapeamento do framework. o que significa que. a escolha deve ser bem feita e aspectos como desempenho. recursos. Caso o desejo seja simplicidade de desenvolvimento é melhor o modelo orientado a objeto. sua aplicação não apresenta necessidade de manutenções no caso de uma migração na base de dados. Na verdade. Para finalizar. Neste caso.

estrutura utilizada pela aplicação existes índices únicos. Não elimina o uso de SQL.1. As objetos. Conceito de chaves estrangeiras. Comparativo de características Modelo de Implementação Característica CRUD Relacionamentos Relacional SQL. Seu Há desempenho índices. Simplicidade de Implementação Depende do driver de conexão utilizado. disponível aceitação de mercado. Material escasso Tabela 3: Comparativo entre modelos de implementação . Triggers Utiliza Possui a capacidade com e a desempenho do servidor de DB Índices Material de Consulta índices. É implementada na própria aplicação. implementadas do SGBD. mas depende não da Framework Mapeamento.45 6. estas são Não elimina a programação direta no banco de dados. Não Tão há índices. São implementadas diretamente no banco. Chaves mapeadas. dependem de mapeamento de Orientado a Objeto Comandos próprios. Mesmo das linguagens OO. Não há trigger. implementadas do SGBD. configurações iniciais Maior integração com a linguagem utilizada. estes quanto são sua possibilidade do índice único Facilmente encontrado.

Douglas C.br/articles/viewcomp.devmedia. São Paulo: Edgard Blucher.asp?comp=4495&hl=*db4o*. São Paulo: Ciência Moderna. . 2005.uol. GUERRA. Acesso em: 27 de abr. Acesso em: 27 de abr. de 2008. J. Disponível via URL em: http://imasters. Valdemar W. de 2008.br/articles/viewcomp. 1997 38p. Uma Introdução a Sistemas de Banco de Dados. Acesso em: 13 de abr. 136p DATE. Db4o: Banco OO. de 2008. 1999. Acesso em: 27 de abr. Gavin.asp?comp=4323&hl=*db4o*.com. C.devmedia. BIBLIOGRAFIA NASSU. DB4Objects na terra de gigantes do BD relacional com Java. BAUER. SCHIMIDT. Mohamed. DB4Objects – parte III: Armazenando objetos relacionados. Eugenio A. C. Disponível via URL em: http://www. DB4Objects na prática – parte IV: Aplicação embedded server. 560p FAYAD. New York. Italo M. _____.br/articles/viewcomp. de 2008. 1999. _____.com. Acesso em: 27 de abr.com.br/artigo/5056/bancodedados/db4o_banco_oo. Object-oriented application frameworks . Christian. 896p.com/portugues/guj-db4o. MAIA.46 7. Disponível via URL em: http://www. Acesso em: 27 de abr. ACM.com.br/articles/viewcomp.devmedia. _____.pdf. de 2008. Gláucio. SETZER. Disponível via URL em: http://www. Disponível via URL em: http://www. Hibernate em Ação.asp?comp=4121. São Paulo: Edgard Blucher.asp?comp=4137&hl=*db4o*. DB4Objects na DB4O – Um BD com estilo!..devmedia. KING. Disponível via URL em: http://www. de 2008. Eduarod.com. Banco de dados Orientados a Objetos. DB4Objects – parte II – mãos a obra.db4o. MONTEIRO.

Florianópolis. Acesso em: 03 de mai. Porto Alegre: Bookman. São Paulo: Berkeley. Introdução ao Java. Traduzido por Halley Pacheco de Oliveira. 1996. Disponível via URL em: http://java. Disponível via URL em: http://www.com. UML Que raios é isso?. De 2008. ROQUE. Acesso em: 01 de mai. JDBC Introduction. 2003. 4ª Ed. de 2008. Disponível via URL em: www.com/docs/books/tutorial/jdbc/overview/index.Universidade Federal de Santa Catarina. Hibernate e PostgreSQL. de Multidimensionais Em Banco De Dados Orientado A Objetos. Acesso em 27 abr. Introdução ao Hibernate 3. OLIVEIRA. Acesso em: 01 de mai.com. CARVALHO. Mauricio. de 2008. Manual de Referência do PostgreSQL 7. Tradução. Wellington.devmedia.com. Disponível via URL em: http://www. 81f. 2006. BORBA. Lucas Gonçalves. Disponível via URL em: http://www.br/content/articles/hibernate/intruducao_hibernate3_guj.com/javase/6/docs/.J.47 LINHARES. MARINHEIRO. Sueli de Fátima Poppi. Java: Como programar. 334p DEITEL. Arcos.html. 492p.3. 893p.html.plugmasters.br/Hibernate.livramento.br/sys/materias/476/1/UML---Que-raios-%E9-isso%3F.br/articles/viewcomp. de 2008. SUN Microsystems. via URL em: . The PostgreSQL Global Development Group. Tese (Conclusão de Curso em Sistemas de informação) – Pontifícia Universidade Católica de Minas Gerais. Metodologia Para Implantação De Modelos MICROSYSTENS. Acesso em: 03 de mai.sun. Marcio Santos. DEITEL P. JANDL. Disponível http://java.M.yu. Tutorial Hibenate. Construção de um sistema de Blackboard para gestão de documentos usando XML. 2004.2. de 2008.sun. 228f.com. Tese (Doutorado em Engenharia de Produção) .pdf.guj. H. Java API Documentation. SUN 2008. 2002. Peter J. Acesso em: 01 de mai.asp?comp=4149. Persistindo Objetos com Java. Bruno.

Sign up to vote on this title
UsefulNot useful