Você está na página 1de 102

Curso de Engenharia de Computao

COMPARAO ENTRE BANCO DE DADOS RELACIONAIS E BANCO DE DADOS ORIENTADO A OBJETOS: CARACTERSTICAS E IMPLEMENTAO DE UM PROTTIPO

David Rodrigues Machado

Itatiba So Paulo Brasil Dezembro de 2009

ii

Curso de Engenharia de Computao

COMPARAO ENTRE BANCO DE DADOS RELACIONAIS E BANCO DE DADOS ORIENTADO A OBJETOS: CARACTERSTICAS E IMPLEMENTAO DE UM PROTTIPO

David Rodrigues Machado

Monografia apresentada disciplina de Trabalho de Concluso de Curso II, do curso de Engenharia de Computao da Universidade So Francisco, sob a orientao do Prof. Ms. Jos Aparecido Carrilho, como exigncia parcial para concluso do curso de graduao. Orientador: Prof. Ms. Jos Aparecido Carrilho

Itatiba So Paulo Brasil Dezembro de 2009

iii

Comparao entre Banco de Dados Relacionais e Banco de Dados Orientado a Objetos: Caractersticas e Implementao de um Prottipo

David Rodrigues Machado Monografia defendida e aprovada em 07 de dezembro de 2009 pela Banca Examinadora assim constituda:

Prof. Ms. Jos Aparecido Carrilho (Orientador) USF Universidade So Francisco Itatiba SP.

Prof Ms. Cludio Maximiliano Zaina (Membro Interno) USF Universidade So Francisco Itatiba SP.

Prof. Ms. Debora Meyhofer Ferreira (Membro Interno) USF Universidade So Francisco Itatiba SP.

O registro de arguio e defesa consta de ATA DE ARGUIO FINAL DE MONOGRAFIA, devidamente assinada e arquivada na coordenao do curso.

iv

Saber ler e escrever no o fim da educao, sequer o incio. Mahatma Gandhi


In: ATTENBOROUGH, RICHARD. A Sabedoria de Gandhi

A meus queridos pais, Maria Niva e Jos Maria, que no terminaram o primeiro grau, mas sempre me deram apoio.

vi

Agradecimentos

Agradecimento especial ao Prof. Jos Aparecido Carrilho, que com sua experincia e ensinamentos durante a orientao, me indicou a direo da luz para que o trabalho fosse concludo. Ao Prof. Cludio Maximiliano Zaina, pela superviso durante a disciplina de Trabalho de Concluso de Curso II, alm de ter sido o professor de diversas disciplinas durante o meu curso de Engenharia de Computao. Ao Prof. Alencar de Melo Junior, pelas suas orientaes iniciais durante a superviso do Trabalho de Concluso de Curso I. Aos meus colegas de sala, Leandro, Paulo, Rafael, Mrcio, Gustavo e Joo Paulo, no s pela amizade, mas pela colaborao que me deram em relao s disciplinas durante estes cinco anos de curso. Ao Presidente da Repblica Luiz Incio Lula da Silva pela criao do programa Prouni, pois sem isso, provavelmente nunca teria cursado um curso superior. Agradeo a todas as pessoas que de alguma forma, contriburam para que eu chegasse at aqui. Mesmo quando no tive confiana em mim mesmo de que conseguiria durante as dificuldades do curso. Isto inclui todo o corpo docente que lecionou para mim, os quais alguns deles no esto mais presentes na Universidade So Francisco.

vii

Sumrio

Lista de Siglas .......................................................................................................................... ix Lista de Figuras ........................................................................................................................ x Lista de Tabelas........................................................................................................................ xi Resumo ....................................................................................................................................xii Abstract ..................................................................................................................................xiii 1 INTRODUO ................................................................................................................ 1 1.1 1.2 1.3 2 Objetivos ....................................................................................................................... 3 Objetivos Especficos .................................................................................................... 3 Organizao do Trabalho .............................................................................................. 4

ASPECTOS TERICOS ................................................................................................. 5 2.1 Banco de Dados Relacional........................................................................................... 5 Estrutura das Tabelas e seus Relacionamentos ..................................................... 5 Chaves .................................................................................................................. 8 Linguagens de Consultas ...................................................................................... 8 SQL....................................................................................................................... 9

2.1.1 2.1.2 2.1.3 2.1.4 2.2

Banco de Dados Orientado a Objetos ........................................................................... 9 Novas Aplicaes de Banco de Dados ............................................................... 10 Estrutura do Modelo de Objetos ......................................................................... 11 Herana ............................................................................................................... 11 Identidade de Objeto (OID) e Ponteiros ............................................................. 13 Linguagens de Programao Persistente ............................................................ 14

2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3

Vantagens e Desvantagens dos Modelos Relacional e Orientado a Objetos .............. 15 Vantagens do Modelo Relacional ....................................................................... 15 Desvantagens do Modelo Relacional ................................................................. 15 Vantagens do Modelo de Objetos ....................................................................... 16 Desvantagens do Modelo de Objetos ................................................................. 17

2.3.1 2.3.2 2.3.3 2.3.4 3

PROJETO DO PROTTIPO ....................................................................................... 18 3.1 Modelagem do Banco de Dados ................................................................................. 18 Modelagem Relacional para o Prottipo ............................................................ 19

3.1.1

viii

3.1.2 3.1.3 3.2

Modelagem das Classes de Objetos para o Prottipo ......................................... 20 Modelagem das Tabelas para o Modelo Relacional ........................................... 21

Softwares utilizados no Projeto ................................................................................... 21 MySQL ............................................................................................................... 22 db4objects (db4o) ............................................................................................... 23

3.2.1 3.2.2 3.3

Exemplo MySQL X db4o ........................................................................................... 24 Exemplo MySQL................................................................................................ 25 Exemplo db4o ..................................................................................................... 26

3.3.1 3.3.2 3.4 4

O Prottipo .................................................................................................................. 27

TESTES ........................................................................................................................... 30 4.1 4.2 4.3 4.4 4.5 4.6 Testes de Insero ....................................................................................................... 30 Testes de Atualizao .................................................................................................. 31 Testes de Consulta ....................................................................................................... 32 Testes de Remoo ...................................................................................................... 33 Testes com Procedures SQL ....................................................................................... 34 Anlise dos Resultados................................................................................................ 36

CONCLUSO................................................................................................................. 38 5.1 5.2 Contribuies .............................................................................................................. 39 Extenses..................................................................................................................... 39

Referncias Bibliogrficas ..................................................................................................... 40 Bibliografia Consultada ......................................................................................................... 42 Apndice A Prottipo para Testes nos Bancos de Dados .................................................. 43 Apndice B Resultados dos Testes nos Bancos de Dados ................................................. 84

ix

Lista de Siglas

AVE BD CAD CASE CRUD db4o GPL IDE NQ ODMG OID OIS OLAP ORM QBE RDBMS SODA SQL

Alta Velocidade Espanhola Banco de Dados Computer-Aided Design Computer-Aided Software Engineering Create, Read, Update , Delete db4objects General Public License Integrated Development Environment Native Query Object Database Management Group

1. Object Identifier
Office Information System On-line Analytical Processing Object-Relational Mapping Query by Example Relational Database Management System Simple Object Data Access Structured Query Language

Lista de Figuras

Figura 1 Exemplo de um Modelo Relacional em um sistema bancrio ................................. 2 Figura 2 Exemplo de um Modelo Orientado a Objetos em um sistema bancrio .................. 2 Figura 3 Exemplo de especializao em hierarquia em um modelo de Escola de Informtica................................................................................................................................ 12 Figura 4 Casos de uso para o prottipo de um sistema de Escola de Informtica. .............. 18 Figura 5 Modelo Relacional para o prottipo de um sistema de Escola de Informtica. ..... 19 Figura 6 Modelo Orientado a Objetos para o prottipo de um sistema de Escola de Informtica................................................................................................................................ 20 Figura 7 Modelagem das Tabelas do Modelo Relacional .................................................... 21 Figura 8 - Representao da arquitetura de um servidor Mysql .............................................. 22 Figura 9 - Armazenamento de objetos em um B.D Relacional e em um B.D db4o................ 23 Figura 10 Diagrama das telas do prottipo para Escola de Informtica. .............................. 28 Figura 11 Grfico do teste de insero nos bancos de dados para 4500 registros. ............... 31 Figura 12 Grfico do teste de atualizao nos bancos de dados para 4500 registros. .......... 32 Figura 13 Grfico do teste de consulta nos bancos de dados para 4500 registros................ 33 Figura 14 Grfico do teste de remoo nos bancos de dados para 4500 registros. .............. 34 Figura 15 Grfico do teste de insero entre procedures SQL e Banco de Dados Relacional usando Java. .............................................................................................................................. 35 Figura 16 Grfico do teste de atualizao entre procedures SQL e Banco de Dados Relacional usando Java. ............................................................................................................ 35 Figura 17 Grfico do teste de consulta entre procedures SQL e Banco de Dados Relacional usando Java. .............................................................................................................................. 35 Figura 18 Grfico do teste de remoo entre procedures SQL e Banco de Dados Relacional usando Java. .............................................................................................................................. 35

xi

Lista de Tabelas

Tabela 1 Tabela de dados referentes a Pessoas. ...................................................................... 6 Tabela 2 Tabela de dados referentes a Funcionrios ............................................................... 6 Tabela 3 Resultado da projeo. ............................................................................................. 6 Tabela 4 Resultado da restrio. ............................................................................................. 6 Tabela 5 - Tabela resultante da juno entre a tabela Funcionrios sobre Pessoas. ................... 7 Tabela 6 Exemplo de especializao de classes com herana para uma Escola de Informtica................................................................................................................................ 12 Tabela 7 - Detalhes do benchmark open source PolePosition gerado para comparar o db4o 24 Tabela 8 Resumo dos resultados nos testes efetuados para 4500 registros. ......................... 36

xii

MACHADO, David Rodrigues. Comparao entre Banco de Dados Relacionais e Banco de Dados Orientado a Objetos: Caractersticas e Implementao de um Prottipo. 2009. 41p. Monografia (Bacharelado em Engenharia de Computao) Curso de Engenharia de Computao da Universidade So Francisco, Campus de Itatiba.

Resumo

A busca de um modelo ideal para Banco de Dados constante. Entre esse modelos esto o Banco de Dados Relacional e o Banco de Dados Orientado a Objetos. O Modelo de Dados Relacional o conceito abstrato que define maneiras de armazenar, manipular e recuperar dados estruturados, unicamente na forma de colees de tabelas, sendo elas simples estruturas com linhas e colunas. As tabelas se relacionam atravs de chaves que determinam que cada registro seja nico. A linguagem de consulta predominante neste modelo o SQL. O Modelo de Dados Orientado a Objetos baseado no paradigma de programao orientada a objetos e prope trabalhar com os dados utilizando dos mesmos conceitos de objetos: classes, polimorfismo, herana e encapsulamento. O Identificador de Objetos (OID) permite identificar unicamente um objeto, atravs de referncias que se assemelham aos ponteiros. Para que o armazenamento dos dados seja efetivado, necessria uma linguagem de programao que proveja persistncia dos dados. Este projeto avalia os Modelos de Banco de Dados Relacional e de Objetos, comparando-os atravs de um prottipo de uma aplicao e de testes realizados, modelados para uma Escola de Informtica. Fez-se uso na implementao da linguagem de programao Java e os Bancos de Dados Mysql (Relacional) e db4objects (Orientado a Objetos).

PALAVRAS-CHAVE: Banco de Dados Relacional, Banco de Dados Orientado a Objetos, MySQL, db4objects.

xiii

Abstract

The search for an ideal model for the database is constant. Between these models are the Relational Database and the Database Object Oriented. The Relational Data Model is the abstract concept that defines ways to store, manipulate and retrieve structured data, only in the form of collections of tables, and they are simple structures with rows and columns. The tables are related by keys that determine that each record is unique. The query language predominant in this model is the SQL. The Data Model Object Oriented is based on the paradigm of object-oriented programming, and proposes to work with data using the same concepts of objects: classes, polymorphism, inheritance and encapsulation. The Object Identifier (OID) permits identify an object through references that are similar to pointers. For the storage of data be effective, you need a programming language that provides data persistence. This project evaluates the models Relational and the of Objects, comparing them through a prototype implementation and testing, modeled for a School of Informatics. The implementation was done using the Java programming language and the MySQL Database (Relational) and db4objects (Object Oriented). KEYWORDS: Relational Database, Object Oriented Database, MySQL, db4objects.

INTRODUO

A quantidade de informao a ser persistida cresce bruscamente, ano aps ano, com a necessidade de se armazenar cada vez mais dados em todos os tipos de aplicaes. Desta maneira, buscam-se sempre formas mais eficientes, rpidas, seguras, estveis, viveis e, porque no, fceis para o armazenamento de dados. Atualmente no se armazenam apenas caracteres e simples valores numricos, mas uma infinidade de dados como vdeos, imagens, udios, objetos complexos, etc. Alm da utilizao do Banco de Dados Relacional, outra forma de armazenamento que est ganhando espao no mercado, ainda que tmida, o Banco de Dados Orientado a Objetos. Mas fica a pergunta: ser que os Bancos de Dados Orientado a Objetos so to revolucionrios como foi o paradigma orientado a objetos para as linguagens de programao?. Pensando nisso, veio ento a motivao para este Trabalho de Concluso do Curso, que tem como base a comparao do amplamente usado Banco de Dados Relacional, com o Banco de Dados Orientado a Objetos, busca-se assim comparar as diferenas, vantagens e desvantagens entre esses dois modelos. Modelo Relacional: O modelo relacional usa um conjunto de tabelas para representar os dados e as relaes entre eles. Cada coluna de uma tabela possui um nome nico. Uma linha do objeto representa um relacionamento entre um conjunto de valores. Esse conjunto de relacionamentos dentro de uma tabela faz com que exista uma curta correspondncia entre o conceito de tabela e o conceito matemtico de relao (que deu origem ao nome deste modelo de dados). Este foi um dos primeiros modelos de dados a se estabelecer em aplicaes comerciais (Silberschatz et al., 1999). A Figura 1 mostra um exemplo de um modelo de Banco de Dados Relacional.

Figura 1 Exemplo de um Modelo Relacional em um sistema bancrio.

Modelo Orientado a Objetos: O modelo orientado a objetos trabalha com um conjunto de objetos. O objeto, por sua vez, possui valores armazenados em variveis de instncias, alm de conter um conjunto de mtodos que o manipulam. Os objetos que possuem os mesmos atributos e mtodos so agrupados em classes que tambm podem ser definidas como um tipo. Essa definio faz com que seja similar ao tipo abstrato de uma linguagem de programao orientada a objetos. O modo que um objeto A acessa os dados de outro B atravs do mtodo de B (enviar mensagem). A interface de mtodos de um objeto indica a sua parte externa visvel. As variveis de instncias e o cdigo dos mtodos so a parte interna que no so visveis externamente (Silberschatz et al., 1999). A Figura 2 mostra a representao do mesmo exemplo da Figura 1 em um Modelo Orientado a Objetos.

Figura 2 Exemplo de um Modelo Orientado a Objetos em um sistema bancrio.

So apresentados ao longo do trabalho o estudo, a comparao e a descrio das caractersticas do Banco de Dados Relacional e do Banco de Dados Orientado a Objetos, com o objetivo de avaliar os benefcios e pontos negativos de cada um. Para a avaliao destes modelos foi necessrio desenvolver um prottipo de uma aplicao para realizao de testes, visando avaliar as duas formas de armazenamento de dados e o desempenho de cada uma delas.

1.1

Objetivos
O objetivo deste trabalho avaliar as caractersticas de um Banco de Dados

Relacional, comparando-as com um Banco de Dados Orientado a Objetos. Haver apresentao das caractersticas, vantagens e desvantagens de cada um destes modelos e avaliao do desempenho para determinadas tarefas. Para fazer a avaliao foi necessrio implementar um prottipo de uma aplicao para testar os Bancos de Dados.

1.2

Objetivos Especficos
O foco deste trabalho a anlise das caractersticas do Banco de Dados Relacional e

do Banco de Dados Orientado a Objetos e a comparao entre eles. Esta anlise envolveu a implementao de um prottipo para uma Escola de Informtica para testar os bancos, a fim de descrever suas vantagens e desvantagens. O intuito do projeto avaliar se o modelo de Banco de Dados Orientado a Objetos realmente vantajoso e em quais casos ele poder obter melhor desempenho. A linguagem escolhida para o prottipo foi Java porque, alm de ser uma linguagem orientada a objetos, compatvel com Banco de Dados Orientado a Objetos, permite trabalhar com dados persistentes e, ainda, amplamente utilizada atualmente, alm de ser gratuita e multiplataforma. O prottipo se conecta a um Banco de Dados Relacional, o MySQL, escolhido por ser gratuito e bastante usado. Essa aplicao tambm ser integrada a um Banco de Dados Orientado a Objetos. So vrios Bancos de Dados Orientado a Objetos existentes como, Jasmine, db4objects (db4o), O2, Object Store, etc. Foi escolhido o db4objects pois de cdigo aberto e flexvel, usado com abrangncia de 2% em alguns pases e permite que sua

aplicao armazene e recupere dados com apenas uma linha de cdigo, mesmo com complexas estruturas de objetos em sua aplicao (Guerra, 2007).

1.3

Organizao do Trabalho
Os conceitos tericos so apresentados no captulo 2, onde h uma descrio do Banco

de Dados Relacional e do Orientado a Objetos, relatando tambm as vantagens e desvantagens observadas em cada modelo. No captulo 3 so descritos a metodologia, modelagem e codificao empregadas para a implementao do prottipo para uma Escola de Informtica, usando os Banco de Dados MySQL e db4objects (db4o). No captulo 4, h uma descrio dos testes e dos resultados obtidos. No capitulo 5 so relatadas as concluses obtidas neste projeto.

ASPECTOS TERICOS

Sero abordadas neste captulo as caractersticas dos Modelos de Bancos de Dados Relacional e Orientado a Objetos, descrevendo as vantagens e desvantagens de cada modelo que so relevantes para realizao do trabalho.

2.1

Banco de Dados Relacional


Banco de Dados Relacional o conceito abstrato que define maneiras de armazenar,

manipular e recuperar dados estruturados unicamente na forma de uma coleo de tabelas, cada uma das quais possui um nico nome, sendo elas simples estruturas com linhas e colunas. Ele foi um dos primeiros modelos de dados a se estabelecer em aplicaes

comerciais e, atualmente, utilizado em numerosas aplicaes no mbito do processamento de dados tradicional, sendo o modelo mais amplamente usado (Silberschatz et al., 1999).

2.1.1 Estrutura das Tabelas e seus Relacionamentos


