O que é mapeamento objeto-relacional (ORM)?
O que é mapeamento objeto-relacional (ORM)?
O mapeamento objeto-relacional (ORM) é o processo de abstrair a conexão entre entidades da linguagem de programação (objetos) e seus elementos de banco de dados correspondentes.
Ao criar aplicações, os programadores definem objetos no código, que correspondem aos conceitos do mundo real. Os dados do objeto são manipulados em código, mas armazenados em um banco de dados, conforme definido pelo design do sistema de dados. Por exemplo, você pode ter um objeto de cliente que contém informações do cliente em seu código, mas o banco de dados subjacente pode armazenar esses dados em várias tabelas.
O mapeamento objeto-relacional é uma camada de software que converte os dados do objeto para o banco de dados subjacente, abstraindo os detalhes do banco de dados do programador. Dessa forma, o código permanecerá inalterado mesmo se os bancos de dados subjacentes forem trocados por designs novos ou diferentes. O mapeamento objeto-relacional permite a criação de aplicações modulares que são fáceis de gerenciar e manter.
Como funcionam os mapeamentos objeto-relacional?
Os mapeamentos objeto-relacional (ORM) conectam aplicações escritas em uma linguagem de programação orientada a objetos (OOP) a um banco de dados subjacente. Esses tipos de aplicações e bancos de dados geralmente são usados juntos, mas cada um lida com os dados de forma diferente. Adicionar um mapeamento objeto-relacional entre eles permite que cada um envie dados em um formato que o outro entenda. Você pode modificar um sem afetar o outro.
Linguagem de programação orientada a objetos
As linguagens OOP organizam os dados em objetos, que são estruturas de código com um ou mais atributos. Por exemplo, em um aplicação OOP, você pode definir um objeto representado como uma classe persistente de dados, como um carro, com atributos como marca, modelo, VIN, cor e quilometragem.
Algumas das linguagens de programação orientada a objetos (OOP) mais populares incluem Python, Java, JavaScript e .NET/C#.
Bancos de dados relacionais
Bancos de dados relacionais estruturam dados em tabelas, de forma semelhante a uma série de planilhas conectadas. Cada tabela consiste em um conjunto de colunas com registros exclusivos em cada linha.
Por exemplo, o banco de dados do seu carro pode ter várias tabelas. Uma pode conter dados da marca, como marca, modelo e VIN. Outra tabela pode armazenar atributos de carros individuais, como proprietário, cor e quilometragem. Alguns dos bancos de dados relacionais mais populares incluem MySQL, PostgreSQL e SQL Server.
No desenvolvimento na web, uma ferramenta de mapeamento objeto-relacional (ORM) converte dados enviados de uma aplicação orientada a objetos em um banco de dados relacional sem exigir que a aplicação saiba como esses dados são estruturados no banco de dados.
Mapeamentos objeto-relacional
Você pode criar um mapeamento objeto-relacional, às vezes chamado de gerenciador objeto-relacional, que instrui seu banco de dados sobre onde localizar todos os dados solicitados por uma aplicação, mesmo que cada estrutura armazene seus dados de uma maneira diferente. Quando sua aplicação solicita todos os atributos de um carro individual, o ORM instrui o banco de dados sobre como recuperar todos esses dados em várias tabelas.
Como os mapeamentos são abstraídos, se a estrutura do banco de dados mudar ou você migrar para um novo banco de dados, o ORM ainda poderá apontar para os dados corretos com o mínimo de atualizações.
Frameworks comuns de ORM
As ferramentas, ou frameworks, de ORM estão disponíveis para modelagem de dados em muitas das linguagens mais conhecidas de programação orientadas a objetos. Algumas das mais populares incluem:
- Hibernate para Java
- SQLAcademy para Python
- Framework de entidades para .NET/C#
Você pode usar um ORM com um banco de dados não relacional?
Não, os bancos de dados não relacionais armazenam dados em diferentes formatos e interagem com as aplicações de maneiras distintas. O tipo mais comum de banco de dados não relacional é um banco de dados de documentos. Os documentos também podem ter muitos atributos, semelhantes aos objetos, mas têm estruturas programáticas diferentes.
Alguns dos bancos de dados não relacionais mais conhecidos incluem o MongoDB e o NoSQL.
Qual é a diferença entre ORM e ORDBMS?
Um sistema de gerenciamento de banco de dados objeto-relacional (ORDBMS) é um tipo de banco de dados que usa elementos de frameworks relacionais e orientadas a objetos. Ele pode armazenar registros estruturados como objetos semelhantes aos que você pode codificar em uma linguagem OOP. Mas você também pode realizar consultas relacionais do tipo SQL nesses registros. Essa combinação de recursos permite que você armazene uma variedade maior de tipos de dados do que é possível em um banco de dados relacional padrão.
Onde um mapeamento objeto-relacional (ORM) é uma abstração de dados que opera no nível da aplicação, um ORDBMS fornece recursos orientados a objetos diretamente no nível do banco de dados.
Os ORMs são executados no código da aplicação e geram SQL em segundo plano. O ORDBMS gerencia o armazenamento de dados e a execução de consultas no nível do banco de dados, com suporte nativo para tipos de objetos avançados.
Qual é a diferença entre ORM e SQL?
SQL (Structured Query Language) é a linguagem padrão usada para interagir com bancos de dados relacionais. Ela permite criar e gerenciar esquemas de banco de dados, inserir e atualizar dados e consultar registros usando comandos declarativos.
O SQL proporciona controle direto e de baixo nível sobre o banco de dados. O ORM fornece uma interface mais abstrata e de alto nível, muitas vezes tornando o desenvolvimento mais rápido e o código mais sustentável.
O ORM é ideal para simplificar tarefas comuns do banco de dados e se alinhar com o código da aplicação, mas o SQL continua sendo essencial quando você precisa de ajuste de performance, consultas complexas ou controle total sobre o acesso aos dados.
Por que usar o ORM em vez de consultas SQL?
O SQL exige que você escreva comandos manualmente para interagir com o banco de dados, enquanto um ORM converte automaticamente seu código orientado a objetos em SQL em segundo plano.
Os ORMs ajudam a reduzir a quantidade de codificação necessária para desenvolver um programa orientado a objetos que precisa fazer muitas consultas ao banco de dados. Em vez de programar manualmente várias consultas ao banco de dados que precisarão ser mantidas, seus desenvolvedores programam como enviar solicitações para o ORM.
Trabalhar em uma linguagem de programação mais compreensível também facilita a leitura e a depuração do código.
Quais são os benefícios de usar o mapeamento objeto-relacional?
Os sistemas de ORM oferecem os benefícios a seguir.
Desenvolvimento mais rápido de aplicações
Os ORMs ajudam a recuperar dados complexos usando código compreensível na linguagem OOP, com a qual seus desenvolvedores estão mais familiarizados. Eles podem lidar com operações rotineiras de banco de dados, como criar, ler, atualizar e excluir registros (CRUD), para que seus desenvolvedores não precisem codificar essas operações repetidamente na aplicação.
Manutenção de aplicações mais simples
Ao abstrair as consultas do banco de dados por meio de um ORM, os desenvolvedores podem trabalhar em uma única linguagem, facilitando a compreensão e a manutenção do código.
Segurança aprimorada
Um ataque de injeção de SQL é uma tentativa maliciosa de acessar dados privados enviando consultas SQL por meio de formulários de usuário na aplicação. Os ORMs usam consultas parametrizadas, que primeiro enviam ao banco de dados uma consulta com valores de espaço reservado, não dados reais (p. ex., ? ou :param). Os dados reais são enviados separadamente. Isso garante que a entrada do usuário seja tratada como dados, não como código SQL executável. O uso de uma ferramenta ORM evita, portanto, o acesso não autorizado a dados por meio de injeção de SQL.
Performance aprimorada
Um ORM pode melhorar a performance do sistema ao permitir o armazenamento em cache transparente de objetos na camada da aplicação. Ele pode salvar os dados mais comumente recuperados mais perto da aplicação para um acesso mais rápido.
Quais são os desafios de usar mapeamentos objeto-relacional?
Os ORMs apresentam os desafios a seguir.
Incompatibilidades de impedância
Estruturas de dados complexas podem ser difíceis de mapear entre programas e bancos de dados orientados a objetos. As hierarquias que podem ser codificadas em OOP podem ser muito difíceis de serem representadas em um banco de dados, independentemente do quão sofisticado seja seu ORM.
Problemas de performance em maior complexidade
Consultar diretamente um banco de dados é mais eficiente em termos computacionais do que usar um ORM. Para consultas altamente complexas, pode ser mais eficiente usar código SQL em vez de uma ferramenta de mapeamento objeto-relacional (ORM).
Curva de aprendizado
Embora os ORMs ajudem você a não precisar aprender código SQL complexo, seus desenvolvedores ainda precisarão aprender a usar as ferramentas de ORM.
Quando você deve usar mapeamentos objeto-relacional?
Como uma ferramenta de ORM abstrai e automatiza as consultas ao banco de dados, seus desenvolvedores podem concentrar mais esforços na aplicação em vez de codificar consultas potencialmente complexas. Considere usar o ORM quando:
Sua aplicação tiver muitos objetos
Criar consultas manualmente para estruturas e interfaces de objetos complexos pode ser uma tarefa demorada e trabalhosa. Permitir que uma ferramenta de ORM mapeie objetos para dados armazenados em seu banco de dados pode tornar a recuperação precisa mais rápida e confiável.
Sua aplicação repete consultas de banco de dados semelhantes
Os ORMs podem automatizar facilmente muitas operações CRUD rotineiras (criar, ler, atualizar e excluir dados) para que você precise de menos código SQL.
A evolução do esquema está em andamento
Se seu modelo de dados ainda estiver evoluindo, um ORM pode ajudar a gerenciar as alterações no esquema do banco de dados com mais facilidade. Muitos ORMs incluem ferramentas de migração que permitem que você controle a versão e aplique as alterações de forma estruturada e reduza o risco de inconsistência entre os ambientes.
A portabilidade do banco de dados é importante
Um ORM é uma camada de abstração que separa propositadamente as operações invocadas pela sua aplicação de qualquer banco de dados específico. Embora não seja garantia de portabilidade total, essa abstração reduz o esforço envolvido na movimentação entre sistemas. Então, por exemplo, se a aplicação do seu carro precisar mudar para usar o PostgreSQL em vez de um banco de dados MySQL, você não precisará reescrever a aplicação toda. Você só precisará fazer pequenos ajustes em seu ORM se alguma das tabelas mudar.
Quando você não deve usar mapeamentos objeto-relacional?
Embora sejam ferramentas robustas, ainda existem circunstâncias em que os mapeamentos objeto-relacional não são a melhor solução.
Para interações simples com o banco de dados
Se você estiver criando uma aplicação que executa apenas operações CRUD diretas, o tempo e o esforço necessários para manter um ORM podem ser maiores do que simplesmente manter as consultas manualmente em sua aplicação.
Quando a computação de alta performance é essencial
Para muitas aplicações, o tempo de processamento adicional e os recursos adicionados por um ORM são irrelevantes. Mas para tarefas como analytics em tempo real, em que os milissegundos importam, isso pode não ser aceitável.
Quando você precisa usar esquemas desnormalizados
Em algumas situações, seus desenvolvedores podem querer manter dados redundantes em várias tabelas em seus serviços web de banco de dados, chamados de esquemas desnormalizados. Isso pode melhorar a performance quando uma aplicação precisa fazer consultas relacionais complexas que associam várias tabelas. O mapeamento dessas consultas em um ORM nem sempre é eficaz.
Como a AWS pode ajudar com seus requisitos de gerenciamento de dados?
A AWS fornece uma variedade de soluções de banco de dados em nuvem que tornam o gerenciamento de dados eficiente e econômico.
O Amazon Relational Database Service (Amazon RDS) é um serviço gerenciado que permite fácil configuração, operação e escalabilidade de um banco de dados relacional na nuvem. Ele fornece uma capacidade econômica e redimensionável enquanto gerencia tarefas demoradas de administração do banco de dados, permitindo que você se concentre em suas aplicações e negócios.
O Amazon Aurora é um serviço moderno de banco de dados relacional que oferece alta performance e alta disponibilidade em grande escala. Ele oferece edições de código totalmente aberto compatíveis com MySQL e PostgreSQL e uma variedade de ferramentas de desenvolvedor para criar aplicações sem servidor e orientadas por machine learning (ML).
O Amazon Redshift disponibiliza um data analytics moderno em grande escala, fornecendo uma performance de preço até três vezes melhor e um throughput sete vezes maior quando comparado com outros data warehouses em nuvem.
O Amazon DocumentDB (compatível com MongoDB) é um banco de dados de documentos corporativo rápido, escalável, altamente disponível e totalmente gerenciado que armazena dados em documentos semelhantes aos objetos JSON. Ele utiliza os drivers retornados de objetos nativos para a linguagem de programação usada pelo desenvolvedor, eliminando a necessidade de ferramentas de ORM.
Comece a usar bancos de dados na AWS criando uma conta gratuita hoje mesmo.