Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
COMPARAO ENTRE BANCO DE DADOS RELACIONAIS E BANCO DE DADOS ORIENTADO A OBJETOS: CARACTERSTICAS E IMPLEMENTAO DE UM PROTTIPO
ii
COMPARAO ENTRE BANCO DE DADOS RELACIONAIS E BANCO DE DADOS ORIENTADO A OBJETOS: CARACTERSTICAS E IMPLEMENTAO DE UM PROTTIPO
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
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
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
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
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
PROJETO DO PROTTIPO ....................................................................................... 18 3.1 Modelagem do Banco de Dados ................................................................................. 18 Modelagem Relacional para o Prottipo ............................................................ 19
3.1.1
viii
Modelagem das Classes de Objetos para o Prottipo ......................................... 20 Modelagem das Tabelas para o Modelo Relacional ........................................... 21
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
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.
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.
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
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).
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
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.
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),
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).
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
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).
11
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
FUNCIONRIOS PROFESSORES
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; };
13
14
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.
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).
17
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.
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
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
20
21
3.2
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.
23
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
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
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
Sada do Programa:
Cdigo: 20 Nome: Jaqueline
26
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
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)
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
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
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
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).
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
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
= = = = =
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);
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
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: " +
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
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
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
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
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
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
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
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
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
Tempo em milisegundos