Considere a Tabela 1 sobre Pessoas que consiste em quatro colunas: Cdigo, Nome, CPF, e Telefone. Essas colunas contm os atributos das Pessoas. Para cada atributo existe uma coleo de valores permitidos, chamado de domnio do atributo. O atributo Nome, por exemplo, o conjunto de todos os nomes de Pessoas. Suponha que Cdigo, Nome, CPF e Telefone (v1, v2, v3 e v4) estejam no domnio D1, D2, D3 e D4 respectivamente, ento a linha da tabela Pessoas que contm v1, v2, v3 e v4, ser um subconjunto de (Silberschatz et al., 1999): D1 x D2 x D3 x D4 Matematicamente existe uma relao como um subconjunto de um produto cartesiano de um conjunto de domnios, semelhantes definio de uma tabela. O que difere que se designa nome aos atributos e matematicamente se usam nomes numricos, utilizando o numero inteiro 1 para representar o atributo cujo o domnio aparece em primeiro lugar no conjunto de domnios e 2 para o atributo que tem o domnio que aparece em segundo e assim por diante. Como as tabelas usam o conceito matemtico de relao, pode se usar os termos matemticos relao e tupla (registros) no lugar de tabela e linhas (Silberschatz et al., 1999).

Na Tabela 1 existem trs tuplas. Suponha que a tupla varivel t se refere primeira tupla da relao. Usamos a notao t[Nome] = David Rodma t[CPF] = 303.072.794-52. Uma alternativa seria escrever t[1] para os valores da tupla no primeiro atributo, t[2] para o segundo e assim por diante. Matematicamente t r para representar que a tupla t esta na re-

lao r. Existe a possibilidade de um atributo possuir o mesmo domnio. Por exemplo, a relao Pessoas possui quatro atributos, Cdigo, Nome, CPF e Telefone. A relao Funcionrios possui o mesmo domnio, o conjunto formado pelos nomes de Pessoas. O valor nulo, que indica valor desconhecido ou inexistente, pertence a qualquer domnio possvel. O Telefone na relao Pessoas pode possuir um valor nulo caso a pessoa no tenha telefone (Silberschatz et al., 1999). As manipulaes das tabelas so feitas atravs de operadores, como, por exemplo, busca de dados. So os operadores de restrio, projeo ou juno que vo derivar as tabelas de outras tabelas. A operao de restrio, tambm conhecida como seleo, extrai linhas especficas de uma tabela. A operao de projeo extrai colunas especficas de uma tabela. J a operao de juno une duas tabelas com base em valores comuns em uma coluna em comum (Date, 2000).
Tabela 1 Tabela de dados referentes a Pessoas.

PESSOAS Cdigo Nome CPF 00005 David Rodma 303.072.794-52 00010 Rubens Ewald Filho 301.207.030-8 00015 Martin Scorsese 569.645.569-89
Tabela 2 Tabela de dados referentes a Funcionrios

Telefone (11) 4032-7592 (11) 4033-3559 (11) 5658-5455

Cdigo 00005 00010 Restrio:

FUNCIONRIOS Data_Admisso Quant_Horas_Trabalhada 18/02/2008 210 25/04/1999 245 Projeo: Pessoas sobre o Cdigo e CPF:
Tabela 3 Resultado da projeo.

Funcionrios (Tabela 2) nos quais Quantidades de Horas Trabalhadas > 220:


Tabela 4 Resultado da restrio. Cdigo 00010 Data_Admisso 25/04/1999 Quant_Horas_Trabalhada 245

Cdigo 00005 00010 00015

CPF 303.072.794-52 301.207.030-8 569.645.569-89

No exemplo de juno (Tabela 5), a tabela Pessoas (Tabela 1) e Funcionrios (Tabela 2) tm uma coluna Cdigo em comum, de maneira que podem ser juntadas com base no cdigo em comum entre essas colunas. Assim, produz as linhas cujos cdigos entre elas sejam iguais. A sada obtida pela operao pode servir como entrada para outra tabela. Juno: Pessoas e Funcionrios sobre Pessoas:
Cdigo 00005 00010 Tabela 5 - Tabela resultante da juno entre a tabela Funcionrios sobre Pessoas. Nome CPF Telefone Data_Admisso Quant_Horas_Trabalhada David Rodma Rubens Ewald Filho 303.072.794-52 301.207.030-8 (11) 4032-7592 (11) 4033-3559 18/02/2008 25/04/1999 210 245

Em um modelo relacional as tabelas no so estruturas fsicas e sim lgicas. Em relao ao nvel fsico, o sistema tem vrios modos para armazenar os dados: arquivos seqenciais, indexao, hashing, cadeia de ponteiros, compactao entre outras. Repare que no h nenhum ponteiro no nvel lgico conectando uma tabela a outra, como no exemplo mostrado entre a linha que contem o Cdigo da tabela Pessoas e a linha Cdigo da tabela Funcionrios, onde a conexo no feita por ponteiro e sim pelo aparecimento do valor Cdigo entre as duas tabelas. Podem existir ponteiros no nvel fsico, mas so ocultados do usurio (Date, 2000). Agregando as tabelas, restries, projees e junes, o modelo relacional constitudo dos componentes seguintes (Date, 2000): Tipos escalares (incluindo o tipo booleano); Gerador de tipo de relao: uma interpretao pretendida para esse tipo de relao gerada; Variveis de relaes: Para as relaes geradas que atribuem valores de relaes as variveis de relaes. Exemplo: insert, update e delete; Operaes relacionais: Para derivar valores de relaes de outros valores de relaes. No exemplo da Tabela 1 a relao Pessoas, de Cdigo (tipo inteiro) 0010 chama-se Rubens Ewald Filho (tipo texto), possuindo o CPF de n 301.207.030-8 e Telefone (11) 40333559. Esta proposio foi adquirida trocando Cdigo (cabealho) pelo valor 0010 (corpo),

Nome por Rubens Ewald Filho e CPF por 301.207.030-8.

2.1.2 Chaves
As tabelas se relacionam atravs de chaves. Uma chave um conjunto de um ou mais atributos que determinam que cada registro seja nico na tabela. A unicidade dos registros determinada por sua chave, que muito importante para a criao dos ndices. Existem dois tipos de chaves. A chave primria nos permite distinguir as vrias entidades de um conjunto identificando cada registro e garantindo a unicidade. Ela no pode se repetir. Um exemplo de chave primria seria o campo Cdigo presente na Tabela 1 e Tabela 2. A chave estrangeira formada atravs de um relacionamento com a chave primria de outra tabela. Define um relacionamento entre as tabelas e pode ocorrer repetidas vezes. Caso a chave primria seja composta na origem, a chave estrangeira tambm o ser (Silberschatz et al., 1999). Para se determinar a chave primria para um esquema de relaes deve se observar aspectos como conjuntos de entidades fracas, conjunto de relacionamento, tabelas combinadas e atributos multivalorados (Silberschatz et al., 1999).

2.1.3 Linguagens de Consultas


As informaes dos Bancos de Dados so obtidas atravs de uma linguagem de consulta, que, normalmente, so de nvel mais alto que as linguagens mais comuns. As linguagens de consultas so divididas em procedural e no-procedural. Na primeira, o usurio deve informar ao sistema a realizao de uma sequncia de operaes para obter o resultado que se deseja. J na segunda, o usurio descreve a informao que se deseja, sem fornecer um procedimento especfico para obt-la. Entre as linguagens puras, a lgebra relacional procedural e o clculo relacional de tupla ou domnio so no-procedurais (Silberschatz et al., 1999). Os sistemas de banco de dados comerciais incorporam tanto a linguagem procedural como a no-procedural. Entre as linguagens comerciais, a que mais se destaca o SQL, o qual usado pela maioria dos Bancos de Dados Relacionais.

2.1.4 Structure Query Language (SQL)


Originalmente desenvolvida pela IBM, a princpio foi chamado de Sequel, essa linguagem foi implantada como parte de um projeto (Sistema R) no inicio da dcada de 70. A linguagem foi sendo aprimorada e teve seu nome alterado para SQL (Structure Query Language). O SQL tem representado o padro para as linguagens dos Bancos de Dados Relacionais, devido em parte, necessidade de uma linguagem de consulta mais fcil para o usurio. O SQL combina construtores em lgebra e clculo relacional, e no apenas uma linguagem de consulta como tambm possui recursos para definio de estruturas de dados para modificao de dados e especificaes de restries de segurana (Silberschatz et al., 1999). A estrutura bsica do SQL : Select A1, A2, ... , An From R1, R2, ... , Rm Where P Select: relaciona os atributos desejados no resultado de uma consulta.

From: associa as relaes que sero pesquisadas durante a evoluo de uma expresso. Where: um predicado que envolve atributos da relao que aparece na clusula From. Cada Ai representa um atributo e cada Ri, uma relao. P um predicado. Os valores em SQL podem ser tratados de vrias maneiras. Para isso inclui vrias operaes (rename, union, intersect, except), ordenao (order by), duplicidade, funes (avg, min, max, sum, count), subconjuntos aninhados (in, not in), verificao de relaes vazias (exist, not exist), comparaes de conjuntos (> some, <=some, =some, < > some, > all, < all etc), remoo (delete), insero (insert), atualizaes (update), tipos de domnios (char, integer etc) e definies de relao (create table, primary key etc) (Silberschatz et al., 1999).

2.2

Banco de Dados Orientado a Objetos


Muitas aplicaes so limitadas por restries impostas ao Modelo Relacional (ou

sistema de SQL de modo geral). O modelo Orientado a Objetos, baseado no paradigma de programao Orientada a Objetos, que surgiu primeiramente para a linguagem Simula 67, e mais tarde introduzida para Smalltalk, C++, Java, entre outras, vem como uma alternativa para reverter s limitaes impostas ao Modelo Relacional (Silberschatz et al., 1999).

10

Como os Banco de Dados Orientados a Objetos so influenciados pelas Linguagens de Programao Orientada a Objetos, utiliza os conceitos de Objetos, Classes, Polimorfismo, Herana, Encapsulamento, descritos a seguir:

Objeto: modelam entidades fsicas ou abstratas do mundo real. Os objetos podem ser divido em persistentes - que so armazenados aps a execuo de uma aplicao, podendo ser recuperados e compartilhados e transientes - que persistem somente durante a execuo do programa, no sendo muito til para um Banco de Dados; Classes: Estrutura para conter em determinado modelo, os dados que devem ser representados e as operaes que devem ser efetuadas com eles (Santos, 2003); Mtodos: Operaes contidas em uma classe (Santos, 2003); Polimorfismo: Permite manipulao de instncias de classes que herdam de uma mesma classe ancestral de forma unificada (Santos, 2003); Herana: Reutilizao de classes que permite usar uma classe pai como base, herdando todos os campos e mtodos no privados da classe base (Santos, 2003); Encapsulamento: Capacidade de ocultar dados dentro de modelos, permitindo que somente operaes especializadas ou dedicadas manipulem os dados ocultos (Santos, 2003).

2.2.1 Novas Aplicaes de Banco de Dados


Os Bancos de Dados convencionais encontram certas dificuldades em relao a novas aplicaes que surgiram no mercado. Entre essas novas aplicaes esto os Banco de Dados Multimdia (imagens, vdeo-on-demand, dados geogrfico e espaciais, udio etc), Sistema de Informao de Escritrio (OIS), Banco de Dados Hipertexto (como, por exemplo, World Wide Web, que uma hipermdia), Projetos Auxiliados por Computador (CAD), Engenharia de Software Auxiliado por Computador (CASE), etc (Silberschatz et al., 1999). Com o aumento da capacidade e do menor custo do hardware (disco, processamento, memria, banda larga), e, a melhoria do gerenciamento de Banco de Dados, as novas aplicaes que no foram previstas no passado encontram dificuldades para serem modeladas no Banco de Dados Relacional (Silberschatz et al., 1999). Alm disso, as novas aplicaes esto se tornando mais complexas de se expressar. Por exemplo, um sistema da Secretria de Segurana Pblica, precisa tratar, constantemente, imagens, impresses digitais e assinaturas. O Modelo Orientado a Objetos pode tornar-se uma alternativa aos problemas encontrados no Modelo Relacional.

11

2.2.2 Estrutura do Modelo de Objetos


Um objeto se assemelha a uma entidade no Modelo Relacional. O paradigma de objeto trabalha com o encapsulamento de dados que representam um objeto em uma nica unidade, com um conjunto de variveis que contm dados de objetos, semelhantes aos atributos no Modelo Relacional. A comunicao entre o sistema realizada atravs de mensagens (chamadas de mtodos), que so as solicitaes que ocorrem entre os objetos ou execuo de um mtodo solicitado. Os mtodos so uma parte do cdigo que executam a mensagem e retornam um valor. Esta abordagem de mtodos pode ser motivada, como por exemplo, em uma empresa que tem funcionrios com cargos diferentes, em que a maneira de se calcular o salrio diversificada, pois voc pode ter funcionrios recebendo por hora, salrio fixo, bnus de vendas, etc. Essa forma de executar mtodos diferentes chamada de polimorfismo. O mtodo polimrfico seria encapsulado no cdigo para calcular o salrio dos funcionrios que obteria em resposta a mensagem calcular_salario. O encapsulamento faz com que se acessem somente os mtodos necessrios para sua execuo, j que as respostas so feitas atravs de mensagens que modificam os mtodos e variveis, sem alterar o resto do sistema (Silberschatz et al., 1999). Outra caracterstica do Modelo de Objetos a presena de classes de objetos, que so objetos similares presentes em um Banco de Dados. Isto inclui as variveis de mesmo nome, tipo e mtodos, que respondem a mesma mensagem. Os objetos que formam a classe so chamados de instncia de sua classe. O conceito de classes em um Modelo Orientado a Objetos assemelha-se a um conjunto de entidades num Modelo Relacional (Silberschatz et al., 1999).

2.2.3 Herana
Um Banco de Dados de Objetos geralmente composto de vrias classes, muitas vezes similares. Essas classes podem ser herdadas pelas subclasses (classes filhas), das superclasses (classes pais), podendo ento, as subclasses reaproveitarem parte do cdigo, como os atributos e mtodos. Um exemplo de herana seria ter uma classe Pessoas e a outra classe Funcionrios para representar uma Escola de Informtica. Ambas possuem variveis similares para Nome, Endereo, CPF, etc, em que, hierarquicamente, a classe Funcionrios poderia herdar de Pessoas. Desta maneira, como a classe Funcionrios herda as variveis da classe Pessoas,

12

seria necessrio somente a implementao das variveis especficas a classe Funcionrios, como salrio, data de admisso, entre outras. Esta hierarquia se assemelha a especializao (ISA) no modelo relacional (Silberschatz et al., 1999). As especializaes so chamadas de subclasses, portando, Funcionrios so uma subclasse de Pessoas e inversamente Pessoas uma superclasse de Funcionrios como mostra a Figura 3.

PESSOAS

ALUNOS PESSOAL ADMINISTRATIVO

FUNCIONRIOS PROFESSORES

Figura 3 Exemplo de especializao em hierarquia em um modelo de Escola de Informtica.

Na Tabela 6 apresentado o exemplo de implementao de classes com herana, no qual o prottipo do projeto se baseia:
Tabela 6 Exemplo de especializao de classes com herana para uma Escola de Informtica.

Class Pessoas{ int cod; String nome; String rg; String cpf; String sexo; date data_nasc; String tipo; String endereco; String bairro; String cidade; String uf; String cep; String telefone; String celular; String email; };

Class Alunos isa Pessoas { int matricula; String responsavel; String situacao float saldo; date data_ultimo_pagamento; date data_matricula; float nota; int frequencia; }; Class Funcionarios isa Pessoas{ int cod_func; String CTPS; float quant_horas_trabalhada; float salrio_hora; date data_admissao; float salrio_total; };

Class Pessoal_Administrativo isa Funcionarios{ String cargo; };

Class Professores isa Funcionarios { String area; String curso_habilitados; };

13

2.2.4 Identidade de Objeto (OID) e Ponteiros


No modelo Orientado a Objetos, o objeto mantm a identidade mesmo que sua propriedade se altere (variveis, mtodos, etc). Esse conceito no se aplica ao Modelo Relacional, porque as tuplas s so diferenciadas pelos valores que contm. A forma de identidade que o Modelo de Objeto usa embutida, ou seja, atribudo um identificador automtico, ao contrrio do Relacional em que se precisa atribuir uma chave primria em uma tabela como identificador nico (Silberschatz et al., 1999). A identidade de objeto (OID) permite identificar unicamente um objeto, podendo ser nmeros longos, caracteres, entre outros, onde a habilidade de armazenar mais importante do que um nome de fcil compreenso pelo usurio. O objeto armazena uma referncia do objeto que o representa. O problema que os identificadores so especficos do sistema e devem ser traduzidos se houver necessidade de mudar para outro sistema, pois este j possui identificadores nicos externo ao sistema (Silberschatz et al., 1999). Os OIDs podem privar o programador de se preocupar com a implementao das chaves, mas em muitos casos, no elimina totalmente o uso de chaves pelo usurio. As chaves podem ser necessrias para facilitar referncias ao mundo exterior e tambm servir como bases de pesquisas dentro do Banco de Dados (Date, 2000). Ao se criar um objeto, ele recebe um identificador. Linguagens Orientadas a Objetos no foram originalmente adaptadas para trabalharem com objetos persistentes, portanto o identificador somente ser utilizado durante a execuo do programa. Aps o trmino, o objeto excludo e o identificador fica sem sentido (Silberschatz et al., 1999). A idia de identidade de objeto est relacionada com ponteiros. Um exemplo de se obter identidade atravs de ponteiros para localizao fsica. Um OID em C++ um ponteiro de memria. Os identificadores em Banco de Dados em C++ so implementados atravs de ponteiros persistentes que, ao contrrio de ponteiros de memria, permanecem vlidos mesmo aps o encerramento do programa. Porm a localizao fsica de um objeto pode se alterar com o tempo. Para isso, existem vrias formas de permanncia de identidade: intraprocedimento, intraprograma, interprograma e persistente, sendo esta ltima necessria para o sistema de armazenamento de objetos, pois a persistncia no unicamente durante a execuo do programa, mas, sim, entre as mudanas de estruturas dos dados (Silberschatz et al., 1999).

14

2.2.5 Linguagens de Programao Persistente


