Trabalho de Conclusão de Curso

Propaganda
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
FLUMINENSE
CAMPUS CAMPOS CENTRO
BACHARELADO EM SISTEMAS DE INFORMAÇÃO
DENAILDO JUNIO BORGES DE SOUZA
FELIPE CABRAL VIANA
COMPARANDO A EFICÁCIA DE BANCO DE DADOS ORIENTADO A OBJETOS
COM BANCO DE DADOS RELACIONAL ATRAVÉS DE PESQUISA
BIBLIOGRÁFICA E IMPLEMENTAÇÃO DE PROTÓTIPO
CAMPOS DOS GOYTACAZES
2016
DENAILDO JUNIO BORGES DE SOUZA
FELIPE CABRAL VIANA
COMPARANDO A EFICÁCIA DE BANCO DE DADOS ORIENTADO A OBJETOS
COM BANCO DE DADOS RELACIONAL ATRAVÉS DE PESQUISA
BIBLIOGRÁFICA E IMPLEMENTAÇÃO DE PROTÓTIPO
Monografia apresentada ao Instituto Federal de Educação,
Ciência e Tecnologia Fluminense Campus Campos Centro
como requisito parcial para a conclusão do Curso de
Bacharelado em Sistemas de Informação.
Orientadora: Profª. Aline P. V. de Vasconcelos (D. SC)
Co-orientadora: Profª. Aline Gomes Cordeiro (M. SC)
Campos dos Goytacazes - RJ
Junho/2016
Dados Internacionais de Catalogação na Publicação (CIP)
Biblioteca. Setor de Processos Técnicos (IFF)
S729c Souza, Denaildo Junio Borges de
Comparando a eficácia de Banco de Dados Orientado a Objetos com
Banco de Dados Relacional através de pesquisa bibliográfica e
implementação de protótipo / Denaildo Junio Borges de Souza,
Felipe Cabral Viana – 2016.
50 f.: il.
Orientadora: Aline P. V. de Vasconcelos.
Monografia (Bacharelado em Sistemas de Informação). Instituto
Federal de Educação, Ciência e Tecnologia Fluminense. Campus
Campos Centro. Campos dos Goytacazes (RJ), 2016.
Referências: p. 48-50.
1.
2.
1. Banco de dados relacionais. I. Vasconcelos, Aline P. V. de, orient.
II. Título.
CDD – 005.756
DENAILDO JUNIO BORGES DE SOUZA
FELIPE CABRAL VIANA
COMPARANDO A EFICÁCIA DE BANCO DE DADOS ORIENTADO A OBJETOS
COM BANCO DE DADOS RELACIONAL ATRAVÉS DE PESQUISA
BIBLIOGRÁFICA E IMPLEMENTAÇÃO DE PROTÓTIPO
Monografia apresentada ao Instituto Federal de
Educação, Ciência e Tecnologia Fluminense,
Campus Campos-Centro, como requisito parcial
para conclusão do Bacharelado em Sistemas de
Informação.
Aprovada em _______ de Junho de 2016.
Banca Avaliadora:
......................................................................................................................................................
Profª Aline Pires Vieira de Vasconcelos
Doutora em Engenharia de Sistemas e Computação/COPPE-UFRJ
Instituto Federal de Educação, Ciência e Tecnologia Fluminense
......................................................................................................................................................
Profª Cibelle Degel Barbosa
Doutora em Produção Vegetal/UENF
Instituto Federal de Educação, Ciência e Tecnologia Fluminense
......................................................................................................................................................
Profª Verônica Aguiar da Silva
Doutora em Biociências e Biotecnologia/UENF
Instituto Federal de Educação, Ciência e Tecnologia Fluminense
AGRADECIMENTOS
Agradecemos primeiramente a Deus, por ter nos dado força, foco e fé para chegar
aonde chegamos, a nossos familiares, por terem sido a base e o porto seguro nos momentos
de desanimo e cansaço no decorrer dessa jornada, a todos nossos professores e amigos, que
construíram conosco esse caminho que queremos e temos o desejo de continuar trilhando em
quanto continuarmos com brilho nos olhos. Agradecemos especialmente a Professora e
Orientadora Aline Vasconcelos e a Professora e Co-orientadora Aline Cordeiro por nos
ajudar a crescer ainda mais como profissionais, como pessoas e por estar hoje realizando a
entrega desse projeto para a conclusão de nosso sonho.
RESUMO
Os Bancos de Dados Relacionais existem desde a década de 70, sendo predominantes
no mercado de software, até o momento atual, em função da maturidade e confiabilidade que
as empresas adquiriram nestes. Por outro lado, o paradigma de Orientação a Objetos (OO) se
estabelece, desde a década de 90, como o paradigma dominante nas atividades de análise,
projeto e implementação de sistemas de software, permitindo se trabalhar com abstrações
mais próximas do mundo real, bem como com o mesmo conceito em todo o ciclo de vida do
software. Porém, apesar de permitir uma padronização nas etapas do ciclo de vida, a OO não
emplacou ainda na área de Banco de Dados, exigindo um mapeamento entre estes paradigmas
para se concluir com êxito um projeto de desenvolvimento de software. Dessa forma, este
trabalho tem como objetivo estabelecer uma comparação entre o Banco de Dados relacional e
o Banco de Dados Orientado a Objetos, a fim de se verificar vantagens e desvantagens no seu
uso, de forma a motivar ou não a migração para um Banco Orientado a Objetos. A fim de se
atingir estes objetivos de comparação, foram desenvolvidos protótipos para implementação
em Sistemas Gerenciadores de Bancos de Dados nos dois paradigmas, a partir de um mesmo
domínio de problema. Este modelo foi testado segundo critérios de comparação
adequadamente definidos, com o objetivo de se obter indícios da eficiência e eficácia dos
diferentes bancos.
Palavras chave: Paradigma, Banco de Dados Relacional, Banco de Dados Orientado a
Objetos, Maturidade, Confiabilidade, Eficiência, Eficácia.
ABSTRACT
Relational databases have been around since the 70s and they are predominant in the
software market, until the present time, because of the maturity and reliability that companies
have acquired in these. Furthermore, the Object Oriented Paradigm (OO) is established, since
the 90s, as the predominant paradigm in software system analysis, design and
implementation, allowing the work with abstractions closest to the real world, as well as the
use of the same concept in the entire software life cycle. However, despite of the
standardization that the OO promotes in the distinct stages of the software life cycle, this
paradigm is not yet established in the database area, requiring a mapping between these
paradigms to successfully complete a software development project. Thus, this study aims to
establish a comparison between the relational database and the object database, in order to
verify advantages and disadvantages in their use, motivating or not the migration to a Object
Oriented Database Management System (DBMS). In order to achieve these comparative
purposes, prototypes will be developed for implementation in DBMS in both paradigms, from
the same domain problem. This model will be tested according to properly defined
comparison criteria, in order to obtain evidences of the efficiency and effectiveness of the
different systems.
Keywords: Paradigm, Relational Database, Object Oriented Database, Maturity,
Reliability, Efficiency, Effectiveness.
LISTA DE ILUSTRAÇÕES
Figura 1 – Exemplo de Herança Simples
17
Figura 2 – Exemplo de Herança Múltipla.
17
Figura 3 – Exemplo de Polimorfismo.
18
Figura 4 – Exemplo de Chave Primária e Chave Estrangeira.
20
Figura 5 – Exemplo de Modelo de Classe e Modelo de Banco de dados com chaves. 21
Figura 6 – Exemplo de Mapeamento.
26
Figura 7 – Diagrama de Classe
32
Figura 8 – Mapeamento do Diagrama de Classe
33
LISTA DE TABELAS
Tabela 1 – Resultado dos Testes de Inserção Realizados no SGBDOO
41
Tabela 2 – Resultado dos Testes de Inserção Realizados no Banco Relacional
42
Tabela 3 – Resultado dos Testes de Atualização Realizados no SGBDOO
42
Tabela 4 – Resultado dos Testes de Atualização Realizados no Banco Relacional
42
Tabela 5 – Resultado dos Testes de Consulta Realizados no SGBDOO
43
Tabela 6 – Resultado dos Testes de Consulta Realizados no Banco Relacional
43
Tabela 7 – Resultado dos Testes de Exclusão Realizados no SGBDOO
43
Tabela 8 – Resultado dos Testes de Exclusão Realizados no Banco Relacional
43
Tabela 9 – Resultado Final dos Testes Realizados Anteriormente nos Bancos
44
LISTA DE ABREVIATURAS E SIGLAS
OO – Orientação a Objetos.
IBM – International Business Machines.
SGBD – Sistema de Gestão de Base de Dados.
CPF – Cadastro de Pessoa Física.
RG – Registro Geral.
CNPJ – Cadastro Nacional de Pessoa Jurídica.
SQL – Structured Query Language.
OID – Object Identifier.
DER – Diagrama Entidade-Relacionamento.
SUMÁRIO
1 – INTRODUÇÃO
12
1.1 – MOTIVAÇÃO E JUSTIFICATIVA
12
1.2 - OBJETIVOS
13
1.3 – METODOLOGIA DO TRABALHO
14
1.4 – ORGANIZAÇÃO DO TRABALHO
14
2 – REFERENCIAL TEÓRICO
2.1 – O PARADIGMA DE ORIENTAÇÃO A OBJETOS
15
15
2.1.1 – OBJETO
15
2.1.2 - ENCAPSULAMENTO
15
2.1.3 - HERANÇA
16
2.1.4 - POLIMORFISMO
18
2.2 – O PARADIGMA RELACIONAL
18
2.2.1 – O MODELO RELACIONAL
19
2.2.2 – RESTRIÇÕES DE INTEGRIDADE SOBRE RELAÇÕES
21
2.2.3 – NORMALIZAÇÃO EM BANCOS RELACIONAIS
22
2.2.4 – SQL (STRUCTURED QUERY LANGUAGE)
22
2.2.5 – PROJETO LÓGICO DE BANCOS DE DADOS
23
2.3 – QUEBRA DE PARADIGMAS: O.O. X RELACIONAL
23
2.3.1 – MAPEAMENTO ENTRE MODELOS: O.O. - RELACIONAL
24
2.3.2 – BANCO DE DADOS ORIENTADO A OBJETOS
27
2.3.3 – COMPARANDO BANCO DE DADOS O.O. COM BANCO DE
28
DADOS RELACIONAL
2.4 – CRITÉRIOS DE AVALIAÇÃO
3 – COMPARAÇÃO DOS BANCOS DE DADOS NA PRÁTICA POR MEIO
29
31
DE MODELO ACADÊMICO
3.1 – ESTUDO DE CASO
31
3.2 – TECNOLOGIAS APLICADAS
34
3.2.1 – O BANCO DE DADOS RELACIONAL MySQL
34
3.2.2 – DB4OBJECT
35
3.2.3 – EXEMPLO PRÁTICO: CONFIGURANDO OS SGBD’S PARA
35
USO
3.2.4 – IMPLEMENTANDO O ACESSO AOS BANCOS
37
3.2.5 – TESTANDO OS BANCOS
41
3.3 – CONCLUSÕES OBTIDAS
4 - CONCLUSÃO
45
46
4.1 - CONTRIBUIÇÕES
46
4.2 - LIMITAÇÕES
47
4.3 – TRABALHOS FUTUROS
48
5 – REFERÊNCIAS
48
12
1 - INTRODUÇÃO
1.1 - MOTIVAÇÃO E JUSTIFICATIVA
Atualmente é sabido que o desenvolvimento Orientado a Objetos (OO) é uma
realidade no universo do desenvolvimento de software. Extremamente popular, graças à sua
flexibilidade e suporte à reutilização, ele é explorado pela maioria, das empresas que
trabalham projetando software. O termo “Orientado a Objetos” foi criado por Alan Kay
(1966), mas seus conceitos foram realmente utilizados por Jogan Dahl (1967) e Kristen
Nygaard (1967) na linguagem Simula 67, o que demonstra que este paradigma de software
não é recente, porém, apenas a partir da década de 90 é que este vem sendo aceito nas
grandes empresas de desenvolvimento de software. Como grandes fatores que contribuíram
para o crescimento do paradigma de Orientação a Objetos nos últimos anos, estão a
proximidade dos conceitos deste paradigma a abstrações do próprio mundo real e a utilização
do mesmo conceito, a classe, do início ao fim do ciclo de vida do software. Além disso, por
meio da herança este paradigma propicia o reuso e maior eficácia no desenvolvimento de
software.
O conceito de Orientação a Objetos foi criado para tentar aproximar o mundo real do
virtual, daí a ideia de Objeto, pois, o mundo é composto de Objetos. Diante da propagação do
conceito da OO no processo de análise, projeto e implementação de software, um fator chama
a atenção: grande parte das empresas de desenvolvimento de software opta na área de
persistência por utilizar o modelo de Banco de Dados Relacional. Criado com o intuito de
facilitar e agilizar o acesso a dados, os bancos de dados no início eram basicamente uma
digitalização das fichas de cadastros de empresas sem nenhuma associação entre elas, por
exemplo, produto não era associado à fábrica que o produziu, ambos eram controlados por
um software sem ligação entre eles. Este conceito mudou em 1970 quando o pesquisador
Edgar Frank (Frank, 1970) da IBM lançou o conceito de Banco de Dados Relacional em seu
famoso artigo “A Relational Model of Data for Large Shared Data Banks” revolucionando
por completo a área de persistência de dados. Além da sua popularidade devido ao seu largo
uso, o modelo relacional evoluiu e hoje se tornou um sinônimo de segurança e confiabilidade
para o armazenamento de grandes volumes de dados nas empresas.
Com base nesse cenário, algumas questões são levantadas: Será que o modelo de
Orientação a Objetos é tão revolucionário na área de persistência de dados quanto é na área
do Desenvolvimento? Será que o Banco de Dados Orientado a Objetos é tão seguro e estável
13
quanto o Banco de Dados Relacional, ou seja, tem maturidade? Será que o uso da OO na área
de persistência ainda não emplacou pela confiabilidade que as empresas depositam no Banco
Relacional? Além disso, qual modelo é mais eficiente e eficaz para se utilizar no seu projeto?
A fim de apontar alguns caminhos que possam ajudar a solucionar essas e outras dúvidas,
propõe-se a pesquisa, aqui apresentada, que motiva o desenvolvimento desse trabalho de
conclusão de curso.
1.2 - OBJETIVOS
Diante do exposto, este trabalho tem como objetivo principal a análise das diferenças
de Banco de Dados Relacional para Banco de Dados Orientado a Objetos, demonstrando as
suas vantagens e desvantagens através de critérios de comparação devidamente estabelecidos,
como:
·
Facilidade de implementação do banco de dados, considerando-se o ciclo de vida do
software onde o paradigma OO é adotado nas etapas de análise, projeto e
implementação;
·
Tempo de desenvolvimento de rotinas de acesso ao banco;
·
Eficiência no acesso;
·
Maturidade;
·
Estabilidade;
·
Confiabilidade.
Para se atingir tais objetivos, deverá ser realizada ampla pesquisa bibliográfica, bem como a
implementação de um protótipo, no domínio escolar, desenvolvido para este fim, e levandose em conta a sua implementação em um Gerenciador de Banco de Dados dentro de cada
paradigma.
Os Sistemas Gerenciadores de Bancos de Dados (SGBD’s) utilizados serão o
Db4Objects (Db4O) e o MySQL, utilizaremos os mesmos por serem os mais robustos e mais
utilizados como Banco OO e Relacional, a linguagem a ser utilizada é o Java, devido a sua
facilidade de comunicação com diversos tipos de banco de dados. Os protótipos serão
desenvolvidos tanto para que se comunique com o Banco de Dados Relacional quanto o
Banco de Dados Orientado a Objetos.
14
1.3 - METODOLOGIA DO TRABALHO
Este trabalho se propõe a fazer uma comparação entre o Banco de Dados Relacional e
o Banco de Dados Orientado a Objetos (OO), verificando, assim qual dos dois pode ser mais
eficaz em determinados cenários de uso e avaliando a quebra de paradigma. Para se atingir tal
objetivo, as seguintes etapas de trabalho são identificadas:
-
Pesquisa bibliográfica sobre ambos os paradigmas e sobre trabalhos que já
vislumbraram tal comparação;
-
Modelagem e implementação de protótipo no domínio acadêmico para testes,
abordando os principais conceitos e diferenças entre os dois paradigmas;
-
Análise dos resultados obtidos com a implementação do protótipo em um SGBD
relacional, a saber o MySQL, e em um SGBD OO, a saber, o Db4Object, a partir de
programação do modelo na linguagem Java;
-
Comparação dos resultados obtidos e escrita da monografia.
Por meio do protótipo e das pesquisas, será possível avaliar determinados fatores que
diferenciam os bancos, bem como analisar a quebra de paradigma presente na implementação
e nos testes. A pesquisa bibliográfica deve investigar a maturidade dos SGBDs nos diferentes
paradigmas quanto à capacidade de armazenamento e gerenciamento de grande volume de
dados e de diferentes tipos de dados, como texto, número, mídia, áudio etc.
1.4 - ORGANIZAÇÃO DO TRABALHO
Partindo desta Introdução, esse trabalho está organizado da seguinte forma: o Capítulo
2 trata do Referencial Teórico estudado para embasar este trabalho, envolvendo ambos os
paradigmas, suas diferenças e trabalhos relacionados; o Capítulo 3 aborda a implementação
dos protótipos e os testes realizados nos SGBDs em ambos os paradigmas, levantando
algumas conclusões obtidas com a sua comparação; e, o Capítulo 4 apresenta as Conclusões,
destacando as contribuições, limitações e trabalhos futuros, que visam permitir a
continuidade da presente pesquisa.
15
2 - REFERENCIAL TEÓRICO
Este capítulo traz um breve referencial teórico acerca de conceitos básicos e trabalhos
relacionados sobre os Paradigmas de Orientação a Objetos, Relacional e sobre os Sistemas
Gerenciadores de Bancos de Dados nestes paradigmas.
2.1 - O PARADIGMA DE ORIENTAÇÃO A OBJETOS
O modelo orientado a objetos visualiza os sistemas como coleção de objetos,
permitindo assim a melhora da reusabilidade e multiplicidade dos produtos de software. Tem
como objetivo simular situações do mundo real, transferindo a ideia de objeto que temos para
dentro da computação. Dessa forma, os sistemas não vão ser um conjunto estruturado e sim
um conjunto de objetos que interagem e colaboram entre si. Um outro fator importante da OO
é que o conceito de objeto se mantém por todo o ciclo de vida do software, diferente do que
ocorria nos paradigmas anteriores (FARINELLI, 2007).
2.1.1 - OBJETO
A condição é utilizada para definir um componente do mundo real, uma entidade que
é digna de representação ao ambiente que será simulado, sendo assim, são instâncias de uma
determinada classe componente de um sistema, determinando a informação que o objeto vai
conter e como vai ser feita a manipulação do mesmo. É uma representação da realidade capaz
de conter um estado, o qual deve ser encapsulado, e conceder um série de operações para
recuperar ou alterar este estado.
Como exemplo de objetos, pode-se citar objetos físicos, como um sabonete, uma
vassoura, ou abstratos, como disciplinas, cursos, ou ainda seres reais, como um cliente, um
vendedor etc. O objeto é acessado por eventos que disparam suas ações ou métodos, como
varrer, cadastrar disciplina, o cliente realizar uma compra etc (FARINELLI, 2007). Cada
objeto possui um identificador próprio.
2.1.2 – ENCAPSULAMENTO
Utilizando-se deste princípio, é possível obter transparência no objeto, o qual não
deixa seus dados “a mostra”, sendo esses somente acessíveis por meio de suas operações.
16
Uma classe de objetos, como Pessoa, possui atributos (valores de dados) e métodos
(operações), sendo os atributos privados e os métodos públicos. No exemplo da Pessoa,
poderia se dizer que esta possui como atributos nome, endereço, telefone e cpf, que estão
“escondidos” - encapsulados - e métodos, como, obterNome, atualizarNome, obterCPF,
atualizarCPF, que seriam visíveis a todos para acesso encapsulado aos dados. Assim, o
próprio objeto controla o acesso aos seus dados ou estado.
A forma de utilizar esse mecanismo é diferente da forma tradicional. Na orientação a
objetos esses dados encapsulados estão dentro de uma única entidade e a única forma de
saber o que está dentro ou alterar os atributos é utilizando seus métodos.
A possibilidade de se realizar alterações internas no objeto, agregando novos métodos
sem alterar outros componentes do sistema é mais uma grande vantagem do encapsulamento
(FARINELLI, 2007).
2.1.3 - HERANÇA
Representa uma forma de relacionamento no qual uma classe consegue reutilizar os
atributos, relacionamentos e métodos de outra, para assim, ampliar ou especificar a ela
mesma. Por exemplo, retomando a classe Pessoa, esta poderia especializar-se em Aluno e
Professor, considerando-se um ambiente acadêmico, onde Aluno e Professor herdariam todas
as propriedades de Pessoa, acrescentando as suas particularidades como estudar e lecionar.
Analisando pelo lado prático, a utilização da herança na orientação a objetos nos ajuda no
aproveitamento de modelo e do código, trazendo a vantagem de redução de esforço e custo
no desenvolvimento. Além do reaproveitamento do código, a herança tem também como
vantagem a consistência, pois uma vez que um comportamento é modificado em uma classe,
todas as demais classes descendentes desta também estarão usando o método atualizado sem
precisar reprogramar o código.
Dentro dessa questão temos dois tipos de herança, a herança simples e a herança
múltipla. A mesma é considerada simples quando uma classe herda as características de
apenas uma superclasse ou classe pai como exemplifica a Figura 1.
A mesma é considerada múltipla quando a classe herda características de duas ou
mais superclasses, assumindo diferentes papeis na execução do sistema, conforme
visualizamos na Figura 2 (FARINELLI, 2007). Sendo que nada impede que a classe
FuncionárioCliente tenha seus próprios atributos e métodos, além de herdar das classes
acima.
17
Figura 1 - Exemplo de Herança Simples.
Figura 2 - Exemplo de Herança Múltipla.
18
2.1.4 - POLIMORFISMO
Consiste na técnica de uma variável fazer referência em tempo de execução a objetos
de diversas classes, porém sendo todos “filhos” de uma mesma hierarquia de superclasses.
Assim, polimorfismo, um conceito oriundo da herança, é o nome dado à possibilidade do
método se comportar de uma maneira diferente dependendo do tipo do objeto que receberá a
sua chamada, sendo este referente a uma subclasse em uma mesma hierarquia de classes. O
polimorfismo também pode ser atingido quando objetos implementam uma mesma interface
conforme visualizamos na Figura 3 (FARINELLI, 2007), nessa interface é definida as
opções, dependendo da escolha do usuário, qual método de classe será ativado.
Figura 3 - Exemplo de Polimorfismo.
2.2 - O PARADIGMA RELACIONAL
O Banco de Dados Relacional é o mais usado, por mais que existam novos caminhos
a serem seguidos como a orientação a objetos, ele continua sendo o modelo dominante no
mercado de banco de dados. Embora a OO predomine como paradigma nas fases de Análise,
Projeto e Programação, o modelo relacional ainda impera na área de Banco de Dados, o que
gera uma necessidade de mapeamento entre paradigmas no desenvolvimento completo de um
software. Esse modelo foi proposto por Edgar Codd (70), como uma forma inovadora de
19
representação de dados. Ele demonstrou que a visão relacional dos dados permite a sua
apresentação em uma forma natura, não precisando assim de estruturas para a sua
reprodução. Baseia-se no conceito de álgebra relacional, possuindo base matemática, o que
permitiu que esse modelo superasse os demais modelos existentes naquela época, tendo como
maiores vantagens, a representação simples dos dados, com baixa complexidade, permitindo
que diversas e amplas formas de consultas possam ser facilmente expressas (MACÁRIO et
al. , 2007).
2.2.1 - O MODELO RELACIONAL
A predominante construção para reprodução dos dados é a relação, essa que consiste
de um esquema e de várias instâncias. É representada em forma de tabela, onde os dados são
dispostos na forma de colunas e registros, que são informações acerca de uma pessoa ou
objeto, são as linhas.
O esquema descreve o nome da relação (tabela) e o nome e o domínio de cada coluna,
chamada também de atributo. O domínio do atributo é referido no esquema por seu tipo e tem
importância crucial para restringir os valores que este atributo pode vir a adquirir. Instância
de uma relação é o aglomerado de linhas, nominadas tuplas, diferentes, que assim vão vir a
compor a relação em determinado momento no tempo, sendo variável, uma vez que o número
de tuplas e o conteúdo desses atributos podem sofrer variações. Elas devem acompanhar
sempre o seu respectivo esquema, apreciando o número de atributos, bem como os domínios.
Essa é uma das restrições dos bancos relacionais, chamada restrição de domínio e é tida como
muito importante, podemos visualizar um exemplo na Figura 4 abaixo as chaves primárias:
uidaluno, uidcurso, uidmatriz, uidresultadoaluno, uiddisciplina, uidturma, uidturmaprofessor
e uidprofessor. Como exemplo de chave estrangeira, temos como exemplo o uidturma e o uid
curso que estão na classe Aluno para fazer a referência entre as classes.
20
Figura 4 - Exemplo de Chave Primária e Chave Estrangeira.
21
2.2.2 - RESTRIÇÕES DE INTEGRIDADE SOBRE RELAÇÕES
A integridade do modelo relacional é composta por duas regras gerais, a saber a
integridade da entidade e a integridade referencial. Essas regras são genéricas, no sentido que
podem ser utilizadas em todos os bancos de dados que se proponham a seguir o modelo
relacional. É normal que um determinado banco de dados tenha outras regras, próprias dele,
além das demais regras originais. As regras citadas referem-se, respectivamente, às chaves
primárias e às chaves estrangeiras. A restrição de entidade diz respeito ao fato de que cada
relação ou tabela deve ter um ou mais atributos cujos valores identifiquem as suas tuplas
unicamente. É o conceito de chave primária. No caso da Pessoa, o mais indicado é utilizar um
oid, fazendo referência assim a um identificador único, retirando assim a referência a dados
que podem ser modificados com o tempo, proporcionando assim, uma melhor utilização do
banco. A restrição de integridade referencial estabelece que duas ou mais tabelas se
relacionam pelo valor da chave primária, que se torna chave estrangeira na outra. Por
exemplo, para dizermos que Pessoa trabalha em uma Empresa, o oid da empresa, a sua chave
primária, deveria migrar para a Pessoa, como mais um atributo ou coluna de suas linhas
(DATE, 2003). Confira abaixo um exemplo na Figura 5.
Figura 5 - Exemplo de Modelo de Classe e Modelo de Banco de dados com chaves.
22
2.2.3. – NORMALIZAÇÃO EM BANCOS RELACIONAIS
Podemos utilizar um dado grupo de dependências funcionais para projetar um banco
de dados relacional, evitando a maior das propriedades não desejadas. Quando projetamos,
pode tornar-se desnecessário decompor uma relação em diversas relações menores.
Utilizando a dependência funcional, podemos definir algumas formas normais que
representam “bons” projetos de bancos de dados.
Existem esquemas de relação que não estão normalizados o bastante, no sentido que
eles ainda possuem problemas de repetição de informação. Para realizar o tratamento desse
problema, temos a necessidade de definir uma nova forma de restrição, intitulada de
dependência multivalorada. Como foi feito com as dependências funcionais, utilizaremos as
dependências funcionais multivaloradas para definir uma forma normal para os esquemas das
relações.
A propriedade sem perda na junção é uma das diversas propriedades para o projeto de
um banco de dados, essa propriedade é essencial, sem ela, há perda de informação. Quando
restringimos o conjunto das relações válidas entre as que satisfazem um conjunto de
dependências funcionais e multivaloradas, temos a possibilidade de usar essas dependências
para mostrar que certas decomposições são decomposições sem perda na junção.
Por causa da importância desse conceito, é útil conseguir restringir um conjunto de relações
válidas sobre um esquema para aquelas relações para as quais uma dada decomposição sem
perda na junção, isto será definido como uma restrição, chamada dependência de junção
(SILBERSCHATZ et al., 1999).
2.2.4 - SQL (Structured Query Language)
É a linguagem comercial mais utilizada no mercado para a manipulação e consulta
aos Sistemas Gerenciadores de Bancos de Dados (SGBDs). Ela utiliza uma mistura de
construtores em álgebra e cálculo relacional em suas consultas (SILBERSCHATZ et al.,
1999).
Um banco de dados relacional compõe-se de um conjunto de relações, conforme já
mencionado, onde cada uma dessas relações é designada por um único nome. A linguagem
SQL possui comandos para a manipulação do banco de dados, como: Insert (para a inclusão
de dados); Delete (para a exclusão de dados); Update (para a atualização de dados). Possui
23
comandos também para a definição do esquema, como: Create Table (para a criação de
Tabelas), Alter Table (para a atualização de Tabelas) e Drop Table (para a exclusão de
Tabelas). Porém, o comando para consulta a dados Select é o mais poderoso desta linguagem
e o que motivou a criação da mesma. A estrutura básica de uma expressão SQL - Select
consiste em três cláusulas: Select, From e Where, onde:
● Select – na sua etapa final, corresponde à operação de projeção da álgebra relacional,
é utilizada para relacionar os atributos desejados no resultado de uma consulta.
● From - corresponde à operação de produto cartesiano da álgebra relacional, ela
associa as relações que serão pesquisadas durante a evolução de uma determinada
expressão.
● Where - corresponde à seleção do predicado da álgebra relacional, consiste em um
predicado compreendendo atributos da relação que aparece na cláusula from,
estabelecendo a condição de consulta.
O SQL constrói um produto cartesiano das relações indicadas na cláusula from,
executa uma seleção de interseção em álgebra relacional utilizando o predicado da cláusula
where e indica o resultado sobre os atributos da cláusula select. Na prática, o SQL pode
converter a expressão em uma forma equivalente, que pode ser executada de forma mais
eficaz (SILBERSCHATZ et al. 1999).
2.2.5 - PROJETO LÓGICO DE BANCO DE DADOS
O Modelo Entidade Relacionamento, assim como ocorre com o modelo de classes na
OO, é conveniente para demonstrar um projeto de banco de dados de alto nível, com o
esquema da base dados (SILBERSCHATZ et al., 1999).
2.3 - QUEBRA DE PARADIGMAS: OO x RELACIONAL
Conforme explanado na Introdução, existe uma quebra de paradigmas entre o
desenvolvimento OO e a persistência de dados em bancos relacionais, o que obriga os
desenvolvedores a lançarem mão de técnicas para mapeamento entre os dois mundos no
desenvolvimento de software. Este mapeamento já foi mais “duro”, exigindo grande esforço,
antes do surgimento de frameworks:
24
● Hibernate - Para a linguagem de programação JAVA (http://www.hibernate.org/).
● Django
-
Framework
de
desenvolvimento
web
escrito
em
Python
(https://www.djangoproject.com/).
● OJB - Para a linguagem de programação JAVA (https://db.apache.org/ojb/).
● Doctrine - Para a linguagem de programação PHP (http://www.doctrine-project.org/).
● Active
Record
-
Para
a
linguagem
de
programação
Ruby
on
Rails
(http://guides.rubyonrails.org/active_record_basics.html).
A quebra entre esses paradigmas se expressa em diferenças entre os modelos, como:
-
O paradigma OO utiliza como entidade uma classe de Objetos, que armazena
atributos e define ações/comportamentos/métodos, ao passo que os Bancos
Relacionais apenas armazenam dados em suas Tabelas; com isso, a modularidade e o
Reuso são facilitados na OO;
-
O modelo relacional trabalha com o conceito de chave primária ou atributo de valor
único que identifica o registro (pessoa ou coisa), ao passo que na OO os objetos são
automaticamente identificáveis pelo seu endereço de memória ou de armazenamento
(objetos têm identidade própria);
-
O modelo relacional trabalha com o conceito de chave estrangeira para relacionar os
registros, ao passo que na OO objetos referenciam uns aos outros, ou seja, um objeto
acessa o outro por meio de uma referência que permite o acesso aos seus métodos
públicos, que dão acesso aos seus atributos (princípio do encapsulamento);
-
Objetos colaboram, ou seja, chamam métodos uns dos outros para realizar uma tarefa;
-
A OO trabalha com o conceito de herança e reutilização de atributos e métodos,
enquanto o modelo relacional não tem este conceito, o qual pode ser “simulado” com
o uso da estrutura de generalização/especialização;
-
Na OO pode haver relacionamento N x N, ou seja, um objeto pode referenciar uma
coleção de outros, enquanto no modelo relacional cada atributo deve ter valor único
(primeira forma normal).
2.3.1 - MAPEAMENTO ENTRE MODELOS: ORIENTADO A OBJETOS RELACIONAL
Segundo Uchôa (2004), em virtude da incapacidade de se guardar e recuperar os
objetos de forma direta em um banco de dados relacional, tornasse necessária a utilização de
um mapeamento para favorecer esse processo. Em primeiro momento no mapeamento, cada
25
Classe deve ser diretamente mapeada para uma Tabela. Além disso, deve-se ter em mente a
identidade dos objetos, pois dessa forma diferenciaremos os objetos uns dos outros. Assim, o
primeiro passo para este caso é acrescentar nas Tabelas, originadas a partir das Classes, um
atributo identificador para os objetos ou Object Identifier (OID). Seguindo no mapeamento,
atributos simples são mapeados para campos na tabela que vai ser criada. Já os atributos que
representam coleções de dados ou objetos devem ser decompostos, pois o modelo relacional
não permite atributos multivalorados, os quais devem ser mapeados para estruturas de dados
ou novas tabelas. Nesta nova tabela, a chave primária vai ser formada pela chave primária da
tabela que representa a classe do atributo multivalorado com o acréscimo de um OID para a
tabela que vai representar o próprio atributo multivalorado (chave surrogate).
Quanto ao mapeamento da herança, este apresenta três possibilidades (HOPPEN,
DILL, 2005; Uchôa, 2004): as subclasses são mapeadas para tabelas e copiam os dados da
superclasse, o que acaba por gerar redundância de dados nas tabelas criadas; a segunda
possibilidade é a criação de uma única tabela para toda a hierarquia, o que requer o acréscimo
de um campo com intuito de identificar a qual subclasse o registro vem a pertencer, tendo a
vantagem de criação de poucas tabelas e de se evitar o uso de junções, mas acaba por deixar
campos em branco dependendo do tipo de registro a ser inserido (ex: Pessoa pode ser um
Funcionário ou Empregador); por fim, a opção que mais naturalmente se aproxima do
paradigma OO é o mapeamento de cada classe da hierarquia para uma tabela do banco de
dados, o que, por outro lado, gera o problema de necessidade de inserção em mais de uma
tabela para inserir o mesmo registro, que ficará particionado entre a tabela que representa a
superclasse e aquela que representa a subclasse (ex: dados de um Funcionário que é uma
Pessoa). Esta última solução permite acrescentar tabelas para cada nova subclasse gerada,
realizando-se a junção por meio da chave estrangeira que representa a subclasse e que
apontará para a chave primária da tabela que representa a superclasse. Na realidade, não
existe solução ideal, devendo sempre ser avaliado o custo x benefício de cada solução
adotada.
Em relação ao mapeamento de métodos, que não podem ser implementados no banco
relacional, há a necessidade de se implementar gatilhos e procedimentos armazenados para
manipular e consultar o banco ou a necessidade de implementação dos procedimentos no
código do programa e no banco de dados, reduzindo o poder de modularidade proporcionado
pelo paradigma OO.
Referente a associação entre as classes, temos a associação 1 para 1, associação 0..1
para 1 a mais tranquila de ser implementada, a mesma pode ser mapeada para uma tabela ou
26
para duas tabelas diferentes, onde em cada uma das formas possuem vantagens e
desvantagens. Mapeando para uma única tabela, temos que incluir os campos da classe
associada na classe associadora, incluindo um prefixo para realizar o seu reconhecimento, de
contra partida ao se mapear para duas tabelas diferentes podemos incluir um atributo em uma
das tabelas, assim esse será a chave estrangeira, direcionando assim para a outra tabela.
Dando continuidade as associações, temos a associação 1 para muitos, nessa associação
devemos adicionar um novo atributo na classe cardinalidade muitos, que será a chave
estrangeira para a tabela com cardinalidade 1 e por último, temos a associação muitos para
muitos, que cria uma nova tabela, que receberá dois campos, esses que serão chaves
estrangeiras de ambas duas tabelas da relação, e unidos vão fazer parte da chave primária
desta nova tabela. Confira um exemplo de mapeamento na Figura 6.
Figura 6 - Exemplo de Mapeamento.
27
2.3.2 – BANCO DE DADOS ORIENTADO A OBJETOS
O Banco de Dados Orientado a Objetos tem como característica principal armazenar
as informações na forma de objetos e esses podem ser trabalhados através dos métodos
definidos pela classe na qual está esse determinado objeto. Geralmente existem dois fatores
que levam a escolha da utilização desse banco de dados: a primeira é que se torna complexo o
trabalho de dados complexos no modelo relacional, principalmente pelo fato do modelo
relacional não traduzir diretamente o conceito de objeto, com suas propriedades e métodos, o
qual pode conter dados complexos como coleções; e a segunda é que as aplicações são
construídas no paradigma de orientação a objetos, e, quando não se usa um banco OO, há a
necessidade de se traduzir o código para uma linguagem que o modelo do banco entenda,
tornando a tarefa tediosa, além da perda do tempo que foi empregada nessa tradução do
modelo. Quando o banco segue o mesmo paradigma da linguagem de programação, a
passagem do código para o banco e vice versa é natural. Mesmo havendo frameworks que
contribuem para esta migração, a aplicação fica dependente desses frameworks e alguma
perda de eficácia acaba sendo observada. Além do fato dos frameworks darem transparência
ao mapeamento, não permitindo, na maioria dos casos, interferência do usuário para escolher
as melhores opções de modelagem que solucionem o seu problema (Galante et al., 2007)..
Com o crescimento do paradigma da orientação a objetos, o modelo Orientado a
Objetos vem ganhando mercado. Como banco de dados espaciais, na área de
telecomunicações, e nas área científicas como física de alta energia e biologia molecular, ele
vem ganhando espaço devido à possibilidade de aumento de produtividade, segurança e por
sua fácil manutenção. Como objetos são articulados, as mudanças podem ser realizadas
internamente, não afetando as demais partes do sistema, mesmo assim o Banco de Dados
Orientado a Objetos não teve grande impacto em áreas comerciais, embora tenha sido
aplicado em algumas. Uma das características que chama atenção é que o acesso dos dados
pode ser bem mais rápido que os bancos já utilizados, porque não é necessário junções, já que
nele o acesso pode ser feito direto ao objeto por intermédio de ponteiros (Galante et al.,
2007).
Os dois tipos de bancos de dados apresentam uma série de vantagens e desvantagens,
por exemplo, o orientado a objetos utiliza interface de navegação ao invés de utilizar as
convencionais e esse acesso é muito eficiente, o mesmo é implementado por ponteiros, a
desvantagem seria a inconsistência do modelo em trabalhar com outras ferramentas como
OLAP, com backups e padrões de recuperação de dados. Quanto ao relacional ele tem como
28
vantagem ser fortemente baseado em fundamentos matemáticos o que vem facilitar a
elaboração de consultas diversificadas, envolvendo operações como união, interseção, junção
etc. A dificuldade de implementar o encapsulamento é uma desvantagem do relacional
(Galante et al., 2007), sendo que essa desvantagem é trabalhada no mesmo pelo padrão de
projeto DAO (Data Access Object), o mesmo abstrai e encapsula os mecanismos de acesso a
dados
escondendo
os
detalhes
da
execução
da
origem
dos
dados.
(http://www.macoratti.net/11/10/pp_dao1.htm).
Existem vários bancos de dados orientados a objetos no mercado, dentre eles o
CACHÉ, o VERSANT, DB4Objects, O2, GEMSTONE, JASMINE, MATISSE, Objectivity e
o Ozone (Galante et al., 2007).
2.3.3 – COMPARANDO BANCO DE DADOS ORIENTADO A OBJETOS COM
BANCO DE DADOS RELACIONAL
Devido aos problemas abordados anteriormente sobre Banco de Dados Orientados a
Objetos e Bancos de Dados Relacionais, surgiu para agregar as vantagens da orientação a
objetos o Banco de Dados Objeto Relacional. A forma de armazenamento em Banco de
Dados Orientado Objetos quanto no Banco de Dados Objeto Relacional se mostra muito fácil
de fazer, uma vez que ambos os bancos oferecem suporte para dados complexos, tendo como
principal vantagem manipular dados complexos, persistentes e ao mesmo tempo manter a
facilidade de uso dos métodos de consulta o Banco de Dados Objeto Relacional se mostra
mais completo.
O Banco de Dados Orientado a Objetos possui representação de objetos complexos,
sendo assim extensível, oferece suporte para ocultação de informações e herança, o Banco de
Dados Objeto Relacional, além das características citadas anteriormente, possui uma
otimização de consulta muito mais simples e não perde tanto desempenho como o Banco de
Dados Orientado a Objetos.
Os Bancos de Dados Orientados a Objetos são mais utilizados para aplicações de
pequena escala, já o Banco de Dados Objeto Relacional tem o objetivo de alcançar aplicações
de larga escala, área que é dominada atualmente pelo Banco de Dados Relacional (Pinheiro et
al., 2009).
29
2.4 – CRITÉRIOS DE AVALIAÇÃO
Avaliamos toda a parte de análise, projeto e implementação, com o intuito de verificar
a facilidade de utilização e a agilidade de trabalho com os dois bancos. Realizamos essa
avaliação analisando tudo que foi feito desde o começo, nas três etapas citadas anteriormente
e apresentaremos na conclusão, os resultados. O mesmo foi realizado no tempo de
desenvolvimento dos acessos e de todo o projeto, foi realizada a implementação e verificado
qual dos dois gasta menos tempo nessas fases e é importante citar que só possui avaliar esses
critérios combinando-se a avaliação dos protótipos e o estudo da literatura relacionada na
área de banco de dados.
A eficiência, a eficácia, maturidade, estabilidade, confiabilidade e a manutenibilidade,
foram avaliadas com os dados e com a experiência que obtivemos com a pesquisa que
embasou nosso projeto e com a implementação do protótipo.
Todos os testes foram realizados tendo como embasamento teórico a definição das palavras
citadas e seu significado na área de desenvolvimento.
·
Eficiência – significa realizar um trabalho correto, sem muitos erros, consiste em
fazer
certo
as
coisas.
(http://www.infoescola.com/administracao_/eficiencia-e-
eficacia/)
·
Eficácia – significa realizar um trabalho que atinja totalmente o resultado, concluindo
o que se propôs a fazer com um bom almejo do resultado, consiste em fazer as coisas
certas. (http://www.infoescola.com/administracao_/eficiencia-e-eficacia/)
·
Maturidade – Momento do que se encontra no último estágio do desenvolvimento.
(http://www.dicio.com.br/maturidade/).
·
Estabilidade – Solidez e segurança; qualidade daquilo que é estável, está associada à
idéia
de
permanência
em
um
determinado
estado.
(http://www.dicio.com.br/estabilidade/).
·
Confiabilidade – grau de confiança de algo é a capacidade de algo, não variar em seus
resultados, é a capacidade de um sistema, de realizar e manter seu funcionamento em
circunstâncias de rotina, bem como em circunstâncias hostis e inesperadas
(http://www.dicio.com.br/confiabilidade/).
·
Manutenibilidade – característica inerente a um projeto de sistema ou produto, e se
refere à facilidade, precisão, segurança e economia na execução de ações de
30
manutenção nesse sistema ou produto (BLANCHARD, Benjamin. Logistics
engineering and management. 4th ed. Englewwod Cliffs: Prentice Hall, 1992).
31
3 - COMPARAÇÃO DOS BANCOS DE DADOS NA PRÁTICA POR MEIO DE
MODELO ACADÊMICO
Para fins conclusivos e comparativos, surgiu então a necessidade de se desenvolver
um protótipo de modelo de banco de dados, a fim de ser implantado nos dois tipos de bancos
em estudo, aplicando parte da teoria e dos paradigmas descritos anteriormente. O domínio
selecionado para o desenvolvimento do protótipo foi o escolar, tendo uma versão da
modelagem no paradigma relacional (DER – Diagrama Entidade-Relacionamento) e uma
versão no paradigma de Orientação a Objetos (Diagrama de Classes).
O Sistema Gerenciador de Banco de Dados (SGBD) Relacional escolhido foi o
MySQL e o Gerenciador de Banco de Dados OO selecionado foi o DB4Objects, conforme
será visto no decorrer deste capítulo. O objetivo do desenvolvimento do protótipo e seu uso
em cada SGBD é obtermos indícios de sua eficiência, eficácia e efetividade diante dos
desafios que a tecnologia nos oferece.
3.1 - ESTUDO DE CASO
O Estudo de Caso simulará de forma simplificada o funcionamento, organização e
interpretação de dados de uma faculdade que busca se informatizar, a mesma é constituída de
alunos e professores, cada aluno deve ser apenas matriculado em um curso da faculdade e
fazer parte de uma turma, os professores lecionam aulas em várias turmas e um aluno está
cadastrado em várias disciplinas no curso por semestre, o aluno tem em seu histórico todo o
resultado das disciplinas no qual já estudou.
Visando traduzir esses requisitos, foi elaborado o seguinte modelo de classes,
apresentado na Figura 7 a seguir:
32
Figura 7 – Diagrama de Classes.
Como estamos lidando também com banco de dados relacional, foi necessário efetuar
o mapeamento dessas classes para tabelas, conforme diagrama na Figura 8 a seguir:
33
Figura 8 - Mapeamento do Diagrama de Classe.
34
3.2 - TECNOLOGIAS APLICADAS
Para que os protótipos fossem elaborados, parte da estratégia de seu desenvolvimento
foi definir quais tecnologias seriam aplicadas durante o ciclo de desenvolvimento do mesmo,
conforme segue.
Inicialmente foi definido um sistema operacional que foi o Ubuntu 12.04
(http://www.ubuntu.com), sua escolha deve-se principalmente a ser uma das versões mais
estáveis (se não a mais a estável) do Ubuntu atualmente e o fato de ser um sistema livre e
gratuito. Nele foi instalado o Java que foi a linguagem escolhida para a codificação e
desenvolvimento do protótipo. Sua escolha deve-se principalmente pela facilidade que se tem
em encontrar e aprender técnicas que são aplicadas durante o ciclo de desenvolvimento, bem
como bibliotecas para a sua integração com outros sistemas ou plataformas. Além disso, foi
instalado o Eclipse Juno (https://eclipse.org) que dá suporte ao ambiente de desenvolvimento.
Por fim, foram instalados os dois Sistemas Gerenciadores de Bancos de Dados (SGBDs)
avaliados nesses protótipos que são o MySQL (MySQL) e o Db4Object (DB4Object).
Assim como o Java, esses bancos de dados foram escolhidos devido à sua grande
popularidade em suas áreas (relacional e orientada a objetos), além da fácil instalação,
configuração e integração de cada um deles com o Java.
Como um ciclo clássico de desenvolvimento, após ser desenvolvido o diagrama de
classes, foi realizado o mapeamento para o modelo relacional e a instalação dos SGBDs. A
seguir, iniciou-se então a etapa de configuração, por meio de um driver¹ que permite criar
uma conexão na qual possamos transmitir dados a serem persistidos pelo BD desejado.
3.2.1 - O BANCO DE DADOS RELACIONAL MySQL
O MySQL é um banco de dados de código aberto muito popular que possibilita a
entrega econômica de aplicativos de banco de dados confiáveis na web e incorporados.
Possui boa escalabilidade e desempenho e atende às necessidades dos serviços web que
possuem mais tráfego, reduzindo os custos totais e os riscos.
O banco foi votado como “O melhor gerenciador de dados” no 2011 Impact Awards
(Awards, 2011), e votado como “O melhor banco de dados” pelo choice awards 2011 do
Linux Journal (Linux Journal, 2011). Foi também nomeado um dos 10 melhores produtos de
código aberto de 2011 pela CRN, nomeado um dos 10 melhores no hall da fama dos códigos
abertos do InfoWorld. As principais propriedades da web são escaláveis com êxito no
35
MySQL e empresas modernas nos setores de telecomunicações e web implantam o MySQL
em suas aplicações (Oracle, 2015). Em função dessas características mencionadas, o MySQL
foi escolhido como o exemplo de banco de dados relacional para o nosso trabalho (Oracle,
2015).
3.2.2 - DB4Object
O DB4Object é um banco de dados orientado a objetos, de código aberto, que trata
objetos de forma nativa como base de dados. Nele não existem tabelas, linhas ou colunas,
existem só objetos, onde uma entidade ou tabela pode ser interpretada como sendo o escopo
do objeto ou seja, a sua classe e as linhas e colunas são os próprios objetos, eliminando assim
a complexidade extra e a perda de desempenho com a conversão para outros formatos ou com
mapeamento. Ele não usa a linguagem SQL, o mesmo utiliza uma outra tecnologia chamada
de Native Query para tratar seus objetos e replicação orientada a objetos, aumentando assim
sua performance e os ganhos de desempenho de linguagens orientadas a objeto como o JAVA
e as linguagens da plataforma .NET. Os objetos são persistidos em um arquivo com extensão
.yap que identifica um arquivo DB4Object. A conexão com o banco é feita com a abertura
desse arquivo. Com a utilização do DB4Object podemos criar aplicações cliente-servidor,
desktop e aplicações embarcadas.
As
informações
acima
foram
retiradas
do
site
(http://www.macoratti.net/09/08/net_db4o.htm).
3.2.3 - EXEMPLO PRÁTICO: CONFIGURANDO OS SGBDS PARA USO
As diferenças entre os Paradigmas afetam inclusive a forma como os bancos de dados
são configurados. Primeiramente falaremos do banco de dados relacional.
Neste exemplo, estamos usando o Mysql, o banco de dados é criado de maneira
clássica, via linha de comandos no terminal, e, a seguir é necessário baixar um driver que
estabeleça a comunicação entre a aplicação e este banco de dados e assim se faz a conexão,
eis a imagem da configuração no trecho a seguir:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
36
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import classes.Aluno;
import classes.Curso;
import classes.Turma;
public class AlunoDAO {
private Connection conexao;
private PreparedStatement stm;
private String url = "jdbc:mysql://localhost/escola";
private String usuario = "root";
private String senha = "root";
Neste trecho vemos a biblioteca importada, o usuário e senha do BD relacional e o
caminho aonde ele se encontra (link).
Já a configuração do SGBDOO é completamente diferente tanto no conceito quanto
na sua criação, a forma como lidamos muito se difere do modo relacional clássico. Não é, por
exemplo, necessário criar um banco de dados e muito menos configurá-lo para que ocorra
uma comunicação entre o BD e a aplicação. O BD simplesmente complementa o sistema de
forma que todas suas funções fiquem disponíveis direto no nível da configuração.
Para que possa ser configurado é necessário primeiramente importar a biblioteca do
DB4O para o sistema em Java. Feito isso, temos acesso a todos os métodos presentes no
Banco de Dados, assim como suas funções fundamentais, como dito acima o BDOO faz parte
do sistema de forma direta sem precisa de configuração ou driver 1para fazer comunicação
mas sim apenas uma biblioteca com suas funções, lembrando que praticamente todos já estão
presentes no Java, ele funciona na máquina virtual do java em nível de aplicação.
Diferentemente dos modelos relacionais, o BDOO fica salvo em arquivos, cada classe
tem um arquivo e este arquivo contém os dados criptografados da classe. Assim que invoco o
comando de salvar um objeto, ele abre o arquivo da classe referente e insere o objeto a ser
1
Driver: Arquivo que contém as funções a serem integradas a um sistema operacional para
controlar um determinado periférico.
37
salvo, exemplo: pessoa tem n carros. O SGBD procura na pasta referente o arquivo 'pessoa',
caso ele não encontre esse arquivo, automaticamente ele gera um arquivo referente a classe
pessoa, contendo o objeto em si com todas suas propriedades.
Aproveitando este caso, podemos notar também que ele salva não só objetos da
classe, mas também outros tipos de objeto, no exemplo acima, pessoa tem uma lista de carro,
todo esse array de objetos é salvo, isso também facilita muito em buscas de conteúdos,
varrendo interligações de classes. Esta característica é interessante, porém perigosa, pois não
há correlação direta entre os arquivos, ou seja, se eu quiser atualizar um carro no array que a
pessoa tem eu devo me ater ao fato de devo buscar este mesmo objeto no arquivo de carros e
atualizá-lo de forma independente. Ou seja o DB4O é agiu em buscas mas frágil em
correlação de dados, deixando inclusive o programador atendo quando for fazer atualizações
com chaves estrangeiras.
Os BD's ficam salvos em arquivos criptografados em um caminho determinado assim
que o método de abertura é invocado. Cada arquivo corresponderá a uma classe, sendo
possível configurar também login e senha além de conexão web. A seguir, uma imagem do
método que 'abre' o BD com os objetos dessa classe, caso nesse caminho ele não encontre
nenhum arquivo ele cria um.
ObjectContainer db4 = Db4o.openFile("\TCC\dados\professores");
3.2.4 - IMPLEMENTANDO O ACESSO AOS BANCOS
A grande diferença entre os SGBDs, na prática, se vê na facilidade da programação.
Enquanto isso no modo tradicional, muito se gasta em codificação, com comandos simples
isso se resolve no BDOO, os exemplos são claros, começando pelo conceito. No modelo
relacional surge a necessidade de criar classes de persistências, onde estão os métodos com os
comandos, na conexão com a configuração do mapeamento, então, para cada classe teremos
uma classe de persistência que faz o mapeamento entre o OO e o relacional, neste caso, como
não há mapeamento e o que é salvo é um objeto direto, os métodos de inserção dele são
atualizados, e as buscas estão incorporadas diretamente na classe.
Pegamos a classe Disciplina como exemplo, para que ocorra comunicação com o
SGBD Relacional e o sistema, foi criada uma classe que estabeleça uma comunicação, essa
classe foi chamada DisciplinaDAO, nesta classe são configurados todos os métodos CRUD e
a consulta além de estabelecer a comunicação com o MySQL.
38
Declarando informações necessárias para subir no início da classe:
public class DisciplinaDAO {
private Connection conexao;
private PreparedStatement stm;
private String url = "jdbc:mysql://localhost/escola";
private String usuario = "root";
private String senha = "root";
Inserção no modelo Relacional:
public void CadastrarDisciplina(Disciplina d) throws SQLException {
conexao = DriverManager.getConnection(url, usuario, senha);
String sql = "insert into Disciplina(uidDisciplina, sigladisc, nomedisc, ementa,
cargoHoraria) values (?, ?, ?, ?, ?)";
stm = conexao.prepareStatement(sql);
stm.setInt(1, d.getUidDisciplina());
stm.setString(2, d.getSiglaDisc());
stm.setString(3, d.getNomeDisc());
stm.setString(4, d.getEmenta());
stm.setDouble(5, 2343);
stm.execute();
conexao.close();
}
Como podemos ver neste método, cada atributo na classe é passado manualmente
para cada campo em uma classe com muitos atributos, gerando um grande trabalho para
desenvolver este método. Para retornar os dados em uma consulta seria necessário a operação
inversa:
public ArrayList<Disciplina> todasDiscplinas() throws SQLException {
conexao = DriverManager.getConnection(url, usuario, senha);
String sql = "select * from Disciplina";
stm = conexao.prepareStatement(sql);
ResultSet resultado = stm.executeQuery();
39
ArrayList<Disciplina> disciplinas = new ArrayList<Disciplina>();
while (resultado.next()) {
Disciplina d = new
Disciplina(resultado.getInt("uidDisciplina"),resultado.getString("sigladisc"),resultado.getStri
ng("nomedisc"),resultado.getString("cargoHoraria"), resultado.getString("nomedisc"));
disciplinas.add(d);
}
return disciplinas;
No modelo orientado a objeto, o processo de inserção se resume a uma linha, e a de
conexão se resume na instância, o arquivo em questão é configurando quando aberto e com
um simples comando (store) o objeto é salvo;
public void inserirDisciplina(Disciplina a){
ObjectContainer db4 = Db4o.openFile(".\Dados\Disciplinas");
try {
db4.store(a);
}finally {
db4.close();
}
Para fazer consulta, o método é ainda mais simples;
public ObjectSet<Disciplina> BuscarDisciplina(Disciplina a){
ObjectContainer db4 = Db4o.openFile("Disciplinas");
ObjectSet<Disciplina> aaa;
try {
aaa = db4.queryByExample(a);
} finally {
db4.close();
}
return aaa;
40
Além disso, os métodos podem ser criados na própria classe em questão, nesse caso
de Disciplina, sem precisar desenvolver um mapeamento para o mesmo. Isto auxilia muito no
tempo desenvolvimento e programação.
Outro fator interessante foi há não necessidade de ID, além de ter a flexibilidade em
consulta personalizadas. Conforme exemplo abaixo:
public void MediadeAlunoPorDisciplina(ResultadoAluno r){
ObjectContainer db2 = Db4o.openFile("ResultadoAlunos");
ObjectSet<ResultadoAluno> lista;
int somador = 0, count = 0;
try {
lista = db2.queryByExample(r);
}finally {
db2.close();
}
System.out.println("Média dos Alunos da Disciplina: " + "\n");
while (lista.hasNext()){
System.out.println("Nome: " + lista.next().getAluno().getNome()+ " Nota " +
lista.next().getMedia()+ "\n");
somador+= lista.next().getMedia();
count++;
}
System.out.println("A média geral da disciplina é:" + (somador/count));
}
Neste exemplo podemos notar que o resultado da busca no BD é uma lista, e nesta
lista eu posso pesquisar através dos métodos e acessar dados necessários, por exemplo: um
dono tem uma lista de carro e carro tem um dono, no conceito orientado a objeto eu consigo
acessar tanto o carro pela lista e o dono pelo carro, tudo feito através de instâncias e
associações.
Utilizamos na nossa implementação o padrão DAO, o mesmo permite criar as classes
de dados independentemente da fonte de dados ser um BD relacional, um arquivo texto, um
arquivo XML, etc. Para isso, ele encapsula os mecanismos de acesso a dados e cria uma
41
interface de cliente genérica para fazer o acesso aos dados permitindo que os mecanismos de
acesso a dados sejam alterados independentemente do código que utiliza os dados.
Existem diversas implementações do padrão DAO, utilizamos algumas em nosso
projeto, em geral podemos relacionar algumas características desejáveis em uma
implementação do padrão DAO:
·
Todo o acesso aos dados deve ser feita através das classes DAO de forma a se ter o
encapsulamento;
·
Cada instância da DAO é responsável por um objeto de domínio;
·
O DAO deve ser responsável pelas operações CRUD no domínio;
·
O DAO não deve ser responsável por transações , sessões ou conexões que devem ser
tratados fora do DAO;
3.2.5 – TESTANDO OS BANCOS
O mais importante de um banco de dados do ponto de vista técnico e comercial é seu
desempenho, isto é notório e fundamental para a sobrevivência de um SGBD. Talvez a
grande dúvida levantada nesta pesquisa é: o SGBDOO é mais eficiente, eficaz e efetivo que o
SGBD Relacional? Para chegamos a uma conclusão se tornou necessário efetuar testes nos
mesmos e analisar o desempenho de ambos. Vale lembrar que ambos estão rodando na
mesma máquina e no mesmo sistema e em suas execuções estará apenas o Eclipse em
funcionamento na máquina.
Foi efetuado o seguinte teste nos dois modelos de Sistema: inserção, atualização,
busca e exclusão, ambos para 100, 500 e 1000 funcionários com repetição de 3 vezes com a
finalidade de tirar um tempo médio dos 3 em milissegundos.
Inserção
Tabela 1 – Resultado dos Testes de Inserção Realizados no SGBDOO;
Total de
Teste 1
Teste 2
Teste 3
Media
3849
3612
4306
3922,3
Usuários
10 usuários
42
50 usuários
16525
25222
17708
19818,3
100 usuários
32692
39770
36036
36166
Tabela 2 - Resultado dos Testes de Inserção Realizados no Banco Relacional;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
1957
0902
924
1261
50 usuários
2141
2131
2031
2101
100 usuários
5436
4273
4484
4731
Usuários
Atualização:
Tabela 3 - Resultado dos Testes de Atualização Realizados no SGBDOO;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
4312
3321
3427
3686,6
50 usuários
18128
20021
17078
18409
100 usuários
33010
51584
33870
39488
Usuários
Tabela 4 - Resultado dos Testes de Atualização Realizados no Banco Relacional;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
510
422
545
492,3
50 usuários
2253
2198
2784
2411,6
100 usuários
5580
3891
3741
4404
Usuários
43
Consulta:
Tabela 5 - Resultado dos Testes de Consulta Realizados no SGBDOO;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
277
430
777
494,6
50 usuários
267
340
775
460,6
100 usuários
266
279
779
441,3
Usuários
Tabela 6 - Resultado dos Testes de Consulta Realizados no Banco Relacional;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
13
12
12
12,3
50 usuários
94
23
180
99
100 usuários
84
32
100
72
Usuários
Exclusão:
Tabela 7 - Resultado dos Testes de Exclusão Realizados no SGBDOO;
Total de
Teste 1
Teste 2
Teste 3
Media
10 usuários
4365
7240
3094
4899,6
50 usuários
15279
18218
14391
15962,6
100 usuários
32465
54938
33180
40194,3
Usuários
Tabela 8 - Resultado dos Testes de Exclusão Realizados no Banco Relacional;
Total de
Usuários
Teste 1
Teste 2
Teste 3
Media
44
10 usuários
489
435
471
465
50 usuários
2793
1967
1756
2172
100 usuários
4389
3900
4484
4257,7
Tabela 9 - Resultado Final dos Testes Realizados Anteriormente nos Bancos;
Técnica aplicada
SGBDOO
SGBD Relacional
Inserção com 10 dados
X
Inserção com 50 dados
X
Inserção com 100 dados
X
Atualização com 10 dados
X
Atualização com 50 dados
X
Atualização com 100 dados
X
Busca com 10 dados
X
Busca com 50 dados
X
Busca com 100 dados
X
Exclusão com 10 dados
X
Exclusão com 50 dados
X
Exclusão com 100 dados
X
Derrota do sistema OO teria explicação? A Tabela 9 mostra através das marcações
realizadas, qual banco se saiu melhor nos testes de Inserção, Atualização, Busca e Exclusão.
Talvez sim, neste modelo feito por nós foi decidido que os métodos de inserção, atualização,
busca e exclusão faria parte da classe, ou seja para cada valor inserido um novo objeto devia
ser instanciado, isto atrapalhou principalmente na ocupação de memória e processamento de
dados, porém, a respeito deste paradigma, o banco de dados se mostrou muito eficiente sendo
instanciado diretamente da execução sem ser agregado a método de nenhuma classe.
45
3.3 – ANÁLISE DOS RESULTADOS
Após a parte da pesquisa bibliográfica, começamos a criar os modelos, para construir
os protótipos, a fim de realizar testes mais conclusivos, referentes a comparação entre os
bancos.
Logo que iniciamos, nos deparamos com as diferenças e a quebra de paradigma
apresentada pelo modelo relacional. Ao criar os modelos, visualizamos que, para o Banco de
Dados Orientado a Objetos, o modelo foi extraído diretamente do código criado, ao passo que
no Banco de Dados Relacional, tivemos que utilizar um framework para realizar o
mapeamento objeto relacional. Assim, só depois de realizar esse mapeamento, tendo esse
trabalho a mais, foi possível iniciar o trabalho de manipulação do banco. Foi possível então
perceber que o gasto de tempo que aconteceu nesse mapeamento, já é uma desvantagem da
utilização do Banco Relacional com o desenvolvimento no paradigma OO. Além desse
problema, poderíamos vir a enfrentar outro, se o framework não funcionasse corretamente,
tendo assim a necessidade de baixar e instalar um novo e realizar o mapeamento novamente,
perdendo ainda mais tempo nessa parte de criação do modelo.
Pensando em cenários de manutenção e evolução do sistema, uma vez que o modelo
de análise e projeto, o código e o banco de dados são Orientados a Objetos, basta se alterar
um deles para que o raciocínio da alteração do restante seja direto. Além disso, a alteração do
código já se reflete na alteração do banco, o que não ocorre quando há a utilização de dois
paradigmas: OO e Relacional.
Com os modelos prontos, começamos a criar os protótipos. Utilizando JAVA como
linguagem de programação, o MySQL como Banco de Dados Relacional e o DB4Object
como Banco de Dados Orientado a Objetos. Neste momento do projeto, nos deparamos com
outros pontos. Um deles, ao programar a construção do modelo proposto, o DB4Object
espelha tudo que foi programado para o banco, de imediato, criando tudo de forma mais
rápida, pois o mesmo, como na orientação a objetos, trata os dados como objetos do mundo
real. Já no Banco de Dados Relacional, começamos programando em orientação a objetos,
depois criamos todo o banco no MySQL, depois de todo esse trabalho, que ocupou muito
mais tempo do que no modelo anterior já apresentado, tivemos que configurar a conexão
entre as duas partes por meio de um driver para o modelo relacional.
Em relação ao desempenho dos SGBDs, com o volume de dados inserido, não foi
possível perceber diferença significativa.
46
Ao nos depararmos com todas essas diferenças, nos perguntamos, por que os Bancos
de Dados Orientados a Objetos ainda não emplacaram? Um dos pontos que pensamos, foi a
mão de obra qualificada para trabalhar de forma segura, com qualidade e retirando o melhor
desses bancos. No decorrer do nosso curso superior, em nenhum momento vimos ou
aprendemos a trabalhar com esse tipo de banco, só tivemos contato com ele através do nosso
trabalho de conclusão de curso. Do começo ao fim do curso, todas as matérias que utilizavam
banco de dados, só focaram nos bancos de dados relacionais. Acreditamos que uma forma de
inibir essa quebra de paradigma apresentada, é começar desde a formação, inserindo esse
pensamento de programar orientado a objetos para bancos orientados a objetos.
Outro ponto que encontramos em nossas pesquisas é o receio das grandes empresas de
passar todos os dados de um banco de dados relacional (Coluna do Estagiário Celepariano:
Sistemas de gerenciamento de banco de dados orientado a objetos), que já está funcionando
de forma correta e servindo bem aos seus objetivos, para um banco de dados orientado a
objetos, que quase nenhuma grande empresa utiliza ainda e que não possui uma mão de obra
qualificada e especializada. Os bancos relacionais são estáveis, maduros e apresentam boa
escalabilidade para grandes volumes de dados. Dessa forma, as empresas ficam receosas com
a migração.
Acreditamos que os relacionais então ainda estejam ganhando mercado, por serem os
mais utilizados há muito mais tempo pelas grandes empresas, terem maturidade e segurança
maior.
A primeira grande diferença percebida é que no BDOO ocorre uma total integração
com a linguagem de programação Java, sua instalação é simples. Basta baixar a biblioteca,
importar para seu projeto e codificar de acordo com sua necessidade, que ele já lhe fornece
todo um conjunto de classes implementadas, no qual precisamos apenas chamar os métodos
que atenderão nossas necessidades. Tal dinâmica é muito diferente da maneira que
persistimos dados atualmente.
4 - CONCLUSÃO
4.1 - CONTRIBUIÇÕES
Com a realização da pesquisa, utilizando como fonte de conhecimento, a literatura
científica composta por artigos e livros e materiais com foco na área de Banco de Dados e
47
seguindo a linha de pensamento e as questões levantadas neste projeto, chegamos as
seguintes conclusões:
·
Foi possível identificar que o Banco de Dados Relacional, por ser mais antigo e mais
utilizado, possui vantagens quanto à sua estabilidade e maturidade, não perdendo
desempenho quando utilizado em larga escala;
·
O Banco de Dados Relacional já possui grande confiabilidade por parte das empresas
devido ao seu tempo em uso;
·
O Banco de Dados Orientado a Objetos é melhor quanto à eficiência e eficácia e
manutenibilidade, sendo mais naturalmente mapeado para o código, e, sendo possível,
dessa forma, se realizar modificações sem mexer na estrutura do sistema;
·
O Banco de Dados OO permite melhor reaproveitamento de código, baixo custo e
esforço com relação à realização de mapeamento, refletindo o mundo real, além de
permitir o armazenamento de coleções e dados complexos.
·
O Banco de Dados OO não usa SQL, não aproveitando assim toda uma cultura já
existente dentro desse padrão de linguagem de consulta e manipulação de dados.
·
A migração dos dados dos Bancos de Dados Relacionais para o Banco de Dados OO é
mais difícil de ser realizada, do que de um Banco Relacional para outro, devido a sua
não padronização e falta de mão de obra qualificada na área.
·
Mão de obra qualificada na área da OO é muito escassa, um dos pontos que faz com
que isso aconteça, é o fato de cada Banco de Dados OO ter seus próprios comandos e
cultura e isso causa ainda mais receio nas empresas de realizar essa migração.
4.2 - LIMITAÇÕES
No decorrer do projeto nos deparamos com a limitação de não poder comprovar a
utilização do Banco Orientado a Objetos em grandes empresas, podendo avaliar seu
desempenho com grande volume de dados. Não foi possível encontrar nenhum artigo ou
projeto que abordasse esse assunto e não conseguiríamos realizar essa pesquisa somente
através de protótipos, que não são capazes de refletir os milhares de dados das grandes
empresas.
Além dessa, nos deparamos com a dificuldade de encontrar site brasileiro que abordasse o
assunto de Banco de Dados Orientado a Objetos, sendo assim, toda a pesquisa relacionada ao
Banco utilizado foi realizada a partir de artigos e pesquisa em sites estrangeiros.
48
4.3 – TRABALHOS FUTUROS
Alguns pontos de pesquisa para trabalhos futuros foram identificados ao longo da
pesquisa e da confecção do projeto, podendo ser abordados em trabalhos futuros, como se
segue:
·
Pesquisa e confecção de um projeto de Banco de Dados Orientado a Objetos voltados
para a escalabilidade do mesmo, com inserção de grande quantidade de dados para
assim, verificar suas reais limitações;
·
Pesquisa relacionada à mão de obra qualificada na área, com relação a uma possível
migração de Bancos de Dados Relacionais de grandes empresas para Bancos de
Dados Orientados a Objetos.
·
Ampliar os estudos comparativos incluindo o Banco de Dados Relacional-Objeto.
5 - REFERÊNCIAS
● DATE, C. J. Introdução a Sistemas de Bancos de Dados, Editora Campus 1990.
● SILBERSCHATZ, A. Sistemas de Bancos de Dados, Makron Books 1999.
● DATE, C.J. Introdução a Sistemas de Bancos de Dados, Editora Campus, 2003.
● FARINELLI, F. Conceitos Básicos de Programação Orientada a Objetos 2007.
●
HOPPEN, M. M., DILL, S. L. Compatibilização do Paradigma Relacional com o
Paradigma Orientado a Objetos 2005.
● GALANTE, A. C., MOREIRA, E. L. R., BRANDÃO, F. C. Banco de Dados
Orientado a Objetos: Uma Realidade 2007.
● MACÁRIO, C. G. N., BALDO, S. M. O Modelo Relacional 2007.
● PINHEIRO, D. R. S., SOUZA, D. S., VASCONCELOS, R. O., SILVA, F. S.
Comparativo entre Banco de Dados Orientado a Objetos e Banco de Dados
Objeto Relacional 2009.
49
● MySQL. <http://www.oracle.com/>Acesso 16/12/15.
● DB4Object. <http://www.macoratti.net/09/08/net_db4o.htm> Acesso 16/12/15.
● UCHÔA E. M. A., Compatibilizando Paradigmas: Projetando Objetos,
Implementando em Banco de Dados Relacional.
● MySQL. <https://www.phparch.com/2011/06/impact-award-winners/>, último
acesso em 18/12/2015.
● MySQL.
<http://www.linuxjournal.com/slideshow/readers-choice-
2011?page=22>, último acesso em 18/12/2015.
● MySQL. <http://www.oracle.com/br/products/mysql/index.html>, último acesso
em 18/12/2015.
● DB4Object. <http://www.macoratti.net/09/08/net_db4o.htm>, último acesso em
18/12/2015.
● Coluna do Estagiário Celepariano: Sistemas de gerenciamento de banco de
dados
orientado
a
objetos.
<http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?conteudo=560
>, último acesso em 24/05/2016.
●
Eficiência.
<http://www.infoescola.com/administracao_/eficiencia-e-eficacia/>
Data de acesso: 02/06/2016.
●
Eficácia.
<http://www.infoescola.com/administracao_/eficiencia-e-eficacia/>
Data de Acesso: 02/06/2016.
●
Maturidade.
02/06/2016.
<http://www.dicio.com.br/maturidade/>
Data
de
Acesso:
50
●
Estabilidade.
<http://www.dicio.com.br/estabilidade/>
Data
de
Acesso:
02/06/2016.
●
Confiabilidade. <http://www.dicio.com.br/confiabilidade/> Data de Acesso:
02/06/2016.
●
BLANCHARD, Benjamin. Logistics engineering and management. 4th ed.
Englewwod Cliffs: Prentice Hall, 1992, Manutenibilidade.
●
Data Access Object (DAO). <http://www.macoratti.net/11/10/pp_dao1.htm>
Data de Acesso: 02/06/2016.
Download