Modelagem SQL x NoSQL

Embed Size (px)

Citation preview

  • www.devmedia.com.br [verso para impresso]Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=29446

    Modelagem SQL x NoSQL

    Com este artigo possvel compreender melhor como a

    modelagem funciona nos bancos de dados NoSQL. Neste contexto

    so discutidos exemplos de como as integridades de entidade, de

    domnio e referencial afetam a modelagem tradicional.

    Fique por dentro

    O contedo deste artigo til para aqueles que esto comeando a aprender tecnologias NoSQL

    e possuem dificuldade para se adaptar e utilizar o conhecimento j adquirido na modelagem

    relacional. A partir da discusso apresentada possvel compreender melhor como a modelagem

    funciona nos bancos de dados NoSQL do ponto de vista da modelagem de entidades,

    relacionamentos e atributos. Neste contexto so discutidos exemplos de como as integridades

    de entidade, de domnio e referencial afetam a modelagem tradicional e como estes aspectos so

    tratados pelas tecnologias agrupadas pela sigla NoSQL.

    A modelagem uma das atividades iniciais envolvidas no processo de criao de bancos de dados

    tradicionais que conta com diversas tcnicas consolidadas e utilizadas nas tarefas do dia a dia que

    envolvem programao e banco de dados. Estas tcnicas so diretamente ligadas aos bancos de

    dados relacionais que suportam a linguagem SQL. Contudo, novas abordagens para o

    armazenamento, manipulao e tratamento de dados abrem discusso sobre novas formas de

    modelagem de dados.

    Apesar de existir muito material, recursos, exemplos e aplicaes voltadas para os bancos de

    dados NoSQL, pouco se fala sobre as caractersticas, aspectos e tcnicas de modelagem que

  • podem ser utilizados com tecnologias NoSQL. De fato, esta falta de discusso acaba se tornando

    uma barreira de aprendizado para muitas pessoas que, muitas vezes, simplesmente desistem de

    experimentar tecnologias NoSQL por no encontrar uma comparao com o que j existe no

    mundo SQL. Desta maneira, este artigo apresenta uma discusso sobre a criao de modelos para

    bancos NoSQL tendo como guia as tcnicas e recursos empregados na concepo e criao de

    bancos que suportam a linguagem SQL.

    A discusso apresentada neste artigo no se prope a ser muito extensa ou se concentrar em um

    banco de dados relacional ou NoSQL especfico, pois o foco nas possibilidades que a modelagem

    proporciona quando se est trabalhando com bancos de dados reacionais ou NoSQL.

    Aspectos gerais de modelagem

    De um ponto de vista mais geral, a modelagem representa uma abstrao da realidade.

    Basicamente o que estamos fazendo quando modelamos um banco de dados montar uma

    representao da realidade de acordo com o nosso objetivo, que no caso o armazenamento de

    dados. Alm da abstrao, tambm realizamos outras tarefas, tais como filtrar o que nos

    interessa, interpretar cenrios, enquadrar os dados em um formato que seja interessante e saber

    o que relevante ou no para o modelo.

    Estas atividades so realizadas de forma iterativa, ou seja, o modelo provavelmente vai passar por

    vrias verses antes de chegar verso final que ser implementada em um sistema gerenciador

    de banco de dados relacional (SGBDR).

    A modelagem relacional tradicional possui algumas caractersticas que a tornaram adequada para

    muitos tipos de ocorrncias de dados que, de certa forma, sempre envolvem um usurio final. Um

    dos aspectos que pouca gente nota quando se fala em modelagem tradicional que os modelos

    geralmente so criados pensando-se em gerao de relatrios com algum nvel de agregao de

    dados.

    Esta modelagem tambm , at certo ponto, influenciada pela prpria linguagem SQL, que possui

    muitos recursos para se trabalhar com conjuntos de dados ao invs de dados individuais. Tambm

    existe certa influncia do uso de transaes nas caractersticas de modelagem, assim como a

    consistncia e integridade de dados.

    Quem est aprendendo a modelar bancos de dados tradicionais logo nota que h uma preocupao

    grande em garantir que o modelo de dados seja rgido, ou seja, no aceite grandes variaes fora

    do que foi modelado. H tambm uma preocupao constante em garantir que anomalias de dados

    no sejam inseridas no modelo por meio da aplicao das famosas regras de normalizao ou

    formas normais.

    Durante a fase de modelagem tradicional comum que os modelos recebam muitas modificaes

  • para que eles estejam de acordo com as recomendaes da terceira forma normal. Isso quer dizer

    que o modelo deve receber modificaes tais como a criao de novas entidades, atributos e

    relacionamentos, para que certas anomalias no ocorram nos dados.

    Esta uma das principais caractersticas de modelos relacionais e que acaba guiando a modelagem

    para um lado mais rgido, adequando-se bem ao uso de transaes, concorrncia e integridade do

    esquema do banco de dados.

    Contudo, recentemente os bancos de dados agrupados sob a sigla NoSQL propuseram

    abordagens diferentes para o armazenamento, manipulao de dados e modelagem de dados. O

    que era considerado tradicional e desejvel no modelo relacional comeou a ser desafiado pelos

    bancos NoSQL, pois o uso de transaes, rigidez no esquema, integridade e tambm aspectos de

    escalabilidade, alta disponibilidade e concorrncia de acesso nem sempre so desejveis como nos

    bancos SQL. Certamente esta nova forma de pensar e ver o banco de dados gera um impacto na

    modelagem que precisa ser conhecido para que se possa escolher, dependendo do contexto, qual

    o melhor tipo de modelagem a ser adotado em cada situao.

    Quem est iniciando os estudos em tecnologias NoSQL no deve ter em mente que tudo o que foi

    aprendido deve ser deixado de lado. Muito do que foi aprendido com modelagem tradicional pode e

    deve ser utilizado na modelagem NoSQL. Algumas tcnicas, recomendaes e recursos so

    praticamente iguais, enquanto outras exigem um esforo de aprendizado. No geral, preciso

    sempre focar na soluo e como a modelagem pode ser utilizada para atender as necessidades do

    negcio independente de como a modelagem for implementada.

    A modelagem tradicional empregada para atender as necessidades de armazenamento j existe h

    muitos anos e diversos modelos de dados foram criados desta forma. H, inclusive, repositrios

    com diversos modelos de dados prontos para serem utilizados. Infelizmente, a modelagem para

    bancos NoSQL no conta com tantos exemplos, recursos educacionais e discusses que possam

    auxiliar quem est comeando a trabalhar com as tecnologias NoSQL.

    Contudo, a falta de recursos no deve ser um fator que impea a avaliao e o uso de modelos

    NoSQL no dia a dia das solues, independente de qual paradigma de armazenamento seja mais

    adequado.

    Apesar de existirem diferentes formas de armazenar e organizar os dados nos produtos

    agrupados pela sigla NoSQL, a prxima seo vai discutir alguns dos principais aspectos

    relacionados modelagem de um banco de dados relacional ou no levando em considerao os

    SBGDR tradicionais e algumas abordagens NoSQL mais populares.

    Diferenas de modelagem entre NoSQL e SQL

    Um dos principais pontos que diferenciam a modelagem de bancos de dados NoSQL da modelagem

  • tradicional a rigidez do modelo. Nas tcnicas tradicionais de criao deste artefato necessrio

    fazer um levantamento de requisitos e especificar com detalhes cada uma das entidades,

    relacionamentos e atributos que, no momento da criao do banco de dados fsico, vo se tornar

    tabelas, relacionamentos (implementados por constraints) e colunas, respectivamente.

    Uma vez que este levantamento seja feito, necessrio especificar quais so os atributos das

    entidades que futuramente se tornaro as colunas das tabelas.

    Os atributos da modelagem tradicional so rgidos, ou seja, todos eles so necessrios para cada

    instncia da entidade. Isso quer dizer que cada linha da tabela dever ser composta pelos valores

    das colunas que foram criadas. Por exemplo, se uma entidade possui 10 atributos, espera-se que

    cada um deles receba um valor para cada instncia da entidade.

    Se houver uma tentativa de inserir menos ou mais do que 10 valores para uma nova instncia

    (linha) desta entidade (tabela), um erro dever ser retornado indicando uma violao de integridade

    de entidade.

    Em bancos de dados NoSQL orientados a documento esta rigidez no existe. possvel criar uma

    coleo (anlogo a uma entidade ou tabela), que recebe os documentos (anlogo a instncias da

    entidade ou linhas) e que possui atributos (anlogo a colunas da tabela). Contudo, a definio de

    quais atributos o documento ir possuir criada de acordo com os dados, tornando o modelo

    flexvel.

    Isso quer dizer que possvel ter em uma coleo um documento com trs atributos e outro

    documento dentro da mesma coleo com 10 atributos. Esta flexibilidade caracterstica de muitos

    bancos de dados NoSQL e gera novas possibilidades de armazenamento.

    Vejamos um exemplo onde a flexibilidade pode ser til. Em um cadastro de produtos de uma loja

    provvel que cada produto tenha caractersticas nicas que precisam ser analisados. Um tnis

    possui cor, tamanho e marca. J uma bebida possui sabor, data de validade e contedo calrico.

    Geralmente a modelagem tradicional resolve esta situao criando uma tabela de produtos com um

    atributo de texto livre para armazenamento de uma descrio ou observao. J a modelagem

    NoSQL pode separar melhor estas caractersticas em atributos que no foram criados durante a

    modelagem. Desta forma possvel armazenar dados de acordo com as caractersticas dos

    produtos sem a necessidade de uma modelagem rgida.

    At aqui vimos algo que vai contra a integridade de entidade de uma tabela, pois tal integridade diz

    que o formato dos dados deve ser o mesmo para cada instncia da entidade. Entretanto, muitos

    cenrios no exigem a integridade de entidade devido a certas caractersticas dos dados. Nestes

    casos recomendado trabalhar com um esquema de banco de dados que seja flexvel e permita a

    insero de valores para atributos que no foram previamente modelados.

  • A flexibilidade de esquema tambm pode ser utilizada para armazenar diferentes valores para um

    mesmo atributo, uma vez que nos bancos NoSQL orientados a documentos cada documento

    dentro de uma coleo tratado de forma individual. Isso quer dizer que, por exemplo, no atributo

    CODIGO podemos ter um valor numrico para um documento X e um valor alfanumrico para o

    atributo CODIGO em um documento Y, sendo que ambos os documentos esto dentro da mesma

    coleo C. Isso pode acontecer em cenrios onde cada fabricante tem um cdigo interno do seu

    produto.

    Geralmente a modelagem tradicional resolve esta situao de integridade de domnio escolhendo

    um tipo de dados que armazena qualquer tipo de valor ou criando diferentes atributos dentro da

    mesma entidade. Nos bancos NoSQL orientados a documentos no preciso nenhum trabalho

    adicional, pois, como j foi dito, cada documento tratado de forma individual.

    O terceiro tipo de integridade que se encontra em um modelo relacional tradicional a integridade

    referencial. Este tipo de integridade garante a correspondncia entre instncias de entidades e

    utilizado para estabelecer os relacionamentos. Na fase de modelagem fsica so utilizadas as

    constraints chave estrangeira e chave primria para garantir a integridade referencial destes

    relacionamentos.

    Uma das principais dvidas de quem est comeando a aprender bancos de dados NoSQL sobre

    os relacionamentos e os joins. Os iniciantes em NoSQL sentem dificuldade em compreender que

    no necessrio fazer joins e relacionar as entidades ou colees no mundo NoSQL, pois o tipo de

    tratamento para obter os dados outro.

    Por exemplo, a Figura 1 mostra um modelo simples de usurios (users) e suas habilidades (skill).

    Neste cenrio, a modelagem relacional tradicional cria trs tabelas representadas pelas colunas da

    Figura 1: uma tabela para armazenar os usurios (users), uma tabela para as habilidades (skill) e

    uma tabela de ligao entre usurios e habilidades (user_skill), configurando um relacionamento

    N:M que foi implementado como dois relacionamentos 1:N.

  • Figura 1. Relacionamento clssico entre usurios e habilidades.

    De acordo com a Figura 1, um usurio representado pela cor vermelha, trs habilidades que ele

    possui so representadas pela cor azul clara e a indicao que este usurio possui estas

    habilidades indicada pela cor amarela. Esta a maneira tradicional e clssica de representar este

    relacionamento.

    O relacionamento entre usurios e habilidades pode ser representado de diversas maneiras no

    mundo NoSQL, dependendo de qual paradigma se utiliza para armazenar os dados. Contudo,

    fato que as tecnologias NoSQL possuem uma tendncia a representar entidades e relacionamentos

    de forma diferente. No caso da modelagem tradicional, o relacionamento assumiu a forma de uma

    entidade adicional (user_skill) e o modelo final acabou com trs entidades. Supondo que

    desejamos modelar este mesmo cenrio em um banco de dados NoSQL orientado a grafos, uma

    possvel representao mostrada na Figura 2, onde nota-se que a modelagem do cenrio feita

    de acordo com ns e arestas de um grafo.

  • Figura 2. Representao do relacionamento entre usurios e habilidades em um grafo.

    Alm da representao na forma de grafo, muito comum encontrar os relacionamentos do tipo

    N:M ou 1:N embutidos dentro de uma mesma entidade nos bancos NoSQL orientados a

    documentos. Tal representao realizada por meio de um atributo que contm outra coleo que

    por sua vez contm diferentes documentos.

    Este tipo de abordagem embutida permite encadear dentro de uma mesma entidade diferentes

    tipos de relacionamentos sem a necessidade de se criar novas entidades no modelo. uma

    maneira diferente de enxergar os relacionamentos sem precisar separ-los em entidades individuais

    e depois relacion-las de alguma forma.

    A Figura 3 exemplifica este tipo de relacionamento embutido colocando lado a lado como seria a

    modelagem tradicional das entidades Book, Album, Track e Jeans no formato relacional (lado

    esquerdo da figura) e no formato embutido (lado direito da figura) como um documento JSON, que

    uma forma de representao de dados utilizada por bancos de dados NoSQL orientados a

    documentos.

  • Figura 3. Exemplo de relacionamento embutido no formato JSON.

    possvel notar na Figura 3 que certos atributos das entidades da direita representam outros

    documentos com outras caractersticas, porm eles esto dentro dos documentos da coleo. Este

    o caso do atributo Details da coleo Product, pois ele possui os atributos Model, Length e

    Width que no existem em Product.

    A modelagem tradicional possui uma tendncia de se concentrar mais nas entidades do que nos

    relacionamentos. Entretanto, na modelagem voltada para bancos de dados NoSQL os

    relacionamentos so tradados de forma diferenciada devido possibilidade de represent-los de

    diferentes formas (arestas em grafos, embutidos em documentos) e tambm flexibilidade de

    criao de atributos para as entidades.

    Isto faz com que cenrios onde seja necessrio representar hierarquias, mltiplos relacionamentos

    de acordo com o tempo, rvores e grafos, sejam mais atrativos para a modelagem NoSQL do que

    a modelagem relacional. Devido a esta caracterstica no a toa que cada vez mais profissionais

    veem optando por tecnologias NoSQL para modelar dados provenientes de redes sociais e

    relacionamentos entre pessoas, objetos, situaes, eventos, preferncias e comportamentos.

    Outro grande motivador para o uso de tecnologias NoSQL que remete modelagem o

    armazenamento de objetos utilizados pela aplicao diretamente no banco de dados. Porm este

    armazenamento nem sempre direto, ou seja, a aplicao deve fazer uso de algum framework ou

  • ORM (Object-Relational Mapping) para realizar a persistncia dos objetos. Aqui, tanto as

    tecnologias NoSQL como SQL permitem este tipo de armazenamento, no entanto bancos de dados

    de documentos possuem uma pequena vantagem por utilizar internamento formatos como JSON,

    que j so apropriados para a serializao e persistncia de objetos.

    Os profissionais que esto acostumados a enxergar os relacionamentos entre entidades da

    maneira tradicional podem ficar um pouco confusos com relacionamentos embutidos ou a

    representao dos relacionamentos na forma de um grafo. Para explicar melhor, vale a pena

    recorrer a aquela famosa frase: Quando tudo que se tem um martelo, a tendncia imaginar

    todos os problemas como um prego e sair martelando tudo.

    A modelagem tradicional trata os relacionamentos atravs da colocao de atributos em entidades

    diferentes. Uma vez que o relacionamento esteja criado no modelo, comum utilizar um JOIN em

    uma instruo que compara o valor de atributos em diferentes tabelas.

    A maneira de se obter dados atravs dos relacionamentos um pouco diferente com as

    tecnologias NoSQL. Nestes cenrios utiliza-se algum tipo de algoritmo para percorrer o grafo ou

    rotina recursiva para chegar at um nvel especfico de dado dentro de vrios documentos.

    Este tipo de mudana de pensamento deve ser encarado no como algo mais complexo e difcil,

    mas sim como algo que adequado e faz muito sentido em determinados cenrios. O mesmo vale

    para outras tarefas comuns no mundo SQL, como filtros (clusula WHERE), agregaes (clusulas

    GROUP BY e HAVING) e ordenaes (clusula ORDER BY), apenas para citar alguns exemplos.

    importante destacar que tanto a modelagem tradicional como a modelagem NoSQL permitem

    fazer o armazenamento de praticamente qualquer dado em qualquer cenrio. A diferena est nas

    possibilidades, quantidade de esforo de implementao, recursos e outros elementos prticos que

    podem tornar mais simples e rpido o desenvolvimento da soluo e do modelo de acordo com o

    contexto e caractersticas dos dados.

    Quem j possui alguma experincia com modelagem sabe que sempre vai haver mltiplas solues

    para os problemas dependendo do contexto, porm cada uma possui certas vantagens e

    desvantagens que devem ser analisadas alm das recomendaes gerais, frmulas prontas,

    diretrizes e comentrios do tipo via de regra.

    claro que existem vrias implicaes, tanto para o banco de dados como para as aplicaes,

    quando se utiliza as tcnicas de NoSQL de modelagem, que vo contra as integridades de entidade,

    domnio e referencial. Contudo, aqui preciso estar com a mente aberta para compreender novas

    formas de se enxergar como os dados so modelados e vo se comportar quando eles estiverem

    armazenados em um banco de dados NoSQL. Em outras palavras, preciso ter mente aberta para

    compreender outras abordagens que vo contra o que j est estabelecido pela modelagem

    relacional tradicional.

  • Concluso

    Este artigo apresentou uma discusso sobre a modelagem de bancos de dados relacional e bancos

    de dados NoSQL. As principais tcnicas de modelagem tradicionais foram apresentadas e

    comparadas com o que possvel realizar com as tecnologias NoSQL.

    Saber modelar um banco de dados exige muito mais do que listar entidades, criar relacionamentos

    e detalhar atributos. Modelar uma tarefa que envolve compreenso, representao, abstrao,

    organizao e outros aspectos que se distanciam das atividades prticas de implementao de um

    modelo de dados, seja ele um modelo relacional ou no.

    As tecnologias NoSQL permitem novas maneiras de se pensar em como a modelagem pode ser

    realizada, especialmente quando h necessidade de flexibilizao de armazenamento e

    representao de relacionamentos complexos e no h uma necessidade grande de manter as

    integridades de domnio, entidade e relacional.

    Links

    Artigo NoSQL Data Modeling Techniques, de Ilya Katsov

    http://highlyscalable.wordpress.com/2012/03/01/

    nosql-data-modeling-techniques/

    Repositrio de modelos relacionais Database Answer

    http://www.databaseanswers.org/data_models/

    Mauro Pichiliani

    Mauro Pichiliani bacharel em Cincia da Computao, Mestre e doutorando em computao pelo ITA (Instituto

    Tecnolgico de Aeronutica). Trabalha h mais de 10 anos utilizando diversos bancos de dados e ferramentas de

    programao. [...]