O que difere uma linguagem de programao de um Banco de Dados a manipulao de dados persistentes que continuam a existir mesmo que o programa se encerre, como por exemplo, as tabelas do Banco de Dados Relacionais. Isso diferente das linguagens de programao que s manipulam arquivos. A linguagem relacional SQL mais efetiva para manipular dados, mas outras linguagens de programao so exigidas para a implementao de uma aplicao como interface de usurio e rede. A forma mais comum para realizar a interface entre o Banco de Dados e a linguagem de programao a introduo da linguagem SQL no meio do cdigo. Esta soluo possui o inconveniente de converter tuplas e objetos para fora do Paradigma Orientado a Objetos, podendo ocorrer erros de difcil identificao. Alm disso, a converso ocupa parte substancial do cdigo. Uma possvel soluo seria a integrao com uma mquina conectada na rede compartilhando o mesmo sistema (Silberschatz et al., 1999). A linguagem de programao persistente uma linguagem de programao estendida com estrutura para tratar dados persistentes. A vantagem no precisar alterar o formato dos objetos para armazenamento de dados alm de que as mudanas que ocorrem so de forma transparente. Outra vantagem que no se necessita de cdigo explicto que mova os dados do banco para a memria para ento manipul-los (Silberschatz et al., 1999). As mais importantes linguagens orientadas a objetos com verses persistentes so C++, Smaltalk e Java. Essas linguagens permitem manipular os dados diretamente sem ter que passar por uma linguagem do Modelo Relacional, como o SQL. A desvantagem de manipular os dados pela linguagem de programao que elas so mais poderosas, tornando mais fcil cometer erros no Banco de Dados. A complexidade da codificao tambm se torna maior. O Grupo de Gerenciamento de Banco de Dados Objetos, conhecido ODMG (Object Database Management Group) se empenhou em tentar padronizar as extenses de linguagens C++, Smaltalk e Java para trabalhar com persistncia, definindo bibliotecas e estendendo-as o menos possvel (Silberschatz et al., 1999). As linguagens de programao orientada a objetos j possuem o conceito de objetos e estrutura para cri-los, mas esses objetos so transientes, ou seja, desaparecem quando o programa se encerra. Para tornr-lo persistente, existem vrias formas a serem implementadas. Entre elas esto Persistncia por Classe a mais simples, onde se declara que uma classe persistente; Persistncia por Marcao - Os objetos so marcados como transientes e a deciso de persistncia declarada depois, mas antes do programa se encerrar;

15 Persistncia por Referncia Um ou mais objetos so declarados como persistentes (raiz). A partir disto, todos os objetos referenciados a partir dos objetos razes so considerados persistentes, assim como as referncias feitas a partir destes mesmos objetos. Um ponto negativo para essa soluo que a seqncia de cadeias de referncia pode ter um alto custo para aplicao (Silberschatz et al., 1999).

2.3

Vantagens

Desvantagens

dos

Modelos

Relacional

Orientado a Objetos
Nesta seo so apresentadas as principais vantagens e desvantagens dos Modelos Relacional e Orientado a Objetos.

2.3.1 Vantagens do Modelo Relacional


As principais vantagens do Modelo Relacional so: Bastante usado e com um grande legado (Date, 2000); Grande nmero de ferramentas e caractersticas que implementam o SQL, como padres de conectividade, ferramentas de relatrio, ferramentas de OLAP e de backup, padres de recuperao e ferramentas grficas; Quando o sistema de Modelo Relacional instalado, j vem pronto para uso (Date, 2000); Todas as entidades, ainda que elas sejam relacionamentos, so representados do mesmo modo uniforme especificamente por meio de linhas em relaes; O Banco de Dados pode ser manipulado e alterado independentemente da aplicao (Date, 2000); Utilizao de diversas aplicaes em um mesmo Banco de Dados (Paterson et al., 2006).

2.3.2 Desvantagens do Modelo Relacional


As principais desvantagens do Modelo Relacional so: Necessidade de seleo de chaves entre tabelas; Necessidade de mapeamento para converso entre a linguagem de programao orientada

16

a objetos e o formato relacional para transformar objetos em estruturas de tabelas, o que o torna mais lento em tempo de compilao e execuo e ainda exige parte substancial de cdigo (Silberschatz et al., 1999); Codificao de converso entre Objetos e Tuplas opera fora do paradigma de programao orientada a objetos e h um risco maior de erros no detectados (Silberschatz et al., 1999); Utilizao de cdigos sem significado semntico para poder identificar tuplas de seleo; Dificuldade de modelar novas aplicaes e objetos complexos, como por exemplo, dados multimdia (Silberschatz et al., 1999).

2.3.3 Vantagens do Modelo de Objetos


As principais vantagens do Modelo de Objetos so: Utilizao dos princpios das linguagens de programao orientada a objetos (Silberschatz et al., 1999); No necessria a seleo de chaves para as vrias classes de objetos e utilizar cdigos sem significado semntico para poder identificar tuplas de seleo; Maior consistncia em manipulaes de dados; Armazenamento direto de tipos de dados complexos (Silberschatz et al., 1999); Habilidade de alterar a definio de um objeto sem modificar o resto do sistema (Silberschatz et al., 1999); Utilizao de identificador de objeto (OID) nico e imutvel, criado pelo sistema automaticamente e que so implementados em baixo nvel (Silberschatz et al., 1999); Permite manipular o Banco de Dados diretamente com a linguagem de programao sem intermediao de outra linguagem, o que possibilita ter objetos muito complexos sem necessidade de transformar os dados (Silberschatz et al., 1999).

17

2.3.4 Desvantagens do Modelo de Objetos


As principais desvantagens do Modelo de Objetos so: Pouco usado (Date, 2000); Ferramentas grficas para desenvolvimento possuem poucos recursos. Ausncia das ferramentas e caractersticas disponveis em SQL; Quando o sistema instalado no fica disponvel para uso imediato, ele adaptado para construes de classes e mtodos (Date, 2000); Instabilidade no direcionamento de aplicaes, j que tudo se resume a objetos; Linguagens para consultas no padronizadas (Date, 2000); Modificaes de um esquema de banco de dados orientados a objeto mais complicado que o modelo relacional, pois possui tipos complexos e herana; Gasta-se mais tempo para implementao do cdigo para manusear objetos persistentes e apresenta dificuldades de especificar restries (Date, 2000); Mais chance de cometer erros no Banco de Dados, j que as linguagens de programao so mais poderosas (Silberschatz et al., 1999); Identificadores so especficos do sistema e devem ser traduzidos se houver necessidade de mudar para outro sistema (Silberschatz et al., 1999).

18

PROJETO DO PROTTIPO

Para dar inico ao projeto do prottipo, foi definido um problema para ser modelado. O problema escolhido para ele foi de uma Escola de Informtica. Os casos de uso do prottipo esto definidos na Figura 4 que resume as interaces entre o usurio e o prottipo.

Figura 4 Casos de uso para o prottipo de um sistema de Escola de Informtica.

Conforme os casos de uso descrito na Figura 4, as aes disponveis para um Funcionrio de Escola de Informtica so de Cadastrar Pessoas (Alunos ou Funcionrios), Cadastrar Turmas, Cadastrar Cursos, Matricular Alunos e Calcular Salrio do Funcionrio. Os cadastros feitos no prottipo podem ser alterados, consultados e removidos.

3.1

Modelagem do Banco de Dados


O projeto do prottipo foi modelado com os dois modelos de Banco de Dados, o

Relacional e o de Objetos. A Figura 5 exibe a modelagem para o Banco de Dados Relacional e a Figura 6 mostra a Modelagem Orientada a Objetos com suas respectivas classes. A Figura 7 apresenta a modelagem das Tabelas.

19

3.1.1 Modelagem Relacional para o Prottipo

Figura 5 Modelo Relacional para o prottipo de um sistema de Escola de Informtica.

20

3.1.2 Modelagem das Classes de Objetos para o Prottipo

Figura 6 Modelo Orientado a Objetos para o prottipo de um sistema de Escola de Informtica.

21

3.1.3 Modelagem das Tabelas para o Modelo Relacional

Figura 7 Modelagem das Tabelas do Modelo Relacional

3.2

Softwares utilizados no Projeto

Os seguintes softwares foram utilizados para o desenvolvimento deste projeto:

IDE NetBeans 6.7 - IDE Java de Cdigo Livre (NetBeans, 2009); MySQL 5.4 - Banco de Dados Relacional; db4objects (db4o) 7.4 - Banco de Dados para Objetos (Informaes, 2009); Windows Vista Home 32 bits - Sistema Operacional.

22

3.2.1 MySQL
O MySQL um gerenciador de Banco de Dados Relacional que utiliza a linguagem SQL. Desenvolvido para proporcionar economia na Web (Maior, 2009) e a sua crescente popularizao se devem, principalmente, por ser gratuito e com cdigo aberto (licena GPL). Est disponvel para vrios sistemas operacionais (Windows, Linux, MacOS, FreeBSD, OpenBS, etc) . Ele foi produzido pela empresa alem MySQL AB, disponvel desde 1996, mas tem uma histria de desenvolvimento que remonta a 1979 (Welling-Thomson, 2005). Mais tarde o MySQL foi comprado pela Sun Microsystems que hoje est preste a pertencer a Oracle (Oreskovic-Finkle, 2009). Ele utiliza SQL e permite armazenar, consultar, classificar e recuperar dados de forma eficiente e garante o acesso a multiusurios, assegurando que somente usurios autorizados acessem os dados (Welling-Thomson, 2005). Usado em mais de 10 milhes de mquinas com 50 mil downloads dirios (Sun, 2008), alguns de seus usurios so o Facebook, Google, Nokia, Paggo, NASA, globo.com, NBC etc. (MySQL Customers, 2009). Segundo a Sun, seus benefcios so ferramentas para fcil desenvolvimento e implantao de infra-estruturas da Web complexas, dimensionvel para suportar cerca de um milho de usurios ao mesmo tempo e implantao em vrias camadas que reduz custos e torna a implantao mais segura e simples (Maior, 2009). A Figura 8 mostra a representao da arquitetura MySQL.

Figura 8 - Representao da arquitetura de um servidor Mysql (Palkovic, 2008).

23

3.2.2 db4objects (db4o)

O db4objects (db4o) um Banco de Dados Orientado a Objetos open source, projetado para aplicaes do tipo embarcada, cliente-servidor e desktop. Foi usado para a implementao do prottipo no projeto. Possui modo nativo para Java e .Net. Usa uma nica biblioteca de desenvolvimento que se integra facilmente s aplicaes e executa de forma altamente confivel e escalvel tarefas de persistncia com somente algumas linhas de cdigo, no importando o quanto so complexas as estruturas. No necessita utilizar-se de consultas SQL para CRUD (Create, Read, Update e Delete), eliminando a troca de orientado a objetos por performance (db4o, 2009). Empresas como a Boing, Bosch, Hertz, BMW, Intel, Seagate entre outras (Customers and Partners, 2009), j utilizam o db4o. Apresenta vantagens em relao ao Banco de Dados Relacional: oferece rapidez de insero, utiliza pouco recurso computacional, tem fcil aprendizado, acesso direto ao Banco de Dados sem utilizar ORM (Mapeamento ObjetoRelacional) e ambiente de administrao zero, j que as rotinas de melhoria podem ser feitas por um programador (Guerra, 2007). Na Espanha, a Indra Sistemas, uma empresa de desenvolvimento de softwares, foi contratada para criar o centro de controle do sistema espanhol de trens bala AVE. Neste projeto, o db4o foi utilizado como a base de dados de tempo real para controlar o trfego. A capacidade de processamento do sistema da Indra fica em torno de 200 mil objetos por segundo (Rosenberg, 2009). A Figura 9 mostra que o objeto desmontado para o armazenamento em estruturas de tabelas no Banco de Dados Relacional. J no db4o, o objeto diretamente armazenado como objeto.

Figura 9 - Armazenamento de objetos em um B.D. Relacional e em um B.D. db4o (Paterson et al., 2006).

De acordo com a empresa que produz o db4o, este banco roda at 44 vezes mais rpido que os Bancos de Dados conhecidos como Hibernate com Mysql (db4o, 2009). O benchmark de licena GPL, PolePosition, tem um mtodo de teste chamado Barcelona que faz escrita, leitura, consultas e remoo de objetos com uma estrutura de herana de 5 nveis (PolePosition, 2009). Segundo o teste, o db4o se saiu melhor em relao a vrios Bancos de

24

Dados conforme detalhes da Tabela 7.


Tabela 7 - Detalhes do benchmark open source PolePosition gerado para comparar o db4o (Benchmarks, 2009).

mais rpido

mais lento

Os recursos de consultas so fundamentais para qualquer Banco de Dados e o db4o oferece vrios mtodos de recuperao de dados (Paterson et al., 2006): QBE (Query by Example): No mtodo QBE, voc cria um modelo de objeto, que uma instncia da classe que voc deseja pesquisar. Se atribuir valores para um ou mais atributos no seu modelo, ento db4o procura por objetos no Banco de Dados com os atributos correspondentes. um mtodo simples e de fcil aprendizagem, mas s ideal para consultas que no precisam de operadores lgicos. SODA (Simple Object Data Access): Constri um grafo de consulta navegando referncias em classes e as restries que impe. Utiliza strings para identificar os campos. Rpido, mas o conceito pode ser difcil de acostumar. NQ (Native Query): uma consulta nativa expressa inteiramente na linguagem de programao e com checagem de tipos durante a compilao. Oferece consultas com vrias vantagens importantes.

3.3

Exemplo MySQL X db4o


Seguem dois cdigos simples de exemplo para insero, atualizao, consulta e

remoo, escrito linguagem Java. O primeiro utiliza o Banco de Dados Relacional MySQL e o segundo o Banco de Dados Orientado a Objetos db4o.

25

3.3.1 Exemplo MySQL


Criando a tabela do Banco de Dados Relacional MySQL utilizando comandos SQL:
CREATE TABLE PESSOAS( COD INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, NOME VARCHAR(40) )ENGINE=INNODB;

Cdigo em Java utilizando o MySQL:


