SlideShare uma empresa Scribd logo
1 de 25
BANCO DE DADOS
CONCEITOS E APLICAÇÃO DE BANCO DE DADOS EM APLICAÇÕES
WEB
SOBRE MIM
• Graduado em Engenharia Eletrônica e de Computação pela UFRJ
• Engenheiro Desenvolvedor Ruby On Rails desde 2016
OBJETIVOS
• Apresentar aos espectadores os conceitos básicos de banco de dados
• Explicar como bancos de dados são aplicados em aplicações web
• Mostrar como navegar em um banco de dados
• Expor possíveis problemas que uma aplicação pode ter devido a banco de
dados
O QUE É UM BANCO DE DADOS?
• É um conjunto de dados armazenados em tabelas
• Exemplo de tabela: Tabela de usuários em um e-commerce
Nome Idade e-mail Sexo
João 23 joao@exemplo.com M
Maria 19 maria@exemplo.com F
O QUE É UM BANCO DE DADOS?
• Eles podem ser relacionais ou não relacionais
• Bancos Relacionais: As tabelas podem ter relações entre si ou não
• Bancos Não Relacionais: As tabelas não podem ter relacionamentos entre si
costumam ser mais leves e mais rápidas que as relacionais
• São gerenciados através de um Sistema de Gestão de Banco de Dados (SGBD)
• Exemplo de tabelas em um banco de dados relacional:
id id_cliente Id_produto
1 1 2
2 2 1
id_cliente Nome email
1 José jose@ex.com
2 Joaquim Joaquim@ex.com
id_produto nome preco
1 Bacalhau 1200
2 Vinho do porto 1500
Clientes:Vendas:
Produtos:
• Exemplo de tabelas em um banco de dados não relacional:
id Nome_cliente email_cliente nome_produto preco_produto
1 Manoel manoel@ex.com Bacalhau 1200
2 Joaquim joaquim@ex.com Vinho 1500
Vendas:
SGBD
• É um conjunto de softwares responsáveis pelo gerenciamento de um banco
de dados e permitir uma comunicação facilitada com o banco
• O SGBD disponibiliza uma interface para que seus clientes possam incluir,
alterar ou consultar dados previamente armazenados
• As principais de operações de um SGBD são conhecidas como CRUD( Create,
Read, Update, Delete)
SGBD
• Os SGBDs se comunicam com o banco de dados através de uma ‘API’ interna
que aceita solicitações escritas em um console específico ou um software
feito para receber um script de solicitações ao banco
• Essas solicitações são feitas em linguagens específicas dependendo do banco
de dados utilizado
• Exemplos de linguagens: SQL e noSQL
SQL
• O nome é a abreviação de Structured Query Language ou Linguagem de
Consulta Estruturada
• Possui múltiplas variações dependendo do SGBD utilizado, cada um tendo
funções e tipos únicos de dados suportados
• Existe um padrão comum seguido pela grande maioria para permitir a fácil
migração e comunicação entre diferentes bancos
• O padrão comum é conhecido como SQL Ansi
EXEMPLOS DE OPERAÇÕES SQL
• SELECT * FROM usuarios where deleted_at IS NOT NULL
• DESC usuarios
• INSERT INTO usuarios (‘josé’, ‘josé@exemplo.com’)
COMO MODELAR UM BANCO DE DADOS
• Elaborando um diagrama entidade relacionamento
• Serve para prever as entidades ( tabelas) presente no banco com os seus
atributos e as possíveis relações entre eles
• Útil para mapear quais são as informações devem ser armazenadas na tabela
DIAGRAMA ENTIDADE RELACIONAMENTO(ERD)
Ex:
Tabela clientes
id: int
nome: varchar(25)
Email: varchar(25)
Idade: int
Tabela compras
id_usuário: int
Id_produto: int
Tabela produto
id: int
nome: varchar(25)
1:n 1:n
COMO UMA APLICAÇÃO SE COMUNICA COM UM BD?
• 2 formas:
• Fazendo solicitações diretamente ao banco de dados
• Fazendo uso de ORM:
• Object-Relational Mapping: É uma técnica de programação para fazer a conversão de dados
de tabelas no banco de dados em instâncias de objetos
• Muitas linguagens de programação orientada a objeto possuem algum método de
implementar ORM.
• Faz com que o desenvolvedor não precise utilizar uma linguagem específica para fazer a
comunicação entre a aplicação e o BD
PROBLEMAS QUE UMA APLICAÇÃO PODE TER DEVIDO
A BANCO
• Um banco com muitas informações e informações espalhadas de formas
complexas podem levar a buscas mais longas
• Buscas mais longas aumentam o tempo necessário para um sistema
responder a uma solicitação
• O aumento na demora para responder uma solicitação faz com que a conexão
ao banco de dados fique ocupada por mais tempo
• Uma aplicação respondendo a solicitações de usuário pode ser representado
como um atendente numa loja de roupas
CAUSAS
• Buscas pouco eficientes
• Fazem com que o sistema faça múltiplas buscas ao banco para pegar todas as
informações necessárias
• Ex em rails:
• Temos uma tabela de vendedores que possui uma relação 1:1 com uma tabela de endereços e
queremos uma contagem dos vendedores por cidade
• vendedores = {cariocas: Vendedor.joins(:addresses).where(addresses: { city: 'Rio de Janeiro'
}).size, paulistas: Vendedor.joins(:addresses).where(addresses: { city: 'São Paulo' }).size}
• Essa operação realiza 2 buscas ao banco de dados
SOLUÇÃO
• Para essa situação, vale criar uma busca mais complexa retornando todos os
resultados em uma única busca usando SQL puro
• Ex: resultado = ActiveRecord::Baseconnect.execute(“SELECT SUM(CASE WHEN
addresses.city='Rio de Janeiro' THEN 1 ELSE 0 END) AS cariocas, SUM(CASE WHEN
addresses.city='São Paulo' THEN 1 ELSE 0 END) AS paulistas FROM vendedores INNER
JOIN addresses on users.address_id = addresses.id”)
• Já essa operação faz apenas uma única busca no banco de dados
AGORA UM CÓDIGO DE EXEMPLO
• Link para o repositório: https://github.com/RafaelPrallon/exemplo_bd
• No app de exemplo temos as seguintes tabelas com os seus atributos e associações:
1:1
Tabela shops
id: int
codinome: string
Tabela addresses
id: int
rua: string
numero: string
complemento: string
bairro: string
cidade: string
shop_id: int
NO APLICATIVO DE EXEMPLO USAREMOS 2 MÉTODOS
PARA EXIBIR AS LOJAS COM AS SUAS CIDADES:
Método 1: Coletando apenas as lojas e usando o ActiveRecord para coletar informações sobre as associações:
No controller:
• def list_method_1
• @shops = Shop.all
• End
Na view:
• @shops.each do |shop|
• puts shop.codinome + " - " + shop.address.cidade
• end
Método 2: Utilizando um método do ActiveRecord que nos permite fazer a busca diretamente por SQL
No controller:
•def list_method_1
•@shops = Shop.special_list
•End
No modelo:
•def self.special_list
•find_by_sql('SELECT shops.id, shops.codinome, addresses.cidade FROM shops INNER JOIN addresses ON
addresses.shop_id = shops.id')
•end
Na view:
•@shops.each do |shop|
•puts shop.codinome + " - " + shop.address.cidade
•end
DIFERENÇA NO CARREGAMENTO DA PÁGINA
Método 1:
Log:
Processing by ShopsController#list_method_1 as HTML
Rendering shops/list_method_1.html.erb within layouts/application
[1m[36mShop Load (0.8ms)[0m [1m[34mSELECT "shops".* FROM "shops"[0m
↳ app/views/shops/list_method_1.html.erb:2
[1m[36mAddress Load (0.5ms)[0m [1m[34mSELECT "addresses".* FROM "addresses" WHERE
"addresses"."shop_id" = $1 LIMIT $2[0m [["shop_id", 2], ["LIMIT", 1]]
↳ app/views/shops/list_method_1.html.erb:3 ( esse trecho se repete para cada loja no banco)
Rendered shops/list_method_1.html.erb within layouts/application (125.0ms)
Completed 200 OK in 162ms (Views: 133.8ms | ActiveRecord: 27.3ms)
DIFERENÇA NO CARREGAMENTO DA PÁGINA
Método 2:
Log:
Processing by ShopsController#list_method_2 as HTML
[1m[36mShop Load (0.8ms)[0m [1m[34mSELECT shops.id, shops.codinome, addresses.cidade FROM shops
INNER JOIN addresses ON addresses.shop_id = shops.id[0m
↳ app/models/shop.rb:7
Rendering shops/list_method_2.html.erb within layouts/application
Rendered shops/list_method_2.html.erb within layouts/application (1.6ms)
Completed 200 OK in 30ms (Views: 21.8ms | ActiveRecord: 0.8ms)
VANTAGENS DE CADA MÉTODO
Método 1
• Maior simplicidade para a escrita do código
• Demanda o conhecimento de apenas uma
linguagem
• Caso você precise exibir mais uma informação
da tabela associada basta chamar o valor
• Recomendado para quando você não precisa
coletar informações de tabelas associadas
Método 2
• Permite você coletar apenas as informações
necessárias para exibição
• Por fazer apenas uma única busca no banco de
dados
• Recomendado para quando você precisar
coletar informações de tabelas associadas
DESVANTAGENS DE CADA MÉTODO
Método 1
• Pode levar o sistema a realizar múltiplas buscas
no banco de dados tornando a solicitação mais
demorada
• Por carregar tanto instancias da classe Shop
quanto da classe Address, demanda maior
espaço na memória
Método 2
• Requer familiaridade com uma segunda
linguagem
• Qualquer parâmetro adicional que precise ser
exibido exige alterações na busca
• Um má elaboração da busca pode fazer com que
a mesma acabe demandando mais meméria
CONTATOS
• https://github.com/RafaelPrallon
• https://www.linkedin.com/in/rafaelprallon
• rafaelprallon@gmail.com

Mais conteúdo relacionado

Semelhante a Apresentacao banco de dados

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Módulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoMódulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoLuis Ferreira
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Elaine Cecília Gatto
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Tiago Marchetti Dolphine
 
Introducao banco de dados
Introducao banco de dadosIntroducao banco de dados
Introducao banco de dadosvaniakenob
 
Descbanco
DescbancoDescbanco
Descbancoinetep
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsHeider Lopes
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASHeider Lopes
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX Brasil
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX BrasilUma Análise das Ofertas On-Line de Veículos dos Usuários do OLX Brasil
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX BrasilDiego Magalhães Menezes
 

Semelhante a Apresentacao banco de dados (20)

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
BDI_1_conceitos
BDI_1_conceitosBDI_1_conceitos
BDI_1_conceitos
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Apostila sqlserver65v1a
Apostila sqlserver65v1aApostila sqlserver65v1a
Apostila sqlserver65v1a
 
Módulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoMódulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informação
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
Banco de dados 1
Banco de dados 1Banco de dados 1
Banco de dados 1
 
Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018
 
Banco de dados aula 2
Banco de dados  aula 2Banco de dados  aula 2
Banco de dados aula 2
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Aula 01
Aula 01Aula 01
Aula 01
 
Introducao banco de dados
Introducao banco de dadosIntroducao banco de dados
Introducao banco de dados
 
Descbanco
DescbancoDescbanco
Descbanco
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIs
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX Brasil
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX BrasilUma Análise das Ofertas On-Line de Veículos dos Usuários do OLX Brasil
Uma Análise das Ofertas On-Line de Veículos dos Usuários do OLX Brasil
 

Apresentacao banco de dados

  • 1. BANCO DE DADOS CONCEITOS E APLICAÇÃO DE BANCO DE DADOS EM APLICAÇÕES WEB
  • 2. SOBRE MIM • Graduado em Engenharia Eletrônica e de Computação pela UFRJ • Engenheiro Desenvolvedor Ruby On Rails desde 2016
  • 3. OBJETIVOS • Apresentar aos espectadores os conceitos básicos de banco de dados • Explicar como bancos de dados são aplicados em aplicações web • Mostrar como navegar em um banco de dados • Expor possíveis problemas que uma aplicação pode ter devido a banco de dados
  • 4. O QUE É UM BANCO DE DADOS? • É um conjunto de dados armazenados em tabelas • Exemplo de tabela: Tabela de usuários em um e-commerce Nome Idade e-mail Sexo João 23 joao@exemplo.com M Maria 19 maria@exemplo.com F
  • 5. O QUE É UM BANCO DE DADOS? • Eles podem ser relacionais ou não relacionais • Bancos Relacionais: As tabelas podem ter relações entre si ou não • Bancos Não Relacionais: As tabelas não podem ter relacionamentos entre si costumam ser mais leves e mais rápidas que as relacionais • São gerenciados através de um Sistema de Gestão de Banco de Dados (SGBD)
  • 6. • Exemplo de tabelas em um banco de dados relacional: id id_cliente Id_produto 1 1 2 2 2 1 id_cliente Nome email 1 José jose@ex.com 2 Joaquim Joaquim@ex.com id_produto nome preco 1 Bacalhau 1200 2 Vinho do porto 1500 Clientes:Vendas: Produtos:
  • 7. • Exemplo de tabelas em um banco de dados não relacional: id Nome_cliente email_cliente nome_produto preco_produto 1 Manoel manoel@ex.com Bacalhau 1200 2 Joaquim joaquim@ex.com Vinho 1500 Vendas:
  • 8. SGBD • É um conjunto de softwares responsáveis pelo gerenciamento de um banco de dados e permitir uma comunicação facilitada com o banco • O SGBD disponibiliza uma interface para que seus clientes possam incluir, alterar ou consultar dados previamente armazenados • As principais de operações de um SGBD são conhecidas como CRUD( Create, Read, Update, Delete)
  • 9. SGBD • Os SGBDs se comunicam com o banco de dados através de uma ‘API’ interna que aceita solicitações escritas em um console específico ou um software feito para receber um script de solicitações ao banco • Essas solicitações são feitas em linguagens específicas dependendo do banco de dados utilizado • Exemplos de linguagens: SQL e noSQL
  • 10. SQL • O nome é a abreviação de Structured Query Language ou Linguagem de Consulta Estruturada • Possui múltiplas variações dependendo do SGBD utilizado, cada um tendo funções e tipos únicos de dados suportados • Existe um padrão comum seguido pela grande maioria para permitir a fácil migração e comunicação entre diferentes bancos • O padrão comum é conhecido como SQL Ansi
  • 11. EXEMPLOS DE OPERAÇÕES SQL • SELECT * FROM usuarios where deleted_at IS NOT NULL • DESC usuarios • INSERT INTO usuarios (‘josé’, ‘josé@exemplo.com’)
  • 12. COMO MODELAR UM BANCO DE DADOS • Elaborando um diagrama entidade relacionamento • Serve para prever as entidades ( tabelas) presente no banco com os seus atributos e as possíveis relações entre eles • Útil para mapear quais são as informações devem ser armazenadas na tabela
  • 13. DIAGRAMA ENTIDADE RELACIONAMENTO(ERD) Ex: Tabela clientes id: int nome: varchar(25) Email: varchar(25) Idade: int Tabela compras id_usuário: int Id_produto: int Tabela produto id: int nome: varchar(25) 1:n 1:n
  • 14. COMO UMA APLICAÇÃO SE COMUNICA COM UM BD? • 2 formas: • Fazendo solicitações diretamente ao banco de dados • Fazendo uso de ORM: • Object-Relational Mapping: É uma técnica de programação para fazer a conversão de dados de tabelas no banco de dados em instâncias de objetos • Muitas linguagens de programação orientada a objeto possuem algum método de implementar ORM. • Faz com que o desenvolvedor não precise utilizar uma linguagem específica para fazer a comunicação entre a aplicação e o BD
  • 15. PROBLEMAS QUE UMA APLICAÇÃO PODE TER DEVIDO A BANCO • Um banco com muitas informações e informações espalhadas de formas complexas podem levar a buscas mais longas • Buscas mais longas aumentam o tempo necessário para um sistema responder a uma solicitação • O aumento na demora para responder uma solicitação faz com que a conexão ao banco de dados fique ocupada por mais tempo • Uma aplicação respondendo a solicitações de usuário pode ser representado como um atendente numa loja de roupas
  • 16. CAUSAS • Buscas pouco eficientes • Fazem com que o sistema faça múltiplas buscas ao banco para pegar todas as informações necessárias • Ex em rails: • Temos uma tabela de vendedores que possui uma relação 1:1 com uma tabela de endereços e queremos uma contagem dos vendedores por cidade • vendedores = {cariocas: Vendedor.joins(:addresses).where(addresses: { city: 'Rio de Janeiro' }).size, paulistas: Vendedor.joins(:addresses).where(addresses: { city: 'São Paulo' }).size} • Essa operação realiza 2 buscas ao banco de dados
  • 17. SOLUÇÃO • Para essa situação, vale criar uma busca mais complexa retornando todos os resultados em uma única busca usando SQL puro • Ex: resultado = ActiveRecord::Baseconnect.execute(“SELECT SUM(CASE WHEN addresses.city='Rio de Janeiro' THEN 1 ELSE 0 END) AS cariocas, SUM(CASE WHEN addresses.city='São Paulo' THEN 1 ELSE 0 END) AS paulistas FROM vendedores INNER JOIN addresses on users.address_id = addresses.id”) • Já essa operação faz apenas uma única busca no banco de dados
  • 18. AGORA UM CÓDIGO DE EXEMPLO • Link para o repositório: https://github.com/RafaelPrallon/exemplo_bd • No app de exemplo temos as seguintes tabelas com os seus atributos e associações: 1:1 Tabela shops id: int codinome: string Tabela addresses id: int rua: string numero: string complemento: string bairro: string cidade: string shop_id: int
  • 19. NO APLICATIVO DE EXEMPLO USAREMOS 2 MÉTODOS PARA EXIBIR AS LOJAS COM AS SUAS CIDADES: Método 1: Coletando apenas as lojas e usando o ActiveRecord para coletar informações sobre as associações: No controller: • def list_method_1 • @shops = Shop.all • End Na view: • @shops.each do |shop| • puts shop.codinome + " - " + shop.address.cidade • end
  • 20. Método 2: Utilizando um método do ActiveRecord que nos permite fazer a busca diretamente por SQL No controller: •def list_method_1 •@shops = Shop.special_list •End No modelo: •def self.special_list •find_by_sql('SELECT shops.id, shops.codinome, addresses.cidade FROM shops INNER JOIN addresses ON addresses.shop_id = shops.id') •end Na view: •@shops.each do |shop| •puts shop.codinome + " - " + shop.address.cidade •end
  • 21. DIFERENÇA NO CARREGAMENTO DA PÁGINA Método 1: Log: Processing by ShopsController#list_method_1 as HTML Rendering shops/list_method_1.html.erb within layouts/application [1m[36mShop Load (0.8ms)[0m [1m[34mSELECT "shops".* FROM "shops"[0m ↳ app/views/shops/list_method_1.html.erb:2 [1m[36mAddress Load (0.5ms)[0m [1m[34mSELECT "addresses".* FROM "addresses" WHERE "addresses"."shop_id" = $1 LIMIT $2[0m [["shop_id", 2], ["LIMIT", 1]] ↳ app/views/shops/list_method_1.html.erb:3 ( esse trecho se repete para cada loja no banco) Rendered shops/list_method_1.html.erb within layouts/application (125.0ms) Completed 200 OK in 162ms (Views: 133.8ms | ActiveRecord: 27.3ms)
  • 22. DIFERENÇA NO CARREGAMENTO DA PÁGINA Método 2: Log: Processing by ShopsController#list_method_2 as HTML [1m[36mShop Load (0.8ms)[0m [1m[34mSELECT shops.id, shops.codinome, addresses.cidade FROM shops INNER JOIN addresses ON addresses.shop_id = shops.id[0m ↳ app/models/shop.rb:7 Rendering shops/list_method_2.html.erb within layouts/application Rendered shops/list_method_2.html.erb within layouts/application (1.6ms) Completed 200 OK in 30ms (Views: 21.8ms | ActiveRecord: 0.8ms)
  • 23. VANTAGENS DE CADA MÉTODO Método 1 • Maior simplicidade para a escrita do código • Demanda o conhecimento de apenas uma linguagem • Caso você precise exibir mais uma informação da tabela associada basta chamar o valor • Recomendado para quando você não precisa coletar informações de tabelas associadas Método 2 • Permite você coletar apenas as informações necessárias para exibição • Por fazer apenas uma única busca no banco de dados • Recomendado para quando você precisar coletar informações de tabelas associadas
  • 24. DESVANTAGENS DE CADA MÉTODO Método 1 • Pode levar o sistema a realizar múltiplas buscas no banco de dados tornando a solicitação mais demorada • Por carregar tanto instancias da classe Shop quanto da classe Address, demanda maior espaço na memória Método 2 • Requer familiaridade com uma segunda linguagem • Qualquer parâmetro adicional que precise ser exibido exige alterações na busca • Um má elaboração da busca pode fazer com que a mesma acabe demandando mais meméria

Notas do Editor

  1. Função 1: Seleciona todos os atributos de entradas da tabela chamada usuários onde o atributo deleted_at não é nulo Função 2: Descreve a tabela usuarios Função 3: Insere na tabela usuários uma entrada com os atributos presentes dentro do parênteses em ordem de exposição