package exemplorelacional; import java.sql.*; /** * * @author David */ public class Main { public static void main(String[] args) throws SQLException { //Varivel da conexo com o Banco de Dados Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Banco", "root", ""); //Varivel que permite inserir os comandos SQL Statement stm = conn.createStatement(); //Varivel para obter o resultado da consulta ResultSet result; //INSERO stm.executeUpdate("INSERT INTO Pessoas VALUES ('" + 20 + "','David');"); //ATUALIZAO stm.executeUpdate("UPDATE Pessoas SET NOME='Jaqueline' WHERE cod=" + 20); //CONSULTA result = stm.executeQuery("SELECT * FROM Pessoas WHERE cod=" + 20); //Imprime o resultado da consulta while (result.next()) { System.out.println("Cdigo: " + result.getString("cod")); System.out.println("Nome: " + result.getString("nome")); } //REMOO stm.executeUpdate("DELETE FROM Pessoas Where Cod=" + 20); } }

Sada do Programa:
Cdigo: 20 Nome: Jaqueline

26

3.3.2 Exemplo db4o


Declarao da classe Pessoas em Java:
package exemploobjetos; /** * * @author David */ public class Pessoas { private int cod; private String nome; public void setCod(int cod) { this.cod = cod; } public void setNome(String nome) { this.nome = nome; } public int getCod() { return (cod); } public String getNome() { return (nome); } }

Cdigo em Java utilizando o Banco de Dados Orientado a Objetos db4o:


package exemploobjetos; import com.db4o.*; /** * * @author David */ public class Main { public static void main(String[] args) { //Varivel do arquivo do Banco de Dados ObjectContainer db = Db4o.openFile("Banco.yap"); //Criando um objeto do tipo Pessoas Pessoas p = new Pessoas(); //Objeto do tipo Pessoas para obter o objeto que se deseja do banco Pessoas achou_p; //Varivel para obter o resultado do objeto recuperado ObjectSet result;

27

//INSERO p.setCod(20);//Instanciando o objeto com o cdigo 20 p.setNome("David");//Instanciando o objeto com o nome David db.set(p);//Armazenando o objeto no banco //ATUALIZAO p.setCod(20);//Instanciando o objeto com o cdigo 20 result = db.get(p);//Recupera o objeto p do Banco achou_p = (Pessoas) result.next();//retorna o objeto se existir achou_p.setCod(20);//Instanciando o objeto encontrado com cdigo 20 achou_p.setNome("Jaqueline");//Alterando o objeto para o nome Jaqueline db.set(achou_p);//Armazenando o objeto no Banco //CONSULTA p.setCod(20); result = db.get(p); achou_p = (Pessoas) result.next(); //Imprime o resultado da consulta System.out.println("Cdigo: " + achou_p.getCod()); System.out.println("Nome: " + achou_p.getNome()); //REMOO p.setCod(20); result = db.get(p); achou_p = (Pessoas) result.next(); db.delete(achou_p);//Apaga o objeto db.close();//Fechando o Banco } }

Sada do Programa:
Cdigo: 20 Nome: Jaqueline

3.4

O Prottipo
O prottipo consiste em dois programas Java com interface grfica. Um utiliza o

Banco de Dados Relacional MySQL e o outro o Banco de Dados Orientado a Objetos db4o, ambos fazendo as mesmas operaes conforme os casos de usos descritos na Figura 4 do captulo 3 (p. 18). A Figura 10 mostra o prottipo em uso e suas respectivas telas.

28

Figura 10 Diagrama das telas do prottipo para Escola de Informtica.

Para a implementao do prottipo relacional foi necessrio instalar o MySQL, configurar o servidor local e a conexo, em seguida criar o Banco de Dados com suas respectivas tabelas para ento dar incio a implementao em Java. Houve certa dificuldade no Modelo Relacional em relao a implementao do cdigo Java, pois o compilador no fazia verificao de sintaxe dos comandos SQL, que era considerados como string pelo compilador, o que ocasionava em muitos erros e excees que eram somente identificados na hora das execuo do prottipo. Umas das facilidades encontradas na implementao do prottipo relacional que ele possui recursos e ferramentas que facilitam a implementao. A IDE Java NetBeans por exemplo, oferece opo de criar um programa bsico, automaticamente, apenas necessrio indicar as tabelas a serem utilizadas. Isto facilita, em partes, a implementao, pois incluiu os botes new, delete, refresh, save com as suas respectivas operaes j implementadas e prontas para serem utilizadas. Alm disso, inclui uma tabela automaticamente no programa, que facilita para o usurio visualizar e manipular os dados. Esse programa bsico foi ento adaptado para as necessidades do prottipo e foram

29

feitos vrios ajustes para se adaptar as necessidades dos casos de usos para uma Escola de Informtica. A diferena observada no prottipo orientado a objetos, que utiliza o db4o, que no foi necessrio instalar, configurar e criar o Banco de Dados para dar incio a implementao do prottipo. A nica tarefa necessria a adio da biblioteca do db4o no projeto. As instrues foram implementadas, manualmente, na codificao. Neste processo foi necessrio declarar as classes, com as suas respectivas heranas, que iriam compor os objetos para a modelagem de uma Escola de Informtica. Para salvar um objeto foram necessrias algumas linhas de cdigo para armazenar, diretamente, a classe como objeto no banco. O mesmo vale para recuperar, atualizar e apagar.

30

TESTES

Para testar os Bancos de Dados foi necessrio criar um prottipo de teste em Java, especificamente, para avaliar o Banco de Dados Relacional (MySQL) e o Orientado a Objetos (db4o), utilizando as mesmas classes e tabelas contidas no prottipo de aplicao para Escola de Informtica. Ele retorna o tempo em milisegundos (ms) durante a manipulao de 4500 registros no Banco de Dados (Apndice A, p. 43-83 segue a codificao do programa de testes do banco). Os testes foram repetidos trs vezes e foi calculada a mdia e o desvio padro (resultados de todos os testes no Apndice B, p. 84-89). O objetivo foi verificar o tempo gasto para insero, atualizao, consulta e remoo dos dados e analisar os resultados obtidos. Foram avaliados nos testes: comparao entre as tabelas sem relacionamentos e objetos sem heranas, comparao entre tabelas com relacionamentos e objetos com heranas. O primeiro teste foi para insero conforme o grfico da Figura 11. Em seguida, foram efetuados os de atualizao, consulta e remoo (Figura 12, Figura 13 e Figura 14 respectivamente).

4.1

Testes de Insero
O teste realizado para insero mostrou que o db4o excelente nesta tarefa como se v

no grfico da Figura 11. A diferena observada entre a insero db4o e o MySQL foram bem grande, dando grande vantagem ao Banco de Dados Orientando a Objetos. Mesmo quando se trata de objetos com herana, o tempo gasto foi praticamente o mesmo dos que no possui. Quando no h herana foram cerca de 0,47 segundos para insero de 4500 registros enquanto as tabelas sem relacionamentos no MySQL gastaram 140,21 segundos. Os objetos com herana consumiram 0,53 segundos enquanto que as inseres em tabelas com relacionamentos gastaram 370,8 segundos. No Banco de Dados Relacional foi observado que existe perda de desempenho quando necessrio relacionar tabelas para inserir dados conforme o grfico.

31

Insero
400000 350000 300000

Tempo (ms)

250000 200000 150000 100000 50000 0 900 1800 2700 3600 4500

Nmero de registros
Tabelas sem relacionamentos (Java + jdbc/MySQL) Objetos sem herana (Java + db4o) Tabelas com relacionamento (Java + jdbc/MySQL) Objetos com herana (Java + db4o)
Figura 11 Grfico do teste de insero nos bancos de dados para 4500 registros.

4.2

Testes de Atualizao
Na atualizao, o Banco de Dados Orientado a Objetos no teve o bom desempenho

mostrado na insero. O Banco de Dados Relacional MySQL foi superior ao db4o tanto na atualizao de tabelas sem relacionamentos, como tambm nas que possuiam relacionamentos conforme a Figura 12. A atualizao de tabelas sem relacionamentos gastaram 137,53

segundos e objetos sem herana demorou 407,51 segundos. Com relacionamentos foram 148,53 segundos equanto que os objetos com herana teve um tempo de 219,76 segundos. Curiosamente, os objetos com herana foram mais rpidos do que os objetos sem herana, possivelmente, porque a busca do objeto para atualizao no banco feita somente nos objetos que so do mesmo tipo do filho que se deseja. Por exemplo, se existe a classe Pessoas e a sua classe filha Alunos e deseja-se recuperar um aluno para atualizao, o banco far a busca somente por objetos do tipo Alunos, o que poderia explicar o melhor desempenho em relao aos objetos sem herana. Se a busca fosse por um objeto do tipo Pessoas, a busca para atualizao no banco se daria para todos do mesmo tipo, o que teoricamente, gastaria mais tempo, porm isto apenas uma reflexo e no uma afirmao, tendo como base o resultado

32

do teste. O grfico mostra que a busca por objetos com herana mais rpido do que os sem herana, e chegando at ficar mais prximo do tempo gasto no Banco de Dados Relacional. Possivelmente, aumentando a quantidade de classes com heranas e tabelas relacionadas pode ser que o db4o supere o MySQL, mas este procedimento no foi realizado.

Atualizao
450000 400000 350000

Tempo (ms)

300000 250000 200000 150000 100000 50000 0 900 1800 2700 3600 4500

Nmero de registros
Tabelas sem relacionamentos (Java + jdbc/MySQL) Objetos sem herana (Java + db4o) Tabelas com relacionamento (Java + jdbc/MySQL) Objetos com herana (Java + db4o)

Figura 12 Grfico do teste de atualizao nos bancos de dados para 4500 registros.

4.3

Testes de Consulta
Nos testes de consulta, o MySQL foi bem superior ao db4o, mostrando que o Banco de

Dados Relacional bem superior em consultas do que o Banco de Dados Orientado a Objetos, conforme o grfico da Figura 13. Em consultas com uma nica tabela foram gastos 1,83 segundos enquanto consultas de objetos sem herana gastaram 406,33 segundos. As tabelas relacionadas tiveram um tempo de 3,93 segundos enquanto consultas de objetos com herana gastou 229,34 segundos. Novamente, os objetos com herana tiveram melhor desempenho do que os sem herana. A diferena de consultas entre tabelas sem relacionamento e com relacionamento foi mnima.

33

Consulta
450000 400000 350000

Tempo (ms)

300000 250000 200000 150000 100000 50000 0 900 1800 2700 3600 4500

Nmero de registros
Tabelas sem relacionamentos (Java + jdbc/MySQL) Objetos sem herana (Java + db4o) Tabelas com relacionamento (Java + jdbc/MySQL) Objetos com herana (Java + db4o)

Figura 13 Grfico do teste de consulta nos bancos de dados para 4500 registros.

4.4

Testes de Remoo
Novamente, o MySQL teve o melhor tempo geral para remoo de 4500 registros,

como demonstra o grfico da Figura 14. Foram cerca de 140,79 segundos contra 189,45 segundos gastos com objetos sem herana. Tabelas com relacionamentos levaram um tempo de 141,63 segundos contra 233,59 segundos dos objetos com herana. Porm, o teste revelou que o desempenho do db4o ganha em performance em relao ao MySQL na medida que vo se removendo mais registros. O tempo de remoo do Banco Relacional demonstrou-se relativamente constante enquanto o Orientado a Objetos sofria queda de tempo gasto quanto mais se removia. Possivelmente se o teste prosseguisse com mais registros, chegaria um momento em que o tempo geral de remoo do db4o seria superior ao MySQL, revelando que o db4o seria a melhor soluo caso fosse removida uma grande quantidade de registros, porm seria necessrio realizar um novo teste com mais objetos para comprovar isso.

34

Remoo
250000 200000

Tempo (ms)

150000 100000 50000 0 900 1800 2700 3600 4500

Nmero de registros
Tabelas sem relacionamentos (Java + jdbc/MySQL) Objetos sem herana (Java + db4o) Tabelas com relacionamento (Java + jdbc/MySQL) Objetos com herana (Java + db4o)
Figura 14 Grfico do teste de remoo nos bancos de dados para 4500 registros.

4.5

Testes com Procedures SQL


O objetivo deste teste foi avaliar o quanto a linguagem de programao interfere no

desempenho do Banco de Dados Relacional. Para isso foram criadas procedures SQL diretamente no Banco de Dados MySQL. Elas efetuam os mesmos testes anteriores, mas neste caso, no foi usado nenhuma linha de cdigo Java, somente comandos SQL. As Procedures foram ento comparadas com as manipulaes de dados no Banco de Dados Relacional utilizando a linguagem Java conforme os grficos da Figura 15, Figura 16, Figura 17 e Figura 18.

35

Insero
450000 400000 350000 300000
Tempo (ms)

Atualizao
160000 140000 120000 100000 Tempo (ms) 80000 60000 40000 20000 0

250000 200000 150000 100000 50000 0


Nmero de registros:

4500

Nmero de registros:

4500

Tabelas sem relacionamentos (Java + jdbc/MySQL) Procedures de tabelas sem relacionamento (MySQL) Tabelas com relacionamento (Java + I - Desvio Padro jdbc/MySQL) Procedures de tabelas com relacionamento (MySQL) Figura 15 Grfico do teste de insero entre procedures SQL e Banco de Dados Relacional usando Java.

Tabelas sem relacionamentos (Java + jdbc/MySQL) Procedures de tabelas sem relacionamento (MySQL) Tabelas com relacionamento (Java + I - Desvio Padro jdbc/MySQL) Procedures de tabelas com relacionamento (MySQL) Figura 16 Grfico do teste de atualizao entre procedures SQL e Banco de Dados Relacional usando Java.

Consulta
6000 5000 Tempo (ms) 4000 Tempo (ms) 3000 2000 1000 0
Nmero de registros:

Remoo
160000 140000 120000 100000 80000 60000 40000 20000 0

4500

Nmero de registros:

4500

Tabelas sem relacionamentos (Java + jdbc/MySQL) Procedures de tabelas sem relacionamento (MySQL) Tabelas com relacionamento (Java + I - Desvio Padro jdbc/MySQL) Procedures de tabelas com relacionamento (MySQL) Figura 17 Grfico do teste de consulta entre procedures SQL e Banco de Dados Relacional usando Java.

Tabelas sem relacionamentos (Java + jdbc/MySQL) Procedures de tabelas sem relacionamento (MySQL) I - Desvio Padro Tabelas com relacionamento (Java + jdbc/MySQL) Procedures de tabelas com relacionamento (MySQL) Figura 18 Grfico do teste de remoo entre procedures SQL e Banco de Dados Relacional usando Java.

36

Nos testes apresentados nos grficos da Figura 15, Figura 16, Figura 17 e Figura 18, houve diferena de tempo entre procedures SQL e as manipulaes com os comandos SQL dentro da linguagem Java. Considerando o desvio padro, o ganho mais significativo para as procedures foi para as consultas da Figura 17. Neste caso a linguagem de programao interferiu no desempenho das consultas se comparados aos comandos SQL executados diretamente no Banco de Dados. As procedures SQL foram em mdia 231,53% mais rpida do que as consultas utilizando os comandos SQL dentro da linguagem Java para consultas entre tabelas sem relacionamentos. J com relacionamento, o ganho das procedures foi de 261,88% aproximadamente.

4.6

Anlise dos Resultados


Os testes mostraram que o Banco de Dados Relacional foi melhor na maior parte dos

casos. O MySQL s perdeu na insero de dados e teve uma boa economia de tempo para consultas se comparado com o db4o. O Banco de Dados Orientado a Objetos tem desempenho melhor para insero. Para um grande nmero de remoo de registros o db4o tende a ser mais rpido que o MySQL. A Tabela 8 mostra uma sntese de todos os resultados nos testes de manipulaes de 4500 registros. Outro fato observado nos testes que a linguagem de programao interfere negativamente no desempenho das consultas no Banco de Dados Relacional conforme os resultados da Tabela 8, o que explica o melhor desempenho das procedures SQL.
Tabela 8 Resumo dos resultados nos testes efetuados para 4500 registros (tempo em segundos).

Sntese dos resultados para manipulaes de 4500 registros (em segundos)

Insero Atualizao Consulta Remoo Tabelas sem relacionamentos (MySQL) + Java 140,21 137,53 1,83 140,79 Procedures SQL sem relacionamentos (MySQL) 135,78 135,82 0,79 135,63 Objetos sem herana (db4o) + Java 0,47 407,51 406,33 189,95 Insero Atualizao Consulta Remoo Tabelas com relacionamentos (MySQL) + Java 370,80 148,53 3,93 141,63 Procedures SQL com relacionamentos (MySQL) 376,06 139,72 1,50 136,22 Objetos com herana (db4o) + Java 0,53 219,76 229,34 233,59 mais rpido mais lento

37

A provvel causa que explica porque o Banco de Dados Relacional foi melhor nos testes que os testes foram implementados com dados simples, como strings e nmeros, que so dados que o Banco de Dados Relacional est apto a trabalhar e que foram previstos desde o inico em que foi projetado. Nos testes no houve objetos complexos, como, por exemplo, vdeos e imagens no qual o Banco de Dados Orientado a Objetos parece ser o mais adequado a trabalhar e, sim, dados comuns que a maior parte dos sistemas comerciais ainda utiliza. Se fossem objetos complexos e dezenas de nveis de herana talvez os resultados fossem diferentes. Analisando os resultados, conclui-se ento que os Bancos de Dados Relacionais so a melhor escolha para a manipulao de dados comuns.

38

CONCLUSO

Dificilmente existir uma forma de armazenamento de dados definitiva, mas o dever de buscar as melhores solues para cada caso em uma aplicao sempre vlida. Existe muita controvrsia entre o uso dos Modelos de Dados Relacionais e de Objetos, mas ambos possuem suas virtudes e defeitos. A maior razo de se usar o Modelo Relacional por ser o mais utilizado em aplicaes comerciais e possuir um grande legado, pois antigas informaes de empresas e aplicaes ainda so dependentes desse modelo de dados. O grande benefcio do Modelo de Orientado a Objetos de utilizar os conceitos de programao orientada a objetos, que faz que com que ele no perca as sutilezas da linguagem de programao, pois no necessita de um tradutor entre linguagem de programao e a de consulta ao se trabalhar com dados persistentes, armazenando objetos complexos diretamente no banco. Os testes realizados com o Banco de Dados Orientado a Objetos (db4o) mostraram que ele insere objetos rapidamente. Em contra partida, ele se saiu pior em todos os outros testes com dados simples, e, para acrescentar, o Banco de Dados Orientados a Objetos no conta com algumas facilidades, ferramentas e legados encontrada no mundo relacional. Este estudo respondeu a questo que deu origem ao projeto, e a resposta que o Banco de Dados Orientados a Objetos ainda no to revolucionrios como foi o paradigma orientado a objetos para as linguagens de programao. O projeto revelou atravs de testes, que o tradicional Banco de Dados Relacional ainda a melhor escolha para manipulao de dados comuns se comparado com o Banco de Dados Orientado a Objetos. Alm disso, tem um grande poder de consulta segundo os testes realizados, o que muito importante para um Banco de Dados, pois os usurios acabam consultando mais os dados do que inserindo, atualizando ou removendo. Outros aspectos ao seu favor so a maturidade, popularidade, ferramentas e facilidades herdadas atravs dos anos, as quais se mostra estveis at os dias atuais.

39

5.1

Contribuies
Resumidamente, as principais contribuies gerais deste estudo so a implementao

de aplicaes integradas com Banco de Dados Relacionais e Orientado a Objetos, servindo como direcionamento para deciso de qual modelo de Banco de Dados deve ser implantado para determinados casos.

5.2

Extenses
Este trabalho pode ser continuado da seguinte forma: Anlise do Modelo Objeto-Relacional; Manipulao Persistente de Objetos Complexos; Comparao entre Banco de Dados Orientado a Objetos e Banco de Dados Objeto-Relacional.

40

Referncias Bibliogrficas

Bem-Vindo ao NetBeans e ao site www.netbeans.org. [ca. 2009]. Disponvel via URL em: http://netbeans.org/index_pt_PT.html. Acesso em: 21 nov. 2009. Benchmarks: Performance advantages to store complex object structures. [ca. 2009] Disponvel via URL em: http://www.db4o.com/about/productinformation/benchmarks/. Acesso em: 21 nov. 2009. Customers and Partners. [ca. 2009]. Disponvel http://www.db4o.com/about/customers/. Acesso em: 20 nov. 2009. via URL em:

DATE, C. J. Introduo a Sistemas de Banco de Dados. 7. Ed. Rio de Janeiro: Editora Campus, 2000. db4o: Banco de objetos de cdigo aberto. [ca. 2009]. Disponvel via URL em: http://www.db4o.com/portugues/db4o%20Product%20Information%20V5.0(Portuguese).pdf. Acesso em: 17 jun. 2009. GUERRA, Glaucio. DB4Objects na terra de gigantes do BD relacional com Java: Parte I. Out. 2007. Disponvel via URL em: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4121. Acesso em: 14 jun. 2009. Informaes em portugus. [ca. 2009]. Disponvel http://www.db4o.com/portugues/. Acesso em: 17 jun. 2009. via URL em:

Maior rapidez com o MySQL. [ca. 2009]. Disponvel via http://br.sun.com/practice/systems/mysql/index.jsp. Acesso em: 17 jun. 2009. MySQL Customers. Nov. [ca. 2009]. Disponvel http://www.mysql.com/customers/. Acesso em: 20 nov. 2009. via

URL

em:

URL

em:

ORESKOVIC, Alexei; FINKLE, Jim. Sun est perdendo US$100 milhes por ms, afirma Oracle. Nov. 2009. Disponvel via URL em: http://www.estadao.com.br/noticias/economia,sun-esta-perdendo-us100-milhoes-por-mesafirma-oracle,439061,0.htm. Acesso em: 21 nov. 2009. PALKOVIC, Rick. Sun e MySQL: O que ele acrescenta aos desenvolvedores. Fev. 2008. Disponvel via URL em: http://br.sun.com/emrkt/innercircle/newsletter/0408/featuretech.html. Acesso em: 17 jun. 2009. PATERSON, Jim; EDLICH, Stefan; HRNING, Henrik; HRNING, Reidar. The Definitive Guide to db4o. New York: Apress, 2006. PolePosition. [ca. 2009]. Disponvel via URL em: http://www.polepos.org/. Acesso em: 20 nov. 2009.

41

ROSENBERG, Dave. INDRA: Sistema de Misso Crtica para controle de trens de alta velocidade. [ca. 2009]. Disponvel via URL em: http://www.db4o.com/portugues/db4o%20Success%20Story%20%20INDRA%20Sistemas(P ortuguese).pdf. Acesso em: 17 jun. 2009. SANTOS, Rafael. Introduo Programao Orientada a Objetos Usando Java. So Paulo: Elsevier; Rio de Janeiro: Editora Campus, 2003. SILBERSCHATZ; Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de Banco de Dados. 3. Ed. So Paulo: Markron Books, 1999. Sun Microsystems oficializa a compra da MySQL no Brasil. Set. 2008. Disponvel via URL em: http://br.sun.com/sunnews/press/2008/20080929b.jsp. Acesso em: 20 nov. 2009. WELLING, Luke; THOMSON, Laura. PHP e MySQL: Desenvolvimento WEB. 3. Ed. Rio de Janeiro: Editora Campus, 2005.

42

Bibliografia Consultada

ESKELSEN, Cassio Rogerio. db4o: Banco de Dados Orientado a Objetos. Dez. 2005. Disponvel via URL em: http://www.bizness.com.br/weblog/post/2008/08/05/db4o-Banco-deDados-Orientado-a-Objetos.aspx. Acesso em: 21 nov. 2009. GARCIA-MOLINA, Hector; ULLMAN, Jeffrey D.; WIDOM, Jennifer. Implementao de Sistemas de Banco de Dados. Rio de Janeiro: Editora Campus, 2001.

43

Apndice A Prottipo para Testes nos Bancos de Dados

Classe Pessoas:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; /** * * @author David */ public class Pessoas { private private private private private private private private private private private private private private private int cod; String nome; String rg; String cpf; String sexo; String data_nasc; String tipo; String endereco; String bairro; String cidade; String uf; String cep; String telefone; String celular; String email;

public void setCod(int cod) { this.cod = cod; } public void setNome(String nome) { this.nome = nome; } public void setRg(String rg) { this.rg = rg; } public void setCpf(String cpf) { this.cpf = cpf; } public void setSexo(String sexo) { this.sexo = sexo; } public void setDataNasc(String data_nasc) { this.data_nasc = data_nasc; }

44

public void setTipo(String tipo) { this.tipo = tipo; } public void setEndereco(String endereco) { this.endereco = endereco; } public void setBairro(String bairro) { this.bairro = bairro; } public void setCidade(String cidade) { this.cidade = cidade; } public void setUf(String uf) { this.uf = uf; } public void setCep(String cep) { this.cep = cep; } public void setTelefone(String telefone) { this.telefone = telefone; } public void setCelular(String celular) { this.celular = celular; } public void setEmail(String email) { this.email = email; } public int getCod() { return (cod); } public String getNome() { return (nome); } public String getRg() { return (rg); } public String getCpf() { return (cpf); } public String getSexo() { return (sexo); } public String getDataNasc() { return (data_nasc); } public String getTipo() {

45

return (tipo); } public String getEndereco() { return (endereco); } public String getBairro() { return (bairro); } public String getCidade() { return (cidade); } public String getUf() { return (uf); } public String getCep() { return (cep); } public String getTelefone() { return (telefone); } public String getCelular() { return (celular); } public String getEmail() { return (email); } }

Classe Alunos:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; /** * * @author David */ public class Alunos extends Pessoas { private private private private private int cod_pessoa; String responsavel; String situacao; float saldo; String data_ultimo_pagamento;

public void setCodPessoa(int cod_pessoa) { this.cod_pessoa = cod_pessoa; } public void setResponsavel(String responsavel) {

46

this.responsavel = responsavel; } public void setSituacao(String situacao) { this.situacao = situacao; } public void setSaldo(float saldo) { this.saldo = saldo; } public void setDataUltimoPagamento(String data_ultimo_pagamento) { this.data_ultimo_pagamento = data_ultimo_pagamento; } public int getCodPessoa() { return (cod_pessoa); } public String getResponsavel() { return (responsavel); } public String getSituacao() { return (situacao); } public float getSaldo() { return (saldo); } public String getDataUltimoPagamento() { return (data_ultimo_pagamento); } }

Classe Funcionarios:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; /** * * @author David */ public class Funcionarios extends Pessoas { private private private private private int cod_pessoa; String ctps; String data_admissao; float salario_hora; int quant_horas_trabalhadas;

public void setCodPessoa(int cod_pessoa) { this.cod_pessoa = cod_pessoa; } public void setCtps(String ctps) {

47

this.ctps = ctps; } public void setDataAdmissao(String data_admissao) { this.data_admissao = data_admissao; } public void setSalarioHora(float salario_hora) { this.salario_hora = salario_hora; } public void setQuantHorasTrabalhadas(int quant_horas_trabalhadas) { this.quant_horas_trabalhadas = quant_horas_trabalhadas; } public int getCodPessoa() { return (cod_pessoa); } public String getCtps() { return (ctps); } public String getDataAdmissao() { return (data_admissao); } public float getSalarioHora() { return (salario_hora); } public int getQuantHorasTrabalhadas() { return (quant_horas_trabalhadas); } }

Classe PessoalAdministrativo:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; /** * * @author David */ public class PessoalAdministrativo extends Funcionarios { private int cod_pessoa; private String cargo; public void setCodPessoa(int cod_pessoa) { this.cod_pessoa = cod_pessoa; } public void setCargo(String cargo) { this.cargo = cargo; }

48

public int getCodPessoa() { return (cod_pessoa); } public String getCargo() { return (cargo); } }

Classe Professores: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; /** * * @author David */ public class PessoalAdministrativo extends Funcionarios { private int cod_pessoa; private String cargo; public void setCodPessoa(int cod_pessoa) { this.cod_pessoa = cod_pessoa; } public void setCargo(String cargo) { this.cargo = cargo; } public int getCodPessoa() { return (cod_pessoa); } public String getCargo() { return (cargo); } }

Classe TesteRelacional: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; import java.sql.*; /** * * @author David */ public class TesteRelacional {

49

int int int int int

TESTA_A TESTA_B TESTA_C TESTA_D TESTA_E

= = = = =

900; 1800; 2700; 3600; 4500;

static long iniciar() { return System.currentTimeMillis(); } static long obterTempo(long inicio) { return System.currentTimeMillis() - inicio; } TesteRelacional() throws SQLException { System.out.println("\n"); System.out.println("Teste de insero em uma tabela"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); Connection conn = null; long inicio; long insert_a, insert_b, insert_c, insert_d, insert_e; long insert_plus_a, insert_plus_b, insert_plus_c, insert_plus_d, insert_plus_e; long update_a, update_b, update_c, update_d, update_e; long update_plus_a, update_plus_b, update_plus_c, update_plus_d, update_plus_e; long query_a, query_b, query_c, query_d, query_e; long query_plus_a, query_plus_b, query_plus_c, query_plus_d, query_plus_e; long delete_a, delete_b, delete_c, delete_d, delete_e; long delete_plus_a, delete_plus_b, delete_plus_c, delete_plus_d, delete_plus_e; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BancoEscolaInforma tica", "root", ""); } catch (InstantiationException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } Statement stm = conn.createStatement(); stm.executeUpdate("ALTER TABLE Pessoas AUTO_INCREMENT = 1"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');");

50
stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); } insert_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Jaqueline Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Funcionario','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Jos Maria Rodrigues Machado','43.136.057-8','302.061.73842','Feminino','1982-09-03','Professor','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); } insert_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); } insert_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');");

51
stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); } insert_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); } insert_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de atualizao em uma tabela"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("UPDATE Pessoas SET NOME='Jennifer Lynn Connelly', RG='22.123.485-2', CPF='131.245.21353',SEXO='Feminino',DATA_NASC='1970-12-12',TIPO='Aluno',ENDERECO='Av. Labirinto das Flores, 56',BAIRRO='Vila Carreira',CIDADE='Extrema',UF='MG',CEP='14696-600',TELEFONE='(14)50556351',CELULAR='(16)8654-8986',EMAIL='jennifer.hulk@brilhante.com.br' WHERE cod=" + i); stm.executeUpdate("UPDATE Pessoas SET NOME='Sabrina da Silva', RG='44.987.654-8', CPF='310.534.400-41',SEXO='Feminino',DATA_NASC='1992-0301',TIPO='Funcionario',ENDERECO='Rua 24, 34',BAIRRO='Recanto Londrina',CIDADE='Itatiba',UF='SP',CEP='13426-230',TELEFONE='(11)40661334',CELULAR='(11)1375-2985',EMAIL='sabrina_bruna@assembleia.com' WHERE cod=" + ++i); stm.executeUpdate("UPDATE Pessoas SET NOME='Rubens Ewald Filho', RG='20.311.215-2', CPF='179.767.29323',SEXO='Masculino',DATA_NASC='1955-11-30',TIPO='Professor',ENDERECO='Rua Cinema Paradiso, 677',BAIRRO='Jd. das Palmeiras',CIDADE='Bragana Paulista',UF='SP',CEP='12906-040',TELEFONE='(11)40323700',CELULAR='(11)7309-1613',EMAIL='cine.rubens@uol.com.br' WHERE cod=" + ++i); } update_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("UPDATE Pessoas SET NOME='Jennifer Lynn Connelly', RG='22.123.485-2', CPF='131.245.21353',SEXO='Feminino',DATA_NASC='1970-12-12',TIPO='Aluno',ENDERECO='Av. Labirinto das Flores, 56',BAIRRO='Vila

52
Carreira',CIDADE='Extrema',UF='MG',CEP='14696-600',TELEFONE='(14)50556351',CELULAR='(16)8654-8986',EMAIL='jennifer.hulk@brilhante.com.br' WHERE cod=" + i); stm.executeUpdate("UPDATE Pessoas SET NOME='Sabrina da Silva', RG='44.987.654-8', CPF='310.534.400-41',SEXO='Feminino',DATA_NASC='1992-0301',TIPO='Funcionario',ENDERECO='Rua 24, 34',BAIRRO='Recanto Londrina',CIDADE='Itatiba',UF='SP',CEP='13426-230',TELEFONE='(11)40661334',CELULAR='(11)1375-2985',EMAIL='sabrina_bruna@assembleia.com' WHERE cod=" + ++i); stm.executeUpdate("UPDATE Pessoas SET NOME='Rubens Ewald Filho', RG='20.311.215-2', CPF='179.767.29323',SEXO='Masculino',DATA_NASC='1955-11-30',TIPO='Professor',ENDERECO='Rua Cinema Paradiso, 677',BAIRRO='Jd. das Palmeiras',CIDADE='Bragana Paulista',UF='SP',CEP='12906-040',TELEFONE='(11)40323700',CELULAR='(11)7309-1613',EMAIL='cine.rubens@uol.com.br' WHERE cod=" + ++i); } update_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("UPDATE Pessoas SET NOME='Jennifer Lynn Connelly', RG='22.123.485-2', CPF='131.245.21353',SEXO='Feminino',DATA_NASC='1970-12-12',TIPO='Aluno',ENDERECO='Av. Labirinto das Flores, 56',BAIRRO='Vila Carreira',CIDADE='Extrema',UF='MG',CEP='14696-600',TELEFONE='(14)50556351',CELULAR='(16)8654-8986',EMAIL='jennifer.hulk@brilhante.com.br' WHERE cod=" + i); stm.executeUpdate("UPDATE Pessoas SET NOME='Sabrina da Silva', RG='44.987.654-8', CPF='310.534.400-41',SEXO='Feminino',DATA_NASC='1992-0301',TIPO='Funcionario',ENDERECO='Rua 24, 34',BAIRRO='Recanto Londrina',CIDADE='Itatiba',UF='SP',CEP='13426-230',TELEFONE='(11)40661334',CELULAR='(11)1375-2985',EMAIL='sabrina_bruna@assembleia.com' WHERE cod=" + ++i); stm.executeUpdate("UPDATE Pessoas SET NOME='Rubens Ewald Filho', RG='20.311.215-2', CPF='179.767.29323',SEXO='Masculino',DATA_NASC='1955-11-30',TIPO='Professor',ENDERECO='Rua Cinema Paradiso, 677',BAIRRO='Jd. das Palmeiras',CIDADE='Bragana Paulista',UF='SP',CEP='12906-040',TELEFONE='(11)40323700',CELULAR='(11)7309-1613',EMAIL='cine.rubens@uol.com.br' WHERE cod=" + ++i); } update_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("UPDATE Pessoas SET NOME='Jennifer Lynn Connelly', RG='22.123.485-2', CPF='131.245.21353',SEXO='Feminino',DATA_NASC='1970-12-12',TIPO='Aluno',ENDERECO='Av. Labirinto das Flores, 56',BAIRRO='Vila Carreira',CIDADE='Extrema',UF='MG',CEP='14696-600',TELEFONE='(14)50556351',CELULAR='(16)8654-8986',EMAIL='jennifer.hulk@brilhante.com.br' WHERE cod=" + i); stm.executeUpdate("UPDATE Pessoas SET NOME='Sabrina da Silva', RG='44.987.654-8', CPF='310.534.400-41',SEXO='Feminino',DATA_NASC='1992-0301',TIPO='Funcionario',ENDERECO='Rua 24, 34',BAIRRO='Recanto Londrina',CIDADE='Itatiba',UF='SP',CEP='13426-230',TELEFONE='(11)40661334',CELULAR='(11)1375-2985',EMAIL='sabrina_bruna@assembleia.com' WHERE cod=" + ++i); stm.executeUpdate("UPDATE Pessoas SET NOME='Rubens Ewald Filho', RG='20.311.215-2', CPF='179.767.29323',SEXO='Masculino',DATA_NASC='1955-11-30',TIPO='Professor',ENDERECO='Rua Cinema Paradiso, 677',BAIRRO='Jd. das Palmeiras',CIDADE='Bragana Paulista',UF='SP',CEP='12906-040',TELEFONE='(11)40323700',CELULAR='(11)7309-1613',EMAIL='cine.rubens@uol.com.br' WHERE cod=" +

53
++i); } update_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("UPDATE Pessoas SET NOME='Jennifer Lynn Connelly', RG='22.123.485-2', CPF='131.245.21353',SEXO='Feminino',DATA_NASC='1970-12-12',TIPO='Aluno',ENDERECO='Av. Labirinto das Flores, 56',BAIRRO='Vila Carreira',CIDADE='Extrema',UF='MG',CEP='14696-600',TELEFONE='(14)50556351',CELULAR='(16)8654-8986',EMAIL='jennifer.hulk@brilhante.com.br' WHERE cod=" + i); stm.executeUpdate("UPDATE Pessoas SET NOME='Sabrina da Silva', RG='44.987.654-8', CPF='310.534.400-41',SEXO='Feminino',DATA_NASC='1992-0301',TIPO='Funcionario',ENDERECO='Rua 24, 34',BAIRRO='Recanto Londrina',CIDADE='Itatiba',UF='SP',CEP='13426-230',TELEFONE='(11)40661334',CELULAR='(11)1375-2985',EMAIL='sabrina_bruna@assembleia.com' WHERE cod=" + ++i); stm.executeUpdate("UPDATE Pessoas SET NOME='Rubens Ewald Filho', RG='20.311.215-2', CPF='179.767.29323',SEXO='Masculino',DATA_NASC='1955-11-30',TIPO='Professor',ENDERECO='Rua Cinema Paradiso, 677',BAIRRO='Jd. das Palmeiras',CIDADE='Bragana Paulista',UF='SP',CEP='12906-040',TELEFONE='(11)40323700',CELULAR='(11)7309-1613',EMAIL='cine.rubens@uol.com.br' WHERE cod=" + ++i); } update_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de consulta em uma tabela"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeQuery("SELECT * FROM Pessoas WHERE cod=" + i); stm.executeQuery("SELECT * FROM Pessoas WHERE cod=" + ++i); stm.executeQuery("SELECT * FROM Pessoas WHERE cod=" + ++i); } query_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= stm.executeQuery("SELECT * stm.executeQuery("SELECT * stm.executeQuery("SELECT * } query_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= stm.executeQuery("SELECT * stm.executeQuery("SELECT * stm.executeQuery("SELECT * } query_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= stm.executeQuery("SELECT * stm.executeQuery("SELECT * stm.executeQuery("SELECT * } TESTA_B; i++) { FROM Pessoas WHERE cod=" + i); FROM Pessoas WHERE cod=" + ++i); FROM Pessoas WHERE cod=" + ++i);

TESTA_C; i++) { FROM Pessoas WHERE cod=" + i); FROM Pessoas WHERE cod=" + ++i); FROM Pessoas WHERE cod=" + ++i);

TESTA_D; i++) { FROM Pessoas WHERE cod=" + i); FROM Pessoas WHERE cod=" + ++i); FROM Pessoas WHERE cod=" + ++i);

54
query_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= stm.executeQuery("SELECT * stm.executeQuery("SELECT * stm.executeQuery("SELECT * } query_e = obterTempo(inicio); TESTA_E; i++) { FROM Pessoas WHERE cod=" + i); FROM Pessoas WHERE cod=" + ++i); FROM Pessoas WHERE cod=" + ++i);

System.out.println("\n"); System.out.println("Teste de remoo em uma tabela"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where } delete_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where } delete_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where } delete_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where } delete_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where stm.executeUpdate("DELETE FROM Pessoas Where } delete_e = obterTempo(inicio);

Cod=" + i); Cod=" + ++i); Cod=" + ++i);

Cod=" + i); Cod=" + ++i); Cod=" + ++i);

Cod=" + i); Cod=" + ++i); Cod=" + ++i);

Cod=" + i); Cod=" + ++i); Cod=" + ++i);

Cod=" + i); Cod=" + ++i); Cod=" + ++i);

System.out.println("---------------------------------------------------"); System.out.println("-------- TESTE DO BANCO DE DADOS RELACIONAL -------"); System.out.println("--------------- com uma unica tabela --------------"); System.out.println("---------------------------------------------------"); System.out.println("insero de " + TESTA_A + " objetos: " + insert_a + " ms"); System.out.println("insero de " + TESTA_B + " objetos: " + insert_b + " ms"); System.out.println("insero de " + TESTA_C + " objetos: " +

55
insert_c + " ms"); System.out.println("insero de " + TESTA_D + " objetos: " + insert_d + " ms"); System.out.println("insero de " + TESTA_E + " objetos: " + insert_e + " ms"); System.out.println("atualizao de " + TESTA_A + " objetos: " + update_a + " ms"); System.out.println("atualizao de " + TESTA_B + " objetos: " + update_b + " ms"); System.out.println("atualizao de " + TESTA_C + " objetos: " + update_c + " ms"); System.out.println("atualizao de " + TESTA_D + " objetos: " + update_d + " ms"); System.out.println("atualizao de " + TESTA_E + " objetos: " + update_e + " ms"); System.out.println("Consulta de " + TESTA_A + " objetos: " + query_a + " ms"); System.out.println("Consulta de " + TESTA_B + " objetos: " + query_b + " ms"); System.out.println("Consulta de " + TESTA_C + " objetos: " + query_c + " ms"); System.out.println("Consulta de " + TESTA_D + " objetos: " + query_d + " ms"); System.out.println("Consulta de " + TESTA_E + " objetos: " + query_e + " ms"); System.out.println("Remoo " + TESTA_A + " objetos: " + delete_a + " ms"); System.out.println("Remoo " + TESTA_B + " objetos: " + delete_b + " ms"); System.out.println("Remoo " + TESTA_C + " objetos: " + delete_c + " ms"); System.out.println("Remoo " + TESTA_D + " objetos: " + delete_d + " ms"); System.out.println("Remoo " + TESTA_E + " objetos: " + delete_e + " ms"); System.out.println("---------------------------------------------------"); System.out.println("---------------------------------------------------"); //COM RELACIONAMENTO System.out.println("\n"); System.out.println("Teste de insero em tabelas relacionadas"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); stm.executeUpdate("ALTER stm.executeUpdate("ALTER stm.executeUpdate("ALTER stm.executeUpdate("ALTER AUTO_INCREMENT = 1"); stm.executeUpdate("ALTER TABLE TABLE TABLE TABLE Pessoas AUTO_INCREMENT = 1"); Alunos AUTO_INCREMENT = 1"); Funcionarios AUTO_INCREMENT = 1"); Pessoal_Administrativo

TABLE Professores AUTO_INCREMENT = 1");

int j = 1; inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("insert into Pessoas values ('" + i +

56
"','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com')"); stm.executeUpdate("insert into alunos VALUES (" + j + ",'" + i + "', 'Jos Maria Rodrigues Machado', 'Ativo', 50, '2009-10-02');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '52586/00215-SP','2008-02-18',220,30,null);"); stm.executeUpdate("insert into Pessoal_Administrativo VALUES (" + j++ + ",'Aux. Administrativo',null);"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '22516/00115-SP','2009-08-05',44,50,null);"); stm.executeUpdate("insert into Professores VALUES (" + j++ + ",'Web Design','Fireworks, Dreamweaver, HTML, Flash',null);"); } insert_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into alunos VALUES (" + j + ",'" + i + "', 'Jos Maria Rodrigues Machado', 'Ativo', 50, '2009-10-02');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '52586/00215-SP','2008-02-18',220,30,null);"); stm.executeUpdate("insert into Pessoal_Administrativo VALUES (" + j++ + ",'Aux. Administrativo',null);"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '22516/00115-SP','2009-08-05',44,50,null);"); stm.executeUpdate("insert into Professores VALUES (" + j++ + ",'Web Design','Fireworks, Dreamweaver, HTML, Flash',null);"); } insert_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So

57
Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into alunos VALUES (" + j + ",'" + i + "', 'Jos Maria Rodrigues Machado', 'Ativo', 50, '2009-10-02');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '52586/00215-SP','2008-02-18',220,30,null);"); stm.executeUpdate("insert into Pessoal_Administrativo VALUES (" + j++ + ",'Aux. Administrativo',null);"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '22516/00115-SP','2009-08-05',44,50,null);"); stm.executeUpdate("insert into Professores VALUES (" + j++ + ",'Web Design','Fireworks, Dreamweaver, HTML, Flash',null);"); } insert_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');"); stm.executeUpdate("insert into alunos VALUES (" + j + ",'" + i + "', 'Jos Maria Rodrigues Machado', 'Ativo', 50, '2009-10-02');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '52586/00215-SP','2008-02-18',220,30,null);"); stm.executeUpdate("insert into Pessoal_Administrativo VALUES (" + j++ + ",'Aux. Administrativo',null);"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '22516/00115-SP','2009-08-05',44,50,null);"); stm.executeUpdate("insert into Professores VALUES (" + j++ + ",'Web Design','Fireworks, Dreamweaver, HTML, Flash',null);"); } insert_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("insert into Pessoas values ('" + i + "','David Rodrigues Machado','43.136.057-8','302.061.73842','Masculino','1982-09-03','Aluno','Rua Joo Franco, 265','Jd. So Cristovo','Bragana Paulista','SP','12900-000','(11)4032-7493','(11)98919560','david@gmail.com');");

58
stm.executeUpdate("insert into alunos VALUES (" + j + ",'" + i + "', 'Jos Maria Rodrigues Machado', 'Ativo', 50, '2009-10-02');"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Roberto Garcia','22.132.221-2','256.216.235-37','Masculino','1975-1225','Funcionario','Av. Jos Gomes da Rocha Leal, 1024','Centro','Atibaia','SP','11700-050','(11)4089-7895','(11)89778799','robert.garcia@kof.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '52586/00215-SP','2008-02-18',220,30,null);"); stm.executeUpdate("insert into Pessoal_Administrativo VALUES (" + j++ + ",'Aux. Administrativo',null);"); stm.executeUpdate("insert into Pessoas values ('" + ++i + "','Camila Aparecida Alves','45.666.332-2','401.567.23422','Feminino','1990-05-20','Professor','Travessa Itlia, 34','Parque Brasil','Extrema','MG','14543-150','(16)5211-3729','(16)78908927','camila_ap@hotmail.com');"); stm.executeUpdate("insert into Funcionarios VALUES (" + j + ",'" + i + "', '22516/00115-SP','2009-08-05',44,50,null);"); stm.executeUpdate("insert into Professores VALUES (" + j++ + ",'Web Design','Fireworks, Dreamweaver, HTML, Flash',null);"); } insert_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de atualizao em tabelas relacionadas"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); j = 1; inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("UPDATE Pessoas p, Alunos a SET p.NOME='Jennifer Lynn Connelly', p.RG='22.123.485-2', p.CPF='131.245.21353', p.SEXO='Feminino', p.DATA_NASC='1970-12-12', p.TIPO='Aluno', p.ENDERECO='Av. Labirinto das Flores, 56', p.BAIRRO='Vila Carreira', p.CIDADE='Extrema', p.UF='MG', p.CEP='14696-600', p.TELEFONE='(14)50556351', p.CELULAR='(14)8654-8986', p.EMAIL='jennifer.hulk@brilhante.com.br', a.RESPONSAVEL='Sarah Jessica Parker', a.SITUACAO='Suspenso', a.SALDO='39', a.DATA_ULTIMO_PAGAMENTO='1970-12-12' WHERE p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Pessoal_Administrativo pa SET p.NOME='Sabrina da Silva', p.RG='44.987.6548', p.CPF='310.534.400-41',p.SEXO='Feminino',p.DATA_NASC='1992-0301',p.TIPO='Funcionario',p.ENDERECO='Rua 24, 34',p.BAIRRO='Recanto Londrina',p.CIDADE='Itatiba',p.UF='SP',p.CEP='13426230',p.TELEFONE='(11)4066-1334',p.CELULAR='(11)13752985',p.EMAIL='sabrina_bruna@assembleia.com', f.CTPS='68630/01609SP',f.DATA_ADMISSAO='2009-09-25', f.QUANT_HORAS_TRABALHADA='30', f.SALARIO_HORA='40', pa.CARGO='Secretario (a)' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Professores pf SET p.NOME='Rubens Ewald Filho', p.RG='20.311.215-2', p.CPF='179.767.293-23', p.SEXO='Masculino', p.DATA_NASC='1955-11-30', p.TIPO='Professor', p.ENDERECO='Rua Cinema Paradiso, 677', p.BAIRRO='Jd. das Palmeiras', p.CIDADE='Bragana Paulista', p.UF='SP', p.CEP='12906-040', p.TELEFONE='(11)4032-3700', p.CELULAR='(11)7309-1613', p.EMAIL='cine.rubens@uol.com.br', f.CTPS='29333/13422SP',f.DATA_ADMISSAO='1999-01-05', f.QUANT_HORAS_TRABALHADA='220', f.SALARIO_HORA='45', pf.AREA='Informtica Bsica', pf.CURSOS_HABILITADOS='Windows, Word, Excel, Access' WHERE p.cod=" + ++i +

59
" and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } update_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("UPDATE Pessoas p, Alunos a SET p.NOME='Jennifer Lynn Connelly', p.RG='22.123.485-2', p.CPF='131.245.21353', p.SEXO='Feminino', p.DATA_NASC='1970-12-12', p.TIPO='Aluno', p.ENDERECO='Av. Labirinto das Flores, 56', p.BAIRRO='Vila Carreira', p.CIDADE='Extrema', p.UF='MG', p.CEP='14696-600', p.TELEFONE='(14)50556351', p.CELULAR='(14)8654-8986', p.EMAIL='jennifer.hulk@brilhante.com.br', a.RESPONSAVEL='Sarah Jessica Parker', a.SITUACAO='Suspenso', a.SALDO='39', a.DATA_ULTIMO_PAGAMENTO='1970-12-12' WHERE p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Pessoal_Administrativo pa SET p.NOME='Sabrina da Silva', p.RG='44.987.6548', p.CPF='310.534.400-41',p.SEXO='Feminino',p.DATA_NASC='1992-0301',p.TIPO='Funcionario',p.ENDERECO='Rua 24, 34',p.BAIRRO='Recanto Londrina',p.CIDADE='Itatiba',p.UF='SP',p.CEP='13426230',p.TELEFONE='(11)4066-1334',p.CELULAR='(11)13752985',p.EMAIL='sabrina_bruna@assembleia.com', f.CTPS='68630/01609SP',f.DATA_ADMISSAO='2009-09-25', f.QUANT_HORAS_TRABALHADA='30', f.SALARIO_HORA='40', pa.CARGO='Secretario (a)' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Professores pf SET p.NOME='Rubens Ewald Filho', p.RG='20.311.215-2', p.CPF='179.767.293-23', p.SEXO='Masculino', p.DATA_NASC='1955-11-30', p.TIPO='Professor', p.ENDERECO='Rua Cinema Paradiso, 677', p.BAIRRO='Jd. das Palmeiras', p.CIDADE='Bragana Paulista', p.UF='SP', p.CEP='12906-040', p.TELEFONE='(11)4032-3700', p.CELULAR='(11)7309-1613', p.EMAIL='cine.rubens@uol.com.br', f.CTPS='29333/13422SP',f.DATA_ADMISSAO='1999-01-05', f.QUANT_HORAS_TRABALHADA='220', f.SALARIO_HORA='45', pf.AREA='Informtica Bsica', pf.CURSOS_HABILITADOS='Windows, Word, Excel, Access' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } update_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("UPDATE Pessoas p, Alunos a SET p.NOME='Jennifer Lynn Connelly', p.RG='22.123.485-2', p.CPF='131.245.21353', p.SEXO='Feminino', p.DATA_NASC='1970-12-12', p.TIPO='Aluno', p.ENDERECO='Av. Labirinto das Flores, 56', p.BAIRRO='Vila Carreira', p.CIDADE='Extrema', p.UF='MG', p.CEP='14696-600', p.TELEFONE='(14)50556351', p.CELULAR='(14)8654-8986', p.EMAIL='jennifer.hulk@brilhante.com.br', a.RESPONSAVEL='Sarah Jessica Parker', a.SITUACAO='Suspenso', a.SALDO='39', a.DATA_ULTIMO_PAGAMENTO='1970-12-12' WHERE p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Pessoal_Administrativo pa SET p.NOME='Sabrina da Silva', p.RG='44.987.6548', p.CPF='310.534.400-41',p.SEXO='Feminino',p.DATA_NASC='1992-0301',p.TIPO='Funcionario',p.ENDERECO='Rua 24, 34',p.BAIRRO='Recanto Londrina',p.CIDADE='Itatiba',p.UF='SP',p.CEP='13426230',p.TELEFONE='(11)4066-1334',p.CELULAR='(11)13752985',p.EMAIL='sabrina_bruna@assembleia.com', f.CTPS='68630/01609SP',f.DATA_ADMISSAO='2009-09-25', f.QUANT_HORAS_TRABALHADA='30', f.SALARIO_HORA='40', pa.CARGO='Secretario (a)' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Professores pf SET p.NOME='Rubens Ewald Filho', p.RG='20.311.215-2', p.CPF='179.767.293-23', p.SEXO='Masculino', p.DATA_NASC='1955-11-30',

60
p.TIPO='Professor', p.ENDERECO='Rua Cinema Paradiso, 677', p.BAIRRO='Jd. das Palmeiras', p.CIDADE='Bragana Paulista', p.UF='SP', p.CEP='12906-040', p.TELEFONE='(11)4032-3700', p.CELULAR='(11)7309-1613', p.EMAIL='cine.rubens@uol.com.br', f.CTPS='29333/13422SP',f.DATA_ADMISSAO='1999-01-05', f.QUANT_HORAS_TRABALHADA='220', f.SALARIO_HORA='45', pf.AREA='Informtica Bsica', pf.CURSOS_HABILITADOS='Windows, Word, Excel, Access' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } update_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("UPDATE Pessoas p, Alunos a SET p.NOME='Jennifer Lynn Connelly', p.RG='22.123.485-2', p.CPF='131.245.21353', p.SEXO='Feminino', p.DATA_NASC='1970-12-12', p.TIPO='Aluno', p.ENDERECO='Av. Labirinto das Flores, 56', p.BAIRRO='Vila Carreira', p.CIDADE='Extrema', p.UF='MG', p.CEP='14696-600', p.TELEFONE='(14)50556351', p.CELULAR='(14)8654-8986', p.EMAIL='jennifer.hulk@brilhante.com.br', a.RESPONSAVEL='Sarah Jessica Parker', a.SITUACAO='Suspenso', a.SALDO='39', a.DATA_ULTIMO_PAGAMENTO='1970-12-12' WHERE p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Pessoal_Administrativo pa SET p.NOME='Sabrina da Silva', p.RG='44.987.6548', p.CPF='310.534.400-41',p.SEXO='Feminino',p.DATA_NASC='1992-0301',p.TIPO='Funcionario',p.ENDERECO='Rua 24, 34',p.BAIRRO='Recanto Londrina',p.CIDADE='Itatiba',p.UF='SP',p.CEP='13426230',p.TELEFONE='(11)4066-1334',p.CELULAR='(11)13752985',p.EMAIL='sabrina_bruna@assembleia.com', f.CTPS='68630/01609SP',f.DATA_ADMISSAO='2009-09-25', f.QUANT_HORAS_TRABALHADA='30', f.SALARIO_HORA='40', pa.CARGO='Secretario (a)' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Professores pf SET p.NOME='Rubens Ewald Filho', p.RG='20.311.215-2', p.CPF='179.767.293-23', p.SEXO='Masculino', p.DATA_NASC='1955-11-30', p.TIPO='Professor', p.ENDERECO='Rua Cinema Paradiso, 677', p.BAIRRO='Jd. das Palmeiras', p.CIDADE='Bragana Paulista', p.UF='SP', p.CEP='12906-040', p.TELEFONE='(11)4032-3700', p.CELULAR='(11)7309-1613', p.EMAIL='cine.rubens@uol.com.br', f.CTPS='29333/13422SP',f.DATA_ADMISSAO='1999-01-05', f.QUANT_HORAS_TRABALHADA='220', f.SALARIO_HORA='45', pf.AREA='Informtica Bsica', pf.CURSOS_HABILITADOS='Windows, Word, Excel, Access' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } update_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("UPDATE Pessoas p, Alunos a SET p.NOME='Jennifer Lynn Connelly', p.RG='22.123.485-2', p.CPF='131.245.21353', p.SEXO='Feminino', p.DATA_NASC='1970-12-12', p.TIPO='Aluno', p.ENDERECO='Av. Labirinto das Flores, 56', p.BAIRRO='Vila Carreira', p.CIDADE='Extrema', p.UF='MG', p.CEP='14696-600', p.TELEFONE='(14)50556351', p.CELULAR='(14)8654-8986', p.EMAIL='jennifer.hulk@brilhante.com.br', a.RESPONSAVEL='Sarah Jessica Parker', a.SITUACAO='Suspenso', a.SALDO='39', a.DATA_ULTIMO_PAGAMENTO='1970-12-12' WHERE p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Pessoal_Administrativo pa SET p.NOME='Sabrina da Silva', p.RG='44.987.6548', p.CPF='310.534.400-41',p.SEXO='Feminino',p.DATA_NASC='1992-0301',p.TIPO='Funcionario',p.ENDERECO='Rua 24, 34',p.BAIRRO='Recanto Londrina',p.CIDADE='Itatiba',p.UF='SP',p.CEP='13426230',p.TELEFONE='(11)4066-1334',p.CELULAR='(11)1375-

61
2985',p.EMAIL='sabrina_bruna@assembleia.com', f.CTPS='68630/01609SP',f.DATA_ADMISSAO='2009-09-25', f.QUANT_HORAS_TRABALHADA='30', f.SALARIO_HORA='40', pa.CARGO='Secretario (a)' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("UPDATE Pessoas p, Funcionarios f, Professores pf SET p.NOME='Rubens Ewald Filho', p.RG='20.311.215-2', p.CPF='179.767.293-23', p.SEXO='Masculino', p.DATA_NASC='1955-11-30', p.TIPO='Professor', p.ENDERECO='Rua Cinema Paradiso, 677', p.BAIRRO='Jd. das Palmeiras', p.CIDADE='Bragana Paulista', p.UF='SP', p.CEP='12906-040', p.TELEFONE='(11)4032-3700', p.CELULAR='(11)7309-1613', p.EMAIL='cine.rubens@uol.com.br', f.CTPS='29333/13422SP',f.DATA_ADMISSAO='1999-01-05', f.QUANT_HORAS_TRABALHADA='220', f.SALARIO_HORA='45', pf.AREA='Informtica Bsica', pf.CURSOS_HABILITADOS='Windows, Word, Excel, Access' WHERE p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } update_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de consulta em tabelas relacionadas"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, a.RESPONSAVEL, a.SITUACAO, a.SALDO, a.DATA_ULTIMO_PAGAMENTO FROM Pessoas p inner join Alunos a on p.cod=a.cod_pessoa WHERE p.cod=" + i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pa.COD_ADM, pa.CARGO FROM Pessoas p inner join Funcionarios f inner join Pessoal_Administrativo pa on p.cod=f.cod_pessoa and f.cod_func=pa.cod_func WHERE p.cod=" + ++i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pf.ID_PROF, pf.AREA, pf.CURSOS_HABILITADOS FROM Pessoas p inner join Funcionarios f inner join Professores pf on p.cod=f.cod_pessoa and f.cod_func=pf.cod_func WHERE p.cod=" + ++i); } query_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, a.RESPONSAVEL, a.SITUACAO, a.SALDO, a.DATA_ULTIMO_PAGAMENTO FROM Pessoas p inner join Alunos a on p.cod=a.cod_pessoa WHERE p.cod=" + i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pa.COD_ADM, pa.CARGO FROM Pessoas p inner join Funcionarios f inner join Pessoal_Administrativo pa on p.cod=f.cod_pessoa and f.cod_func=pa.cod_func WHERE p.cod=" + ++i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP,

62
p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pf.ID_PROF, pf.AREA, pf.CURSOS_HABILITADOS FROM Pessoas p inner join Funcionarios f inner join Professores pf on p.cod=f.cod_pessoa and f.cod_func=pf.cod_func WHERE p.cod=" + ++i); } query_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, a.RESPONSAVEL, a.SITUACAO, a.SALDO, a.DATA_ULTIMO_PAGAMENTO FROM Pessoas p inner join Alunos a on p.cod=a.cod_pessoa WHERE p.cod=" + i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pa.COD_ADM, pa.CARGO FROM Pessoas p inner join Funcionarios f inner join Pessoal_Administrativo pa on p.cod=f.cod_pessoa and f.cod_func=pa.cod_func WHERE p.cod=" + ++i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pf.ID_PROF, pf.AREA, pf.CURSOS_HABILITADOS FROM Pessoas p inner join Funcionarios f inner join Professores pf on p.cod=f.cod_pessoa and f.cod_func=pf.cod_func WHERE p.cod=" + ++i); } query_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, a.RESPONSAVEL, a.SITUACAO, a.SALDO, a.DATA_ULTIMO_PAGAMENTO FROM Pessoas p inner join Alunos a on p.cod=a.cod_pessoa WHERE p.cod=" + i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pa.COD_ADM, pa.CARGO FROM Pessoas p inner join Funcionarios f inner join Pessoal_Administrativo pa on p.cod=f.cod_pessoa and f.cod_func=pa.cod_func WHERE p.cod=" + ++i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pf.ID_PROF, pf.AREA, pf.CURSOS_HABILITADOS FROM Pessoas p inner join Funcionarios f inner join Professores pf on p.cod=f.cod_pessoa and f.cod_func=pf.cod_func WHERE p.cod=" + ++i); } query_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, a.RESPONSAVEL, a.SITUACAO, a.SALDO, a.DATA_ULTIMO_PAGAMENTO FROM Pessoas p inner join Alunos a on p.cod=a.cod_pessoa WHERE p.cod=" + i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO,

63
f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pa.COD_ADM, pa.CARGO FROM Pessoas p inner join Funcionarios f inner join Pessoal_Administrativo pa on p.cod=f.cod_pessoa and f.cod_func=pa.cod_func WHERE p.cod=" + ++i); stm.executeQuery("SELECT p.COD, p.NOME, p.RG, p.CPF, p.SEXO, p.DATA_NASC, p.TIPO, p.ENDERECO, p.BAIRRO, p.CIDADE, p.UF, p.CEP, p.TELEFONE, p.CELULAR, p.EMAIL, f.COD_FUNC, f.CTPS, f.DATA_ADMISSAO, f.QUANT_HORAS_TRABALHADA, f.SALARIO_HORA, pf.ID_PROF, pf.AREA, pf.CURSOS_HABILITADOS FROM Pessoas p inner join Funcionarios f inner join Professores pf on p.cod=f.cod_pessoa and f.cod_func=pf.cod_func WHERE p.cod=" + ++i); } query_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de remoo em tabelas relacionadas"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { stm.executeUpdate("DELETE p FROM Pessoas p, Alunos a Where p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Pessoal_Administrativo pa Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Professores pf Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } delete_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { stm.executeUpdate("DELETE p FROM Pessoas p, Alunos a Where p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Pessoal_Administrativo pa Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Professores pf Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } delete_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { stm.executeUpdate("DELETE p FROM Pessoas p, Alunos a Where p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Pessoal_Administrativo pa Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Professores pf Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } delete_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { stm.executeUpdate("DELETE p FROM Pessoas p, Alunos a Where p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Pessoal_Administrativo pa Where p.cod=" + ++i + " and p.cod=f.cod_pessoa

64
and f.cod_func=pa.cod_func"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Professores pf Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } delete_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { stm.executeUpdate("DELETE p FROM Pessoas p, Alunos a Where p.cod=" + i + " and p.cod=a.cod_pessoa"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Pessoal_Administrativo pa Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pa.cod_func"); stm.executeUpdate("DELETE p FROM Pessoas p, Funcionarios f, Professores pf Where p.cod=" + ++i + " and p.cod=f.cod_pessoa and f.cod_func=pf.cod_func"); } delete_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("---------------------------------------------------"); System.out.println("-------- TESTE DO BANCO DE DADOS RELACIONAL -------"); System.out.println("------------- com tabelas relacionadas ------------"); System.out.println("---------------------------------------------------"); System.out.println("insero de insert_plus_a + " ms"); System.out.println("insero de insert_plus_b + " ms"); System.out.println("insero de insert_plus_c + " ms"); System.out.println("insero de insert_plus_d + " ms"); System.out.println("insero de insert_plus_e + " ms"); System.out.println("atualizao update_plus_a + " ms"); System.out.println("atualizao update_plus_b + " ms"); System.out.println("atualizao update_plus_c + " ms"); System.out.println("atualizao update_plus_d + " ms"); System.out.println("atualizao update_plus_e + " ms"); System.out.println("Consulta de query_plus_a + " ms"); System.out.println("Consulta de query_plus_b + " ms"); System.out.println("Consulta de query_plus_c + " ms"); System.out.println("Consulta de query_plus_d + " ms"); System.out.println("Consulta de query_plus_e + " ms"); System.out.println("Remoo " + delete_plus_a + " ms"); System.out.println("Remoo " + " + TESTA_A + " objetos: " + " + TESTA_B + " objetos: " + " + TESTA_C + " objetos: " + " + TESTA_D + " objetos: " + " + TESTA_E + " objetos: " + de " + TESTA_A + " objetos: " + de " + TESTA_B + " objetos: " + de " + TESTA_C + " objetos: " + de " + TESTA_D + " objetos: " + de " + TESTA_E + " objetos: " + " + TESTA_A + " objetos: " + " + TESTA_B + " objetos: " + " + TESTA_C + " objetos: " + " + TESTA_D + " objetos: " + " + TESTA_E + " objetos: " + TESTA_A + " objetos: " + TESTA_B + " objetos: " +

65
delete_plus_b + " ms"); System.out.println("Remoo " + TESTA_C + " objetos: " + delete_plus_c + " ms"); System.out.println("Remoo " + TESTA_D + " objetos: " + delete_plus_d + " ms"); System.out.println("Remoo " + TESTA_E + " objetos: " + delete_plus_e + " ms"); System.out.println("---------------------------------------------------"); System.out.println("---------------------------------------------------"); System.out.println("\n"); } }

Classe TesteObjetos: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; import import import import com.db4o.Db4o; com.db4o.ObjectContainer; com.db4o.ObjectSet; com.db4o.query.Query;

/** * * @author David */ public class TesteObjetos { int int int int int TESTA_A TESTA_B TESTA_C TESTA_D TESTA_E = = = = = 900; 1800; 2700; 3600; 4500;

static long iniciar() { return System.currentTimeMillis(); } static long obterTempo(long inicio) { return System.currentTimeMillis() - inicio; } public static void inserir(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email) { Pessoas p = new Pessoas(); p.setCod(cod); p.setNome(nome); p.setRg(rg);

66
p.setCpf(cpf); p.setSexo(sexo); p.setDataNasc(data_nasc); p.setTipo(tipo); p.setEndereco(endereco); p.setBairro(bairro); p.setCidade(cidade); p.setUf(uf); p.setCep(cep); p.setTelefone(telefone); p.setCelular(celular); p.setEmail(email); db.set(p); } public static void inserir(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String responsavel, String situacao, float saldo, String data_ultimo_pagamento) { Alunos a = new Alunos(); a.setCod(cod); a.setNome(nome); a.setRg(rg); a.setCpf(cpf); a.setSexo(sexo); a.setDataNasc(data_nasc); a.setTipo(tipo); a.setEndereco(endereco); a.setBairro(bairro); a.setCidade(cidade); a.setUf(uf); a.setCep(cep); a.setTelefone(telefone); a.setCelular(celular); a.setEmail(email); a.setCodPessoa(cod); a.setResponsavel(responsavel); a.setSituacao(situacao); a.setSaldo(saldo); a.setDataUltimoPagamento(data_ultimo_pagamento); db.set(a); } public static void inserir(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String ctps, String data_admissao, int quant_horas_trabalhadas, float salario_hora, String cargo) { PessoalAdministrativo f = new PessoalAdministrativo(); f.setCod(cod); f.setNome(nome); f.setRg(rg); f.setCpf(cpf); f.setSexo(sexo); f.setDataNasc(data_nasc); f.setTipo(tipo); f.setEndereco(endereco); f.setBairro(bairro); f.setCidade(cidade);

67
f.setUf(uf); f.setCep(cep); f.setTelefone(telefone); f.setCelular(celular); f.setEmail(email); f.setCodPessoa(cod_pessoa); f.setCtps(ctps); f.setDataAdmissao(data_admissao); f.setSalarioHora(salario_hora); f.setQuantHorasTrabalhadas(quant_horas_trabalhadas); f.setCargo(cargo); db.set(f); } public static void inserir(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String ctps, String data_admissao, float salario_hora, int quant_horas_trabalhadas, String area, String cursos_habilitados) { Professores pf = new Professores(); pf.setCod(cod); pf.setNome(nome); pf.setRg(rg); pf.setCpf(cpf); pf.setSexo(sexo); pf.setDataNasc(data_nasc); pf.setTipo(tipo); pf.setEndereco(endereco); pf.setBairro(bairro); pf.setCidade(cidade); pf.setUf(uf); pf.setCep(cep); pf.setTelefone(telefone); pf.setCelular(celular); pf.setEmail(email); pf.setCodPessoa(cod_pessoa); pf.setCtps(ctps); pf.setDataAdmissao(data_admissao); pf.setSalarioHora(salario_hora); pf.setQuantHorasTrabalhadas(quant_horas_trabalhadas); pf.setArea(area); pf.setCursosHabilitados(cursos_habilitados); db.set(pf); } public static void alterar(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email) { Pessoas p = new Pessoas(); p.setCod(cod); ObjectSet result = db.get(p); Pessoas achou = (Pessoas) result.next(); achou.setCod(cod);

68
achou.setNome(nome); achou.setRg(rg); achou.setCpf(cpf); achou.setSexo(sexo); achou.setDataNasc(data_nasc); achou.setTipo(tipo); achou.setEndereco(endereco); achou.setBairro(bairro); achou.setCidade(cidade); achou.setUf(uf); achou.setCep(cep); achou.setTelefone(telefone); achou.setCelular(celular); achou.setEmail(email); db.set(achou); } public static void alterar(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String responsavel, String situacao, float saldo, String data_ultimo_pagamento) { Alunos a = new Alunos(); a.setCod(cod); ObjectSet result = db.get(a); Alunos achou = (Alunos) result.next(); achou.setCod(cod); achou.setNome(nome); achou.setRg(rg); achou.setCpf(cpf); achou.setSexo(sexo); achou.setDataNasc(data_nasc); achou.setTipo(tipo); achou.setEndereco(endereco); achou.setBairro(bairro); achou.setCidade(cidade); achou.setUf(uf); achou.setCep(cep); achou.setTelefone(telefone); achou.setCelular(celular); achou.setEmail(email); achou.setCodPessoa(cod_pessoa); achou.setResponsavel(responsavel); achou.setSituacao(situacao); achou.setSaldo(saldo); achou.setDataUltimoPagamento(data_ultimo_pagamento); db.set(achou); } public static void alterar(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String ctps, String data_admissao, int quant_horas_trabalhadas, float salario_hora, String cargo) { PessoalAdministrativo f = new PessoalAdministrativo(); f.setCod(cod); ObjectSet result = db.get(f);

69
PessoalAdministrativo achou = (PessoalAdministrativo) result.next(); achou.setCod(cod); achou.setNome(nome); achou.setRg(rg); achou.setCpf(cpf); achou.setSexo(sexo); achou.setDataNasc(data_nasc); achou.setTipo(tipo); achou.setEndereco(endereco); achou.setBairro(bairro); achou.setCidade(cidade); achou.setUf(uf); achou.setCep(cep); achou.setTelefone(telefone); achou.setCelular(celular); achou.setEmail(email); achou.setCodPessoa(cod_pessoa); achou.setCtps(ctps); achou.setDataAdmissao(data_admissao); achou.setSalarioHora(salario_hora); achou.setQuantHorasTrabalhadas(quant_horas_trabalhadas); achou.setCargo(cargo); db.set(achou); } public static void alterar(int cod, String nome, String rg, String cpf, String sexo, String data_nasc, String tipo, String endereco, String bairro, String cidade, String uf, String cep, String telefone, String celular, String email, int cod_pessoa, String ctps, String data_admissao, float salario_hora, int quant_horas_trabalhadas, String area, String cursos_habilitados) { Professores pf = new Professores(); pf.setCod(cod); ObjectSet result = db.get(pf); Professores achou = (Professores) result.next(); achou.setCod(cod); achou.setNome(nome); achou.setRg(rg); achou.setCpf(cpf); achou.setSexo(sexo); achou.setDataNasc(data_nasc); achou.setTipo(tipo); achou.setEndereco(endereco); achou.setBairro(bairro); achou.setCidade(cidade); achou.setUf(uf); achou.setCep(cep); achou.setTelefone(telefone); achou.setCelular(celular); achou.setEmail(email); achou.setCodPessoa(cod_pessoa); achou.setCtps(ctps); achou.setDataAdmissao(data_admissao); achou.setSalarioHora(salario_hora);

70
achou.setQuantHorasTrabalhadas(quant_horas_trabalhadas); achou.setArea(area); achou.setCursosHabilitados(cursos_habilitados); db.set(achou); } public static void buscar(int cod) { Query query = db.query(); query.constrain(Pessoas.class); query.descend("cod").constrain(cod); Pessoas p = (Pessoas) query.execute().next(); p.getCod(); p.getNome(); p.getRg(); p.getCpf(); p.getSexo(); p.getDataNasc(); p.getTipo(); p.getEndereco(); p.getBairro(); p.getCidade(); p.getUf(); p.getCep(); p.getTelefone(); p.getCelular(); p.getEmail(); } public static void buscarAluno(int cod) { Query query = db.query(); query.constrain(Alunos.class); query.descend("cod").constrain(cod); Alunos achou = (Alunos) query.execute().next(); achou.getCod(); achou.getNome(); achou.getRg(); achou.getCpf(); achou.getSexo(); achou.getDataNasc(); achou.getTipo(); achou.getEndereco(); achou.getBairro(); achou.getCidade(); achou.getUf(); achou.getCep(); achou.getTelefone(); achou.getCelular(); achou.getEmail(); achou.getCodPessoa(); achou.getResponsavel(); achou.getSituacao(); achou.getSaldo(); achou.getDataUltimoPagamento(); } public static void buscarFuncionario(int cod) { Query query = db.query(); query.constrain(PessoalAdministrativo.class);

71
query.descend("cod").constrain(cod); PessoalAdministrativo achou = (PessoalAdministrativo) query.execute().next(); achou.getCod(); achou.getNome(); achou.getRg(); achou.getCpf(); achou.getSexo(); achou.getDataNasc(); achou.getTipo(); achou.getEndereco(); achou.getBairro(); achou.getCidade(); achou.getUf(); achou.getCep(); achou.getTelefone(); achou.getCelular(); achou.getEmail(); achou.getCodPessoa(); achou.getCtps(); achou.getDataAdmissao(); achou.getSalarioHora(); achou.getQuantHorasTrabalhadas(); achou.getCargo(); } public static void buscarProfessor(int cod) { Query query = db.query(); query.constrain(Professores.class); query.descend("cod").constrain(cod); Professores achou = (Professores) query.execute().next(); achou.getCod(); achou.getNome(); achou.getRg(); achou.getCpf(); achou.getSexo(); achou.getDataNasc(); achou.getTipo(); achou.getEndereco(); achou.getBairro(); achou.getCidade(); achou.getUf(); achou.getCep(); achou.getTelefone(); achou.getCelular(); achou.getEmail(); achou.getCodPessoa(); achou.getCtps(); achou.getDataAdmissao(); achou.getSalarioHora(); achou.getQuantHorasTrabalhadas(); achou.getArea(); achou.getCursosHabilitados(); } public static void deletar(int cod) { Pessoas p = new Pessoas();

72
p.setCod(cod); ObjectSet result = db.get(p); Pessoas achou = (Pessoas) result.next(); db.delete(achou); } TesteObjetos() { long inicio; long insert_a, insert_b, insert_c, insert_d, insert_e; long insert_plus_a, insert_plus_b, insert_plus_c, insert_plus_d, insert_plus_e; long update_a, update_b, update_c, update_d, update_e; long update_plus_a, update_plus_b, update_plus_c, update_plus_d, update_plus_e; long query_a, query_b, query_c, query_d, query_e; long query_plus_a, query_plus_b, query_plus_c, query_plus_d, query_plus_e; long delete_a, delete_b, delete_c, delete_d, delete_e; long delete_plus_a, delete_plus_b, delete_plus_c, delete_plus_d, delete_plus_e; System.out.println("\n"); System.out.println("Teste de insero de objetos sem herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1990-05-20", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com"); } insert_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1990-05-20", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com"); } insert_b = obterTempo(inicio);

73

for (int i = TESTA_B + 1; i <= TESTA_C; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1990-05-20", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com"); } insert_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1990-05-20", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com"); } insert_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1990-05-20", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com"); } insert_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de atualizao de objetos sem herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.400-

74
41", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br"); } update_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br"); } update_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br"); } update_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br"); } update_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)5055-

75
6351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br"); } update_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de consulta de objetos sem herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { buscar(i); buscar(++i); buscar(++i); } query_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { buscar(i); buscar(++i); buscar(++i); } query_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { buscar(i); buscar(++i); buscar(++i); } query_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { buscar(i); buscar(++i); buscar(++i); } query_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { buscar(i); buscar(++i); buscar(++i); } query_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de remoo de objetos sem herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { deletar(i);

76
deletar(++i); deletar(++i); } delete_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { deletar(i); deletar(++i); deletar(++i); } delete_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { deletar(i); deletar(++i); deletar(++i); } delete_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { deletar(i); deletar(++i); deletar(++i); } delete_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { deletar(i); deletar(++i); deletar(++i); } delete_e = obterTempo(inicio); System.out.println("---------------------------------------------------"); System.out.println("--- TESTE DO BANCO DE DADOS ORIENTADO A OBJETOS ----"); System.out.println("--------------- sem herana ---------------"); System.out.println("---------------------------------------------------"); System.out.println("insero de insert_a + " ms"); System.out.println("insero de insert_b + " ms"); System.out.println("insero de insert_c + " ms"); System.out.println("insero de insert_d + " ms"); System.out.println("insero de insert_e + " ms"); System.out.println("atualizao update_a + " ms"); System.out.println("atualizao update_b + " ms"); System.out.println("atualizao update_c + " ms"); System.out.println("atualizao update_d + " ms"); System.out.println("atualizao update_e + " ms"); " + TESTA_A + " objetos: " + " + TESTA_B + " objetos: " + " + TESTA_C + " objetos: " + " + TESTA_D + " objetos: " + " + TESTA_E + " objetos: " + de " + TESTA_A + " objetos: " + de " + TESTA_B + " objetos: " + de " + TESTA_C + " objetos: " + de " + TESTA_D + " objetos: " + de " + TESTA_E + " objetos: " +

System.out.println("Consulta de " + TESTA_A + " objetos: " +

77
query_a + " ms"); System.out.println("Consulta de " + TESTA_B + " objetos: " + query_b + " ms"); System.out.println("Consulta de " + TESTA_C + " objetos: " + query_c + " ms"); System.out.println("Consulta de " + TESTA_D + " objetos: " + query_d + " ms"); System.out.println("Consulta de " + TESTA_E + " objetos: " + query_e + " ms"); System.out.println("Remoo de " + TESTA_A + " objetos: " + delete_a + " ms"); System.out.println("Remoo de " + TESTA_B + " objetos: " + delete_b + " ms"); System.out.println("Remoo de " + TESTA_C + " objetos: " + delete_c + " ms"); System.out.println("Remoo de " + TESTA_D + " objetos: " + delete_d + " ms"); System.out.println("Remoo de " + TESTA_E + " objetos: " + delete_e + " ms"); System.out.println("---------------------------------------------------"); System.out.println("---------------------------------------------------"); //COM HERANA System.out.println("\n"); System.out.println("Teste de insero de objetos com herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com", i, "Jos Maria Rodrigues Machado", "Ativo", 50, "2009-10-02"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com", i, "52586/00215-SP", "2008-0218", 220, 30, "Aux. Administrativo"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1993-04-16", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com", i, "22516/00115-SP", "2009-0805", 40, 50, "Web Design", "Fireworks, Dreamweaver, HTML, Flash"); } insert_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com", i, "Jos Maria Rodrigues Machado", "Ativo", 50, "2009-10-02"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha

78
Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com", i, "52586/00215-SP", "2008-0218", 220, 30, "Aux. Administrativo"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1993-04-16", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com", i, "22516/00115-SP", "2009-0805", 40, 50, "Web Design", "Fireworks, Dreamweaver, HTML, Flash"); } insert_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com", i, "Jos Maria Rodrigues Machado", "Ativo", 50, "2009-10-02"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com", i, "52586/00215-SP", "2008-0218", 220, 30, "Aux. Administrativo"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1993-04-16", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com", i, "22516/00115-SP", "2009-0805", 40, 50, "Web Design", "Fireworks, Dreamweaver, HTML, Flash"); } insert_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com", i, "Jos Maria Rodrigues Machado", "Ativo", 50, "2009-10-02"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com", i, "52586/00215-SP", "2008-0218", 220, 30, "Aux. Administrativo"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2", "401.567.234-22", "Feminino", "1993-04-16", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com", i, "22516/00115-SP", "2009-0805", 40, 50, "Web Design", "Fireworks, Dreamweaver, HTML, Flash"); } insert_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { inserir(i, "David Rodrigues Machado", "43.136.057-8", "302.061.738-42", "Masculino", "1982-09-03", "Aluno", "Rua Joo Franco, 265", "Jd. So Cristovo", "Bragana Paulista", "SP", "12900-000", "(11)4032-7493", "(11)9891-9560", "david@gmail.com", i, "Jos Maria Rodrigues Machado", "Ativo", 50, "2009-10-02"); inserir(++i, "Roberto Garcia", "22.132.221-2", "256.216.23537", "Masculino", "1975-12-25", "Funcionario", "Av. Jos Gomes da Rocha Leal, 1024", "Centro", "Atibaia", "SP", "11700-050", "(11)4089-7895", "(11)8977-8799", "robert.garcia@kof.com", i, "52586/00215-SP", "2008-0218", 220, 30, "Aux. Administrativo"); inserir(++i, "Camila Aparecida Alves", "45.666.332-2",

79
"401.567.234-22", "Feminino", "1993-04-16", "Professor", "Travessa Itlia, 34", "Parque Brasil", "Extrema", "MG", "14543-150", "(16)5211-3729", "(16)7890-8927", "camila_ap@hotmail.com", i, "22516/00115-SP", "2009-0805", 40, 50, "Web Design", "Fireworks, Dreamweaver, HTML, Flash"); } insert_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de atualizao de objetos com herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br", i, "Sarah Jessica Parker", "Suspenso", 39, "1970-12-12"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com", i, "68630/01609-SP", "2009-09-25", 30, 40, "Secretario (a)"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br", i, "29333/13422-SP", "1999-01-05", 220, 45, "Informtica Bsica", "Windows, Word, Excel, Access"); } update_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br", i, "Sarah Jessica Parker", "Suspenso", 39, "1970-12-12"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com", i, "68630/01609-SP", "2009-09-25", 30, 40, "Secretario (a)"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br", i, "29333/13422-SP", "1999-01-05", 220, 45, "Informtica Bsica", "Windows, Word, Excel, Access"); } update_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br", i, "Sarah Jessica Parker", "Suspenso", 39, "1970-12-12"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.400-

80
41", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com", i, "68630/01609-SP", "2009-09-25", 30, 40, "Secretario (a)"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br", i, "29333/13422-SP", "1999-01-05", 220, 45, "Informtica Bsica", "Windows, Word, Excel, Access"); } update_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br", i, "Sarah Jessica Parker", "Suspenso", 39, "1970-12-12"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com", i, "68630/01609-SP", "2009-09-25", 30, 40, "Secretario (a)"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br", i, "29333/13422-SP", "1999-01-05", 220, 45, "Informtica Bsica", "Windows, Word, Excel, Access"); } update_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { alterar(i, "Jennifer Lynn Connelly", "22.123.485-2", "131.245.213-53", "Feminino", "1970-12-12", "Aluno", "Av. Labirinto das Flores, 56", "Vila Carreira", "Extrema", "MG", "14696-600", "(14)50556351", "(16)8654-8986", "jennifer.hulk@brilhante.com.br", i, "Sarah Jessica Parker", "Suspenso", 39, "1970-12-12"); alterar(++i, "Sabrina da Silva", "44.987.654-8", "310.534.40041", "Feminino", "1992-03-01", "Funcionario", "Rua 24, 34", "Recanto Londrina", "Itatiba", "SP", "13426-230", "(11)4066-1334", "(11)1375-2985", "sabrina_bruna@assembleia.com", i, "68630/01609-SP", "2009-09-25", 30, 40, "Secretario (a)"); alterar(++i, "Rubens Ewald Filho", "20.311.215-2", "179.767.293-23", "Masculino", "1955-11-30", "Professor", "Rua Cinema Paradiso, 677", "Jd. das Palmeiras", "Bragana Paulista", "SP", "12906040", "(11)4032-3700", "(11)7309-1613", "cine.rubens@uol.com.br", i, "29333/13422-SP", "1999-01-05", 220, 45, "Informtica Bsica", "Windows, Word, Excel, Access"); } update_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de consulta de objetos com herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) {

81
buscarAluno(i); buscarFuncionario(++i); buscarProfessor(++i); } query_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { buscarAluno(i); buscarFuncionario(++i); buscarProfessor(++i); } query_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { buscarAluno(i); buscarFuncionario(++i); buscarProfessor(++i); } query_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { buscarAluno(i); buscarFuncionario(++i); buscarProfessor(++i); } query_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { buscarAluno(i); buscarFuncionario(++i); buscarProfessor(++i); } query_plus_e = obterTempo(inicio); System.out.println("\n"); System.out.println("Teste de remoo de objetos com herana"); System.out.println("\n"); System.out.println("TESTANDO, AGUARDE... "); System.out.println("\n"); inicio = iniciar(); for (int i = 1; i <= TESTA_A; i++) { deletar(i); deletar(++i); deletar(++i); } delete_plus_a = obterTempo(inicio); for (int i = TESTA_A + 1; i <= TESTA_B; i++) { deletar(i); deletar(++i); deletar(++i); } delete_plus_b = obterTempo(inicio); for (int i = TESTA_B + 1; i <= TESTA_C; i++) { deletar(i); deletar(++i); deletar(++i); } delete_plus_c = obterTempo(inicio); for (int i = TESTA_C + 1; i <= TESTA_D; i++) { deletar(i);

82
deletar(++i); deletar(++i); } delete_plus_d = obterTempo(inicio); for (int i = TESTA_D + 1; i <= TESTA_E; i++) { deletar(i); deletar(++i); deletar(++i); } delete_plus_e = obterTempo(inicio); System.out.println("---------------------------------------------------"); System.out.println("--- TESTE DO BANCO DE DADOS ORIENTADO A OBJETOS ----"); System.out.println("-------------------- com herana ------------------"); System.out.println("---------------------------------------------------"); System.out.println("insero de " + TESTA_A + " objetos: " + insert_plus_a + " ms"); System.out.println("insero de " + TESTA_B + " objetos: " + insert_plus_b + " ms"); System.out.println("insero de " + TESTA_C + " objetos: " + insert_plus_c + " ms"); System.out.println("insero de " + TESTA_D + " objetos: " + insert_plus_d + " ms"); System.out.println("insero de " + TESTA_E + " objetos: " + insert_plus_e + " ms"); System.out.println("atualizao de " + TESTA_A + " objetos: " + update_plus_a + " ms"); System.out.println("atualizao de " + TESTA_B + " objetos: " + update_plus_b + " ms"); System.out.println("atualizao de " + TESTA_C + " objetos: " + update_plus_c + " ms"); System.out.println("atualizao de " + TESTA_D + " objetos: " + update_plus_d + " ms"); System.out.println("atualizao de " + TESTA_E + " objetos: " + update_plus_e + " ms"); System.out.println("Consulta de " + TESTA_A + " objetos: " + query_plus_a + " ms"); System.out.println("Consulta de " + TESTA_B + " objetos: " + query_plus_b + " ms"); System.out.println("Consulta de " + TESTA_C + " objetos: " + query_plus_c + " ms"); System.out.println("Consulta de " + TESTA_D + " objetos: " + query_plus_d + " ms"); System.out.println("Consulta de " + TESTA_E + " objetos: " + query_plus_e + " ms"); System.out.println("Remoo de " + TESTA_A + " objetos: " + delete_plus_a + " ms"); System.out.println("Remoo de " + TESTA_B + " objetos: " + delete_plus_b + " ms"); System.out.println("Remoo de " + TESTA_C + " objetos: " + delete_plus_c + " ms"); System.out.println("Remoo de " + TESTA_D + " objetos: " + delete_plus_d + " ms"); System.out.println("Remoo de " + TESTA_E + " objetos: " + delete_plus_e + " ms"); System.out.println("-----------------------------------------------

83
-----"); System.out.println("---------------------------------------------------"); System.out.println("\n"); System.out.println("FIM DO TESTE"); db.close(); } public static ObjectContainer db = Db4o.openFile("BancoEscolaInformatica.yap"); }

Classe Main: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testeescolainformatica; import java.sql.SQLException; /** * * @author David */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws SQLException { TesteRelacional r = new TesteRelacional(); TesteObjetos o = new TesteObjetos(); } }

84

Apndice B Resultados dos Testes nos Bancos de Dados

Resultado dos testes no Banco de Dados Relacional com uma nica tabela: 1 teste com uma nica tabela 1800 2700 3600 59529 87703 115268 54428 81915 108576 811 1139 1451 56612 84006 111992 2 teste com uma nica tabela 1800 2700 3600 56737 83756 111524 57081 85785 113631 858 1186 1513 57907 86939 116235 3 teste com uma nica tabela 1800 2700 3600 57081 84864 111961 53398 79840 107234 827 1170 1498 55458 82618 109933

insero atualizao consulta remoo

900 30326 27347 421 27815

4500 143130 136328 1810 139573

insero atualizao consulta remoo

900 28127 28143 468 28470

4500 139136 141773 1841 145298

insero atualizao consulta remoo

900 29453 27050 437 27113

4500 138357 134487 1841 137498

Mdia do teste com uma nica tabela 900 1800 2700 3600 insero 29302 57782,33333 85441 112917,6667 atualizao 27513,33333 54969 82513,33333 109813,6667 consulta 442 832 1165 1487,333333 remoo 27799,33333 56659 84521 112720 Desvio Padro do teste com uma nica tabela 900 1800 2700 3600 insero 1107,249294 1522,405115 2035,779703 2047,14248 atualizao 565,1657574 1900,166572 3017,326355 3373,316815 consulta 23,89560629 23,89560629 23,89560629 32,34707612 remoo 678,6356411 1225,176314 2206,055076 3213,454372 Nmero de registros

4500 140207,6667 137529,3333 1830,666667 140789,6667

4500 2560,612101 3788,64756 17,89785834 4039,82776

Tempo em milisegundos

85

Resultado dos testes no Banco de Dados Relacional atravs de procedures SQL com uma nica tabela: 1 teste de procedures SQL com uma unica tabela 900 1800 2700 3600 4500 insero 28190 55723 85160 109699 139558 atualizao 28392 57907 86612 114286 138325 consulta 141 234 296 421 1201 remoo 29468 55817 84084 111072 137249 2 teste de procedures SQL com uma unica tabela 900 1800 2700 3600 4500 insero 27066 54787 84037 111711 140119 atualizao 27581 54709 85067 110869 137077 consulta 124 203 312 406 578 remoo 27799 55412 85426 111212 139495 3 teste de procedures SQL com uma unica tabela 900 1800 2700 3600 4500 insero 28033 57939 82992 108529 127655 atualizao 28033 56550 81447 102133 132054 consulta 125 218 312 484 593 remoo 28314 56815 84427 102570 130151 Mdia das procedures SQL com uma unica tabela 900 1800 2700 3600 4500 insero 27763 56149,67 84063 109979,7 135777,3 atualizao 28002 56388,67 84375,33 109096 135818,7 consulta 130 218,3333 306,6667 437 790,6667 remoo 28527 56014,67 84645,67 108284,7 135631,7 Desvio Padro das procedures SQL com uma unica tabela 900 1800 2700 3600 4500 insero 608,7027 1618,737 1084,234 1609,46 7039,738 atualizao 406,3877 1605,093 2651,058 6267,495 3319,475 consulta 9,539392 15,50269 9,237604 41,3884 355,4382 remoo 854,6444 722,0847 697,2104 4949,542 4877,439 Nmero de registros
Tempo em milisegundos

86

Resultado dos testes no Banco de Dados Orientado a Objetos sem herana: 1 teste com objetos sem herana 1800 2700 3600 281 343 421 158262 238446 318818 158746 238165 319894 121149 158324 179041 2 teste com objetos sem herana 1800 2700 3600 265 343 406 160852 242253 323622 159947 240021 319971 120370 184595 160946 3 teste com objetos sem herana 1800 2700 3600 265 343 405 164314 248679 333356 167107 250755 334324 120182 160103 187806

insero atualizao consulta remoo

900 171 78188 79373 70637

4500 483 399298 401123 184376

insero atualizao consulta remoo

900 172 79794 79997 70466

4500 468 405070 399921 190227

insero atualizao consulta remoo

900 171 80137 83616 69389

4500 468 418173 417940 195247

Mdia dos objetos sem herana 900 1800 2700 3600 4500 insero 171,3333333 270,3333333 343 410,6666667 473 atualizao 79373 161142,6667 243126 325265,3333 407513,6667 consulta 80995,33333 161933,3333 242980,3333 324729,6667 406328 remoo 70164 120567 167674 175931 189950 Desvio padro dos objetos sem herana 900 1800 2700 3600 insero 0,577350269 9,237604307 0 8,96288644 atualizao 1040,471528 3036,452096 5172,056554 7407,008123 consulta 2290,909063 4520,588494 6796,70989 8309,025595 remoo 676,5936742 512,717271 14680,9874 13697,4076 Nmero de registros

4500 8,660254038 9671,868296 10074,22995 5440,791027

Tempo em milisegundos

87

Resultado dos testes no Banco de Dados Relacional com tabelas relacionadas: 1 teste com tabelas relacionadas 1800 2700 3600 148465 220007 293951 56288 86264 116287 2197 3293 4404 56438 84619 113269 2 teste com tabelas relacionadas 1800 2700 3600 148106 223741 300646 60973 92360 123529 1217 1841 2449 58188 86424 114442 3 teste com tabelas relacionadas 1800 2700 3600 147077 218621 291564 57517 86954 116251 1264 1903 2574 57299 85129 113537

insero atualizao consulta remoo

900 75941 28464 1119 28433

4500 368980 145800 5516 140625

insero atualizao consulta remoo

900 74552 30452 608 29983

4500 377165 154760 3073 142600

insero atualizao consulta remoo

900 75145 28782 624 28485

4500 366264 145033 3214 141679

Mdia do teste com tabelas relacionadas 900 1800 2700 3600 4500 insero 75212,66667 147882,6667 220789,6667 295387 370803 atualizao 29232,66667 58259,33333 88526 118689 148531 consulta 783,6666667 1559,333333 2345,666667 3142,333333 3934,333333 remoo 28967 57308,33333 85390,66667 113749,3333 141634,6667 Desvio Padro do teste com tabelas relacionadas 900 1800 2700 3600 insero 696,9679572 720,4473148 2648,211724 4708,211231 atualizao 1067,877022 2429,115134 3338,216889 4191,601603 consulta 290,5173546 552,7353194 821,000203 1094,421461 remoo 880,2658689 875,0373325 930,5150903 614,6513917 Nmero de registros

4500 5674,54377 5408,086815 1371,576587 988,2460895

Tempo em milisegundos

88

Resultado dos testes no Banco de Dados Relacional atravs de procedures SQL com tabelas relacionadas: 1 teste de procedures SQL com tabelas relacionadas 900 1800 2700 3600 4500 insero 72166 142178 217807 291766 374307 atualizao 27035 54834 84599 112726 142381 consulta 203 531 811 983 1388 remoo 27425 57408 85925 113365 136578 2 teste de procedures SQL com tabelas relacionadas 900 1800 2700 3600 4500 insero 73102 145892 216107 285792 368238 atualizao 29437 58469 86845 115674 141492 consulta 296 515 795 905 1372 remoo 27939 55723 84443 110791 141212 3 teste de procedures SQL com tabelas relacionadas 900 1800 2700 3600 4500 insero 69248 140650 204781 267930 385632 atualizao 26957 54304 81525 102882 135299 consulta 249 468 671 983 1747 remoo 26645 56503 81042 101603 130884 Mdia das procedures SQL com tabelas relacionadas 900 1800 2700 3600 4500 insero 71505,33 142906,7 212898,3 281829,3 376059 atualizao 27809,67 55869 84323 110427,3 139724 consulta 249,3333 504,6667 759 957 1502,333 remoo 27336,33 56544,67 83803,33 108586,3 136224,7 Desvio Padro das procedures SQL com tabelas relacionadas 900 1800 2700 3600 4500 insero 2010,147 2695,896 7081,019 12402,25 8828,36 atualizao 1409,852 2267,206 2670,718 6698,635 3857,855 consulta 46,5009 32,7465 76,62898 45,03332 212,0385 remoo 651,5407 843,2724 2503,558 6183,169 5173,058

Nmero de registros

Tempo em milisegundos

89

Resultado dos testes no Banco de Dados Orientado a Objetos com herana: 1 teste dos objetos com herana 1800 2700 3600 219 312 453 87781 131368 175095 88498 141867 195043 170396 214919 241907 2 teste dos objetos com herana 1800 2700 3600 218 312 421 86127 128902 171834 86533 129760 172972 136437 181615 208977 3 teste dos objetos com herana 1800 2700 3600 225 325 424 90715 135315 180243 89529 134301 178979 154315 201365 227432

insero atualizao consulta remoo

900 109 43680 43493 99380

4500 546 218946 248235 249457

insero atualizao consulta remoo

900 125 42822 43227 75067

4500 515 215046 216138 216559

insero atualizao consulta remoo

900 123 45334 44804 91447

4500 528 225280 223642 234764

Mdia dos objetos com herana 900 1800 2700 3600 insero 119 220,6666667 316,3333333 432,6666667 atualizao 43945,33333 88207,66667 131861,6667 175724 consulta 43841,33333 88186,66667 135309,3333 182331,3333 remoo 88631,33333 153716 199299,6667 226105,3333 Desvio Padro dos objetos com herana 900 1800 2700 3600 insero 8,717797887 3,785938897 7,505553499 17,67295486 atualizao 1276,846637 2323,568233 3234,875938 4239,640433 consulta 844,2359465 1522,071067 6116,160097 11410,99752 remoo 12398,64817 16987,42244 16747,78509 16505,03736 Nmero de registros

4500 529,6666667 219757,3333 229338,3333 233593,3333

4500 15,56705924 5165,015521 16789,59536 16480,21378

Tempo em milisegundos