<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Bancos de dados - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Bancos de dados - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 28 May 2026 16:39:31 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/bancos-de-dados/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Notação pé de galinha (ERD) – símbolos de relacionamento e como ler diagramas ]]>
                </title>
                <description>
                    <![CDATA[ Diagramas de entidade-relacionamento (ERD - do inglês, Entity-Relationship Diagram) são como mapas que mostram a relação entre diferentes "coisas" dentro de um sistema. Pense em um banco de dados, por exemplo. Ele é como um armário gigante com várias gavetas (tabelas) para guardar informações sobre clientes, produtos, pedidos etc. O ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/notacao-pe-de-galinha-erd-simbolos-de-relacionamento-e-como-ler-diagramas/</link>
                <guid isPermaLink="false">668aaa3523266d03fc8b8463</guid>
                
                    <category>
                        <![CDATA[ Bancos de dados ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kris Lagerström ]]>
                </dc:creator>
                <pubDate>Mon, 22 Jul 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/hanna-morris-_XXNjSziZuA-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/crows-foot-notation-relationship-symbols-and-how-to-read-diagrams/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Crow's Foot Notation – Relationship Symbols And How to Read Diagrams</a>
      </p><p>Diagramas de entidade-relacionamento (ERD - do inglês, <em>Entity-Relationship Diagram</em>) são como mapas que mostram a relação entre diferentes "coisas" dentro de um sistema.</p><p>Pense em um banco de dados, por exemplo. Ele é como um armário gigante com várias gavetas (tabelas) para guardar informações sobre clientes, produtos, pedidos etc. O ERD serve para visualizarmos como essas gavetas se conectam.</p><p>Para entender a relação entre as entidades em um ERD, usamos símbolos e notações. Uma das mais populares é a <strong>notação pé de galinha </strong>(em inglês, <em>crow's foot</em>), que vamos desvendar neste tutorial.</p><p>Ao final, você será capaz de:</p><ul><li>Entender o que são entidades e atributos em um ERD.</li><li>Decifrar os símbolos da notação pé de galinha.</li><li>Ler e interpretar diagramas como um profissional.</li><li>Criar seus próprios ERDs!</li></ul><p>Vamos usar os termos "notação", "indicadores" e "símbolos" como sinônimos, ok?</p><h2 id="o-que-uma-entidade-em-um-erd">O que é uma entidade em um ERD?</h2><p>Entidade é cada "coisa" importante no nosso banco de dados, como clientes, produtos ou pedidos.</p><p><strong>Dica:</strong> use nomes no singular (cliente, produto) e não no plural (clientes, produtos).</p><p>Olha um exemplo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/entity.png" class="kg-image" alt="entity" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/entity.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/entity.png 696w" width="696" height="580" loading="lazy"></figure><p>Aí, temos a entidade "Cliente". É nela que guardaremos as informações sobre cada cliente cadastrado.</p><h2 id="o-que-s-o-os-atributos">O que são os atributos?</h2><p>Atributos são as características de uma entidade, como nome, endereço e telefone do cliente.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/attributes-2.png" class="kg-image" alt="attributes-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/attributes-2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/attributes-2.png 696w" width="696" height="580" loading="lazy"></figure><p>Nesse exemplo, a entidade "Cliente" tem 3 atributos: nome de usuário, idade e e-mail.</p><h2 id="relacionamento-entre-entidades-conectando-as-pe-as-do-quebra-cabe-as">Relacionamento entre Entidades: conectando as peças do quebra-cabeças</h2><p>Na maioria dos casos, um banco de dados tem várias entidades interligadas. Para mostrar essas relações, usamos linhas com símbolos que indicam o tipo de relação entre elas.</p><h3 id="s-mbolos-da-nota-o-p-de-galinha-e-seus-significados">Símbolos da notação pé de galinha e seus significados</h3><p>Antes de mostrar os símbolos, precisamos entender o conceito de <strong>cardinalidade</strong>.</p><p>A cardinalidade define quantos "elementos" de uma entidade se relacionam com quantos "elementos" de outra entidade. Parece complicado, mas você vai entender rapidinho!</p><h4 id="zero">Zero</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/zero-crow.png" class="kg-image" alt="zero-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/zero-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/zero-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/zero-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/zero-crow.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><p>A bolinha na ponta da linha indica "zero" ou "nenhum".</p><h4 id="um">Um</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-crow.png" class="kg-image" alt="one-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/one-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/one-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/one-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-crow.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><p>A perninha reta indica "um" e somente um.</p><h4 id="muitos">Muitos</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/crows-crows-foot.png" class="kg-image" alt="crows-crows-foot" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/crows-crows-foot.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/crows-crows-foot.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/crows-crows-foot.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/crows-crows-foot.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><p>O "pé de galinha" indica "muitos".</p><p>Combinando esses símbolos básicos, podemos representar diferentes tipos de relações:</p><h4 id="zero-ou-muitos">Zero ou Muitos</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/zero-and-many-crow.png" class="kg-image" alt="zero-and-many-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/zero-and-many-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/zero-and-many-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/zero-and-many-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/zero-and-many-crow.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><h4 id="um-ou-muitos">Um ou Muitos</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-and-many-crow.png" class="kg-image" alt="one-and-many-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/one-and-many-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/one-and-many-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/one-and-many-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-and-many-crow.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><h4 id="um-e-somente-um">Um e Somente Um</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-and-one-crow.png" class="kg-image" alt="one-and-one-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/one-and-one-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/one-and-one-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/one-and-one-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/one-and-one-crow.png 1607w" sizes="(min-width: 720px) 720px" width="1607" height="209" loading="lazy"></figure><h2 id="hora-da-pr-tica-exemplos-de-erd-com-nota-o-p-de-galinha">Hora da prática: exemplos de ERD com notação pé de galinha</h2><p>Vamos usar a notação para modelar um banco de dados simples.</p><h3 id="exemplo-n-1-professores-e-cursos">Exemplo nº 1: professores e cursos</h3><h5 id="passo-1-entidades">Passo 1: entidades</h5><p>Imagine um sistema de cursos <em>on-line</em> com duas entidades: "Professor" e "Curso".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow.png" class="kg-image" alt="teacher-course-crow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/teacher-course-crow.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/teacher-course-crow.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/teacher-course-crow.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="780" loading="lazy"></figure><h5 id="passo-2-rela-o-professor-curso">Passo 2: relação professor-curso</h5><p>Regra: cada professor só pode ministrar <strong>um</strong> curso por vez.</p><p>Usamos o indicador "um e somente um" do lado do "Curso".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow2.png" class="kg-image" alt="teacher-course-crow2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/teacher-course-crow2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/teacher-course-crow2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/teacher-course-crow2.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow2.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="780" loading="lazy"></figure><p>A cardinalidade do lado do "Professor" é <strong>1:1</strong> (mínimo 1, máximo 1).</p><h5 id="passo-3-rela-o-curso-professor">Passo 3: relação curso-professor</h5><p>Regra: cada curso pode ter <strong>um ou vários</strong> professores.</p><p>Usamos o indicador "um ou muitos" do lado do "Professor".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow3.png" class="kg-image" alt="teacher-course-crow3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/teacher-course-crow3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/teacher-course-crow3.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/teacher-course-crow3.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/teacher-course-crow3.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="780" loading="lazy"></figure><p>A cardinalidade do lado do "Curso" é <strong>1:N</strong> (mínimo 1, máximo N, ou seja, vários).</p><h3 id="exemplo-n-2-clientes-e-pizzas">Exemplo nº 2: clientes e pizzas</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/crows-foot-example.png" class="kg-image" alt="crows-foot-example" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/crows-foot-example.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/crows-foot-example.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/07/crows-foot-example.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/crows-foot-example.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="780" loading="lazy"></figure><p>Aqui, uma pizza pode ser pedida por <strong>zero ou muitos</strong> clientes (quem nunca dividiu uma pizza com a galera?).</p><p>Da mesma maneira, um cliente pode pedir <strong>zero ou muitas</strong> pizzas (a fome bate, certo?).</p><p>A cardinalidade em ambos os lados é <strong>0:N</strong> (mínimo 0, máximo N).</p><h2 id="conclus-o">Conclusão</h2><p>A notação pé de galinha facilita a vida na hora de modelar bancos de dados. Com ela, você consegue visualizar as entidades e seus relacionamentos de maneira clara e organizada.</p><p>Os exemplos que vimos são simples, mas a lógica se aplica a sistemas complexos. Agora, é só praticar e se aventurar no mundo da modelagem de dados!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Bancos de dados ACID – atomicidade, consistência, isolamento e durabilidade explicados ]]>
                </title>
                <description>
                    <![CDATA[ ACID é a sigla para Atomicidade, Consistência, Isolamento e Durabilidade. Essas são quatro propriedades essenciais que a maioria dos sistemas de gerenciamento de bancos de dados (DBMS, do inglês DataBase Management Systems) oferece como garantia ao lidar com transações. A maioria dos DBMS populares, como MySQL [https://dev.mysql.com/doc/refman/9.0/en/mysql-acid.html], PostgresSQL [https://www.postgresql.org/about/] e ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/</link>
                <guid isPermaLink="false">6686464e23266d03fc8b81d2</guid>
                
                    <category>
                        <![CDATA[ Bancos de dados ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kris Lagerström ]]>
                </dc:creator>
                <pubDate>Mon, 15 Jul 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/cover-fcc.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/acid-databases-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">ACID Databases –&nbsp;Atomicity, Consistency, Isolation &amp; Durability Explained</a>
      </p><p>ACID é a sigla para Atomicidade, Consistência, Isolamento e Durabilidade. Essas são quatro propriedades essenciais que a maioria dos sistemas de gerenciamento de bancos de dados (DBMS, do inglês <em>DataBase Management Systems</em>) oferece como garantia ao lidar com transações.</p><p>A maioria dos DBMS populares, como <a href="https://dev.mysql.com/doc/refman/9.0/en/mysql-acid.html">MySQL</a>, <a href="https://www.postgresql.org/about/">PostgresSQL</a> e <a href="https://docs.oracle.com/cd/F51125_01/docs.85/SDS%20PI/acid-compliant-transactions.html#GUID-ECB79D66-46DE-4F48-93DC-8677E7BB44EF">Oracle</a>, possui garantias ACID prontas para uso. Outros têm garantias ACID parciais, como <a href="https://www.oreilly.com/library/view/redis-cookbook/9781449311353/ch01.html#:~:text=Redis%20provides%20partial%20ACID%20compliance,also%20be%20a%20key%20factor.">Redis</a>, DynamoDB e Cassandra. A tendência, no entanto, parece ser que mais e mais DBMS ofereçam conformidade com ACID.</p><p>É importante observar que, embora muitos DBMS possam afirmar ser compatíveis com ACID, a implementação dessa conformidade pode variar.</p><p>Assim, por exemplo, se o isolamento é uma propriedade fundamental de que você precisa para uma aplicação que está criando, é necessário entender como exatamente o DBMS escolhido implementa o isolamento.</p><p>Este artigo explicará o que são transações e analisará em detalhes o que significam atomicidade, consistência, isolamento e durabilidade, usando analogias e exemplos do mundo real.</p><h3 id="-ndice-">Índice:</h3><ol><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#o-que-s-o-transa-es">O que são transações?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#o-que-significa-atomicidade">O que significa atomicidade?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#o-que-significa-consist-ncia">O que significa consistência?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#o-que-significa-isolamento">O que significa isolamento?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#o-que-significa-durabilidade">O que significa durabilidade?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/bancos-de-dados-acid-atomicidade-consistencia-isolamento-e-durabilidade-explicados/#juntando-tudo">Juntando tudo</a></li></ol><h2 id="o-que-s-o-transa-es">O que são transações?</h2><p>Muitas coisas podem dar errado ao usar um banco de dados:</p><ul><li>o hardware ou software do banco de dados pode falhar</li><li>a aplicação que chama o banco de dados pode falhar no meio da operação</li><li>a rede pode ficar congestionada com mais tráfego do que ela pode lidar (tornando-a inoperante)</li><li>vários <em>clients</em> podem fazer gravações ao mesmo tempo que sobrescrevem as alterações uns dos outros</li><li>os <em>clients</em> podem ler dados fantasmas, que não deveriam estar no banco de dados</li></ul><p>Várias outras coisas podem dar errado - esta não é, de modo algum, uma lista completa.</p><p>Como algo pode dar errado de mais maneiras do que podemos prever, tentar evitar todas as falhas possíveis pode se tornar desnecessariamente caro e complicado. Em vez disso, é melhor projetar um sistema que possa continuar a operar apesar de uma falha. As transações nos permitem fazer isso.</p><p>As transações têm um único propósito: garantir que um sistema seja <strong><a href="https://pt.wikipedia.org/wiki/Toler%C3%A2ncia_a_falhas">tolerante a falhas</a>.</strong> Se ocorrer uma falha em um sistema, o sistema pode continuar a operar sem uma catástrofe completa? Dito de outro modo, o sistema consegue tolerar falhas? Uma resposta "sim" a essa pergunta significa que tal sistema é tolerante a falhas.</p><p>Então, o que é exatamente uma transação?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/718d52b8-c016-4746-a1eb-73b6aac6d5fa_636x960.png" class="kg-image" alt="718d52b8-c016-4746-a1eb-73b6aac6d5fa_636x960" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/718d52b8-c016-4746-a1eb-73b6aac6d5fa_636x960.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/718d52b8-c016-4746-a1eb-73b6aac6d5fa_636x960.png 636w" width="636" height="960" loading="lazy"><figcaption>Não, não estamos falando DESTE tipo de transação</figcaption></figure><p>Uma transação é uma <a href="https://pt.wikipedia.org/wiki/Abstra%C3%A7%C3%A3o">abstração</a>. É um conjunto de operações (leituras e gravações) que são tratadas como uma única operação lógica.</p><p>Imagine que você deseja comprar um único livro em uma loja on-line, como a amazon.com.br, por exemplo. As etapas abaixo mostram uma visão simplificada do que precisa acontecer:</p><ol><li>Primeiro, você seleciona o livro, adicionando o item à sua cesta.</li><li>A quantidade em estoque do livro é verificada para garantir que seja válida (ou seja, o valor do estoque para o título que você está comprando precisa ser maior que zero).</li><li>Você clica em "comprar", o que atualiza o estoque da Amazon para o livro e o diminui em 1 (já que você está comprando um único livro).</li><li>Além disso, o saldo da sua conta bancária é atualizado para contabilizar o custo do livro.</li></ol><p>Uma transação garante que todas as operações relacionadas à compra sejam tratadas como uma única operação. Se qualquer parte da transação falhar, toda a transação é revertida, deixando o banco de dados em um estado como se o cliente nunca tivesse tentado a compra, mantendo assim a integridade dos dados.</p><p>A transação é confirmada quando todas as operações dentro da transação são concluídas com sucesso e seus resultados são registrados permanentemente. Essa permanência é normalmente alcançada gravando as alterações no armazenamento do banco de dados, que pode ser em disco para bancos de dados tradicionais ou na memória para bancos de dados na memória, como o Redis.</p><p>Ao tratar todas essas diferentes operações como uma única operação lógica, o banco de dados pode oferecer algumas garantias sobre como ele pode ser tolerante a falhas. Essas garantias são <strong>atomicidade</strong>, <strong>consistência</strong>, <strong>isolamento</strong> e <strong>durabilidade</strong>.</p><h2 id="o-que-significa-atomicidade">O que significa atomicidade?</h2><p>Atomicidade significa simplesmente que todas as consultas em uma transação devem ser bem-sucedidas para que a transação seja bem-sucedida. Se uma consulta falhar, toda a transação falhará.</p><h3 id="um-restaurante-at-mico">Um restaurante atômico</h3><p>Imagine usar uma máquina de autoatendimento em um restaurante de fast-food. A transação, neste caso, é pedir comida e consiste em duas operações separadas:</p><ol><li>Selecionar comida</li><li>Fazer o pagamento</li></ol><p>Ambas devem ser bem-sucedidas para que a transação seja bem-sucedida. Se alguma falhar, a transação falhará.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/b52901d6-a9e0-43a7-a198-d56ca2a82219_544x886.png" class="kg-image" alt="b52901d6-a9e0-43a7-a198-d56ca2a82219_544x886" width="544" height="886" loading="lazy"><figcaption>Cliente fazendo um pedido em um restaurante "atômico"</figcaption></figure><p>Você seleciona seu hambúrguer, batata frita e uma bebida no menu da tela sensível ao toque. A máquina solicita que você pague e, somente depois de seu pagamento ser processado com sucesso, ela enviará seu pedido para a cozinha. Momentos depois, seu pedido completo está pronto e você o retira no balcão.</p><p>Essa é uma operação atômica: a transação (pedir comida) é totalmente concluída (se você selecionar seu item de comida e fizer um pagamento) ou não é concluída.</p><p>Se qualquer parte da transação falhar, toda a transação falhará. Se o seu pagamento falhar, a máquina não processará nenhuma parte do pedido, então a transação falhará. Se você fizer um pagamento sem selecionar um item de comida, a transação também falhará, pois não há nada para a cozinha preparar.</p><h3 id="um-restaurante-n-o-at-mico">Um restaurante não atômico</h3><p>Agora, considere a alternativa – um restaurante tradicional com serviço de mesa onde você pede vários pratos. À medida que cada prato é preparado, ele é trazido à sua mesa.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/045c9ec7-dbb9-45b7-ad4d-357f7b7cc37c_888x1026.png" class="kg-image" alt="045c9ec7-dbb9-45b7-ad4d-357f7b7cc37c_888x1026" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/045c9ec7-dbb9-45b7-ad4d-357f7b7cc37c_888x1026.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/045c9ec7-dbb9-45b7-ad4d-357f7b7cc37c_888x1026.png 888w" sizes="(min-width: 720px) 720px" width="888" height="1026" loading="lazy"><figcaption>Cliente fazendo um pedido em um restaurante "não atômico"</figcaption></figure><p>Novamente, a transação é pedir comida e consiste em duas operações separadas:</p><ol><li>Selecionar comida</li><li>Fazer o pagamento</li></ol><p>Nesse restaurante não atômico, a falha em fazer um pagamento não impede que a transação seja concluída, pois você paga depois de terminar sua refeição. Falhas parciais não fazem com que uma transação falhe.</p><p>Isso cria um risco para o restaurante. Os clientes que optam por comer e sair correndo podem pedir comida à vontade e simplesmente ir embora sem pagar, causando prejuízo financeiro para o restaurante.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/4136ceee-82b9-4cf0-b0de-5a0af3f1aa71_2218x1278.jpg" class="kg-image" alt="4136ceee-82b9-4cf0-b0de-5a0af3f1aa71_2218x1278" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/4136ceee-82b9-4cf0-b0de-5a0af3f1aa71_2218x1278.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/4136ceee-82b9-4cf0-b0de-5a0af3f1aa71_2218x1278.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/4136ceee-82b9-4cf0-b0de-5a0af3f1aa71_2218x1278.jpg 1456w" sizes="(min-width: 720px) 720px" width="1456" height="839" loading="lazy"><figcaption>Restaurantes não atômicos correm o risco de clientes darem o golpe da "saidinha"</figcaption></figure><h3 id="transa-es-at-micas">Transações atômicas</h3><p>Se várias consultas SQL são agrupadas em uma transação, a atomicidade é uma garantia de que, se alguma das consultas falhar por qualquer motivo (problemas de <em>hardware</em>, da aplicação ou da rede), a transação será interrompida e o banco de dados retornará ao seu estado anterior, como se nada tivesse acontecido.</p><p>Sem atomicidade, se ocorrer uma falha enquanto algumas consultas estão sendo executadas, é difícil saber quais consultas foram confirmadas (ou seja, concluídas) e quais não foram. Executar as consultas novamente após uma falha pode agravar o problema, pois você corre o risco de introduzir dados incorretos no banco de dados ao executar novamente consultas que foram bem-sucedidas anteriormente.</p><p>As transações atômicas evitam essa incerteza, pois você sabe que, se a transação anterior falhou, ela falhou em sua totalidade e você pode simplesmente tentar novamente sem se preocupar em introduzir dados inconsistentes.</p><h2 id="o-que-significa-consist-ncia">O que significa consistência?</h2><p>Consistência pode significar coisas diferentes em engenharia de nuvem/software, dependendo do contexto. No caso de ACID, o "C" provavelmente foi adicionado para fazer a abreviação funcionar.</p><p>Consistência no contexto de ACID significa <em>consistência nos dados</em>, que é definida pelo criador do banco de dados. O termo técnico para consistência de dados é <strong>integridade referencial</strong>. A integridade referencial é um método para garantir que os relacionamentos entre as tabelas permaneçam consistentes. Geralmente, é aplicada por meio do uso de chaves estrangeiras.</p><p>Para entender a integridade referencial, considere o seguinte.</p><p>Imagine um sistema de biblioteca com dois tipos de cartões: um cartão de livro e um cartão de usuário.</p><ul><li>O cartão de livro lista todos os livros disponíveis na biblioteca.</li><li>O cartão de usuário rastreia quais livros estão emprestados para quais membros.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/82ea7c95-f55f-4cb6-86ea-47c11399b5c7_2324x1316.jpg" class="kg-image" alt="82ea7c95-f55f-4cb6-86ea-47c11399b5c7_2324x1316" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/82ea7c95-f55f-4cb6-86ea-47c11399b5c7_2324x1316.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/82ea7c95-f55f-4cb6-86ea-47c11399b5c7_2324x1316.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/82ea7c95-f55f-4cb6-86ea-47c11399b5c7_2324x1316.jpg 1456w" sizes="(min-width: 720px) 720px" width="1456" height="824" loading="lazy"><figcaption>Um cartão de livro e um cartão de usuário para uma biblioteca</figcaption></figure><p>A regra da biblioteca é que um livro só pode ser listado no cartão de um usuário se ele existir no cartão de livro. Isso é integridade referencial. Se alguém tentar listar um livro no cartão de um usuário que não está no cartão de livro (ou seja, um livro que não existe na biblioteca), o sistema não permitirá.</p><p>Embora a atomicidade, o isolamento e a durabilidade sejam propriedades intrínsecas ao próprio banco de dados, a consistência dos dados, ou integridade referencial, não é uma propriedade intrínseca ao banco de dados.</p><p>A consistência é definida pelo criador do banco de dados. A aplicação que chama o banco de dados depende das propriedades de atomicidade e isolamento do banco de dados para manter essa consistência.</p><h2 id="o-que-significa-isolamento">O que significa isolamento?</h2><p>Isolamento é uma garantia de que transações executadas simultaneamente não devam interferir umas nas outras. Concorrência aqui se refere a duas ou mais transações tentando modificar ou ler os mesmos registros do banco de dados ao mesmo tempo.</p><p>Existem três níveis de isolamento de transação. Vou apenas explicar os dois principais abaixo, organizados do menos rígido para o mais rígido.</p><h3 id="leitura-confirmada-read-committed-">Leitura confirmada (<em>read committed</em>)</h3><p>Isso oferece duas garantias. Impede leituras sujas e gravações sujas.</p><p><strong>Sem leituras sujas (<em>no dirty reads</em>)</strong>: ler dados de outra transação que ainda não foi confirmada é chamado de "leitura suja". Com o nível de isolamento de leitura confirmada, você verá apenas os dados que foram confirmados por outra transação.</p><p><strong>Sem gravações sujas (<em>no dirty writes</em>)</strong>: sobrescrever dados que já foram gravados por outra transação, mas que ainda não foram confirmados, é chamado de "gravação suja".</p><p>Para entender como funciona o isolamento de leitura confirmada, considere o seguinte exemplo.</p><p>Imagine um restaurante de fast-food com apenas um último hambúrguer especial disponível e dois clientes famintos, Marie e Marko, tentando comprá-lo simultaneamente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/ec0fd185-63c9-4821-bcac-b0140f2f4183_2360x1322.jpg" class="kg-image" alt="ec0fd185-63c9-4821-bcac-b0140f2f4183_2360x1322" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/ec0fd185-63c9-4821-bcac-b0140f2f4183_2360x1322.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/07/ec0fd185-63c9-4821-bcac-b0140f2f4183_2360x1322.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/ec0fd185-63c9-4821-bcac-b0140f2f4183_2360x1322.jpg 1456w" sizes="(min-width: 720px) 720px" width="1456" height="816" loading="lazy"><figcaption>Dois clientes pedindo um hambúrguer ao mesmo tempo</figcaption></figure><ol><li>Marie verifica a disponibilidade de hambúrgueres e vê o último disponível. Sem que ela saiba, o pedido de Marko está sendo processado, mas ainda não foi finalizado no sistema, pois ele não pagou. Como seu pedido ainda não foi finalizado, Marie não sabe que seu pedido está em conflito com o dela. Isso é semelhante a uma transação lendo os dados confirmados mais recentemente, onde ela não vê as alterações não confirmadas (como o pedido pendente de Marko).</li><li>Marie faz um pedido com base nessas informações incompletas, pensando que um hambúrguer está disponível.</li><li>Assim que Marko paga, o sistema é atualizado para mostrar que não há mais hambúrgueres restantes. Isso é semelhante a uma transação sendo confirmada.</li><li>O pedido de Marie terá que ser negado, pois não há mais hambúrgueres restantes.</li></ol><p>O ponto principal aqui é a etapa nº 3. Se o pagamento de Marko falhar nesta fase, a transação não será confirmada e ainda haverá um hambúrguer disponível para Marie.</p><p>Nesse exemplo, o isolamento de leitura confirmada garante que Marie não tenha a compra do hambúrguer prematuramente negada apenas porque outra pessoa disse que o queria. Somente transações confirmadas podem ser lidas. Portanto, o hambúrguer está disponível para ser pedido, desde que ninguém o tenha pago.</p><h3 id="leitura-repetitiva-repeatable-read-">Leitura repetitiva (<em>repeatable read</em>)</h3><p>A leitura repetitiva é um nível de isolamento mais rígido, pois oferece as mesmas garantias que o isolamento de leitura confirmada – além de garantir que as leituras sejam repetitivas.</p><p>Uma leitura repetitiva garante que, se uma transação ler uma linha de dados, quaisquer leituras subsequentes dessa mesma linha de dados dentro da mesma transação produzirão o mesmo resultado, independentemente das alterações feitas por outras transações. Essa consistência é mantida durante toda a duração da transação.</p><p>Quando uma transação lê os mesmos dados duas vezes, mas vê um valor diferente em cada leitura porque uma transação confirmada atualizou o valor entre as duas leituras, isso é chamado de leitura difusa. O nível de isolamento de leitura repetitiva impede leituras difusas.</p><p>Leituras difusas não são inerentemente boas nem ruins. Tudo depende do que você está tentando alcançar.</p><p>Leituras difusas são ruins para transações de longa duração somente leitura, pois novas gravações podem ocorrer durante a transação e isso pode causar inconsistências nos dados. Exemplos de transações de longa duração somente leitura são um <em>back-up</em> de banco de dados e consultas analíticas normalmente usadas em um <em>data warehouse</em>.</p><p>Leituras repetitivas são geralmente implementadas pelo DBMS lendo de um instantâneo do banco de dados que permanece inalterado durante a transação, ignorando assim quaisquer novas gravações confirmadas nesse período.</p><h2 id="o-que-significa-durabilidade">O que significa durabilidade?</h2><p>Durabilidade é uma garantia de que as alterações feitas por uma transação confirmada não devem ser perdidas. Todas as transações confirmadas devem ser persistidas em armazenamento durável e não volátil, ou seja, em disco. Isso garante que quaisquer transações confirmadas sejam protegidas, mesmo se o banco de dados travar.</p><p>Naturalmente, a durabilidade não pode proteger contra a destruição do disco que armazena os dados. Redundância adicional pode ser adicionada, tendo <em>back-ups</em> do seu banco de dados armazenados separadamente do original.</p><h2 id="juntando-tudo">Juntando tudo</h2><p>O ACID (Atomicidade, Consistência, Isolamento e Durabilidade) fornece um conjunto de garantias ao trabalhar com um DBMS. Embora a maioria dos DBMS relacionais sejam compatíveis com ACID, a implementação dessa conformidade pode variar.</p><p>A atomicidade garante que todas ou nenhuma das partes de uma transação sejam concluídas. Falhas parciais não são permitidas.</p><p>A consistência, ou integridade referencial, garante que os dados permaneçam precisos e confiáveis, aderindo a regras predefinidas. Ao contrário das outras prioridades, a consistência não é intrínseca ao próprio DBMS. Em vez disso, a aplicação que chama o banco de dados depende das propriedades de atomicidade e isolamento do banco de dados para manter a consistência.</p><p>O isolamento é uma garantia de que transações executadas simultaneamente não devem interferir umas nas outras. Essa é, indiscutivelmente, a propriedade mais importante, porque um DBMS pode frequentemente ter diferentes níveis de isolamento padrão, que podem precisar ser alterados com base no que é necessário para a sua aplicação.</p><p>Por fim, a durabilidade é uma garantia de que as alterações feitas por uma transação confirmada não devem ser perdidas.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O que é um ORM – o significado das ferramentas de mapeamento relacional de objetos de banco de dados ]]>
                </title>
                <description>
                    <![CDATA[ O mapeamento objeto-relacional (ou ORM, do inglês Object-relational mapping) é uma técnica usada na criação de uma "ponte" entre programas orientados a objetos e, na maioria dos casos, bancos de dados relacionais [https://pt.wikipedia.org/wiki/Banco_de_dados_relacional]. De outro modo, você pode ver o ORM como a camada que conecta a programação orientada a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-que-e-um-orm-o-significado-das-ferramentas-de-mapeamento-relacional-de-objetos-de-banco-de-dados/</link>
                <guid isPermaLink="false">6685f63b23266d03fc8b81cd</guid>
                
                    <category>
                        <![CDATA[ Bancos de dados ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kris Lagerström ]]>
                </dc:creator>
                <pubDate>Sun, 14 Jul 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/markus-winkler-gLdJnQFcIXE-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-an-orm-the-meaning-of-object-relational-mapping-database-tools/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is an ORM – The Meaning of Object Relational Mapping Database Tools</a>
      </p><p>O mapeamento objeto-relacional (ou ORM, do inglês <em>Object-relational mapping</em>) é uma técnica usada na criação de uma "ponte" entre programas orientados a objetos e, na maioria dos casos, <a href="https://pt.wikipedia.org/wiki/Banco_de_dados_relacional">bancos de dados relacionais</a>.</p><p>De outro modo, você pode ver o ORM como a camada que conecta a <a href="https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_objetos">programação orientada a objetos</a> (OOP, do inglês <em>Object-Oriented Programming</em>) aos bancos de dados relacionais.</p><p>Ao interagir com um banco de dados usando linguagens OOP, você terá que realizar diferentes operações como criar, ler, atualizar e excluir (CRUD, do inglês <em>Create-Read-Update-Delete</em>) dados de/em um banco de dados. Por padrão, você usa a linguagem SQL para realizar essas operações em bancos de dados relacionais.</p><p>Embora usar SQL para esse propósito não seja necessariamente uma má ideia, o ORM e as ferramentas ORM ajudam a simplificar a interação entre bancos de dados relacionais e diferentes linguagens OOP.</p><h2 id="o-que-uma-ferramenta-orm">O que é uma ferramenta ORM?</h2><p>Uma ferramenta ORM é um software projetado para ajudar desenvolvedores de OOP a interagir com bancos de dados relacionais. Então, em vez de criar seu próprio software ORM do zero, você pode fazer uso dessas ferramentas.</p><p>Aqui está um exemplo de código SQL que recupera informações sobre um usuário específico de um banco de dados:</p><pre><code class="language-sql">"SELECT id, name, email, country, phone_number FROM users WHERE id = 20"</code></pre><p>O código acima retorna informações sobre um usuário — <code>name</code>, <code>email</code>, <code>country</code> e <code>phone_number</code> — de uma tabela chamada <code>users</code>. Usando a cláusula <code>WHERE</code>, especificamos que as informações devem ser as do usuário com o <code>id</code> 20.</p><p>Por outro lado, uma ferramenta ORM pode fazer a mesma consulta acima com métodos mais simples. Isso é:</p><pre><code>users.GetById(20)</code></pre><p>Então, o código acima faz o mesmo que a consulta SQL. Observe que cada ferramenta ORM é construída de maneira diferente, então os métodos nunca são os mesmos, mas o propósito geral é semelhante.</p><p>As ferramentas ORM podem gerar métodos como o do último exemplo.</p><p>A maioria das linguagens OOP tem uma variedade de ferramentas ORM que você pode escolher. Aqui estão algumas das mais populares para desenvolvimento em Java, Python, PHP e .NET:</p><h3 id="ferramentas-orm-populares-para-java">Ferramentas ORM populares para Java</h3><h4 id="1-hibernate">1. Hibernate</h4><p>O <a href="https://hibernate.org/orm/">Hibernate</a> permite que os desenvolvedores escrevam classes de dados persistentes seguindo conceitos OOP como herança, polimorfismo, associação, composição. Ele é altamente eficiente e também escalável.</p><h4 id="2-apache-openjpa">2. Apache OpenJPA</h4><p>O <a href="https://openjpa.apache.org/">Apache OpenJPA</a> também é uma ferramenta de persistência do Java. Pode ser usado como uma camada de persistência em <strong>POJO</strong> (do inglês, <em>plain old Java object – </em>o objeto típico de Java) independente.</p><h4 id="3-eclipselink">3. EclipseLink</h4><p>O <a href="https://www.eclipse.org/eclipselink/">EclipseLink</a> é uma solução de persistência de código aberto do Java para serviços da Web relacionais, XML e banco de dados.</p><h4 id="4-jooq">4. jOOQ</h4><p>O <a href="https://www.jooq.org/">jOOQ</a> gera código em Java a partir de dados armazenados em um banco de dados. Você também pode usar essa ferramenta para criar consultas SQL com a segurança da tipagem.</p><h4 id="5-oracle-toplink">5. Oracle TopLink</h4><p>Você pode usar o <a href="https://docs.oracle.com/cd/E17904_01/web.1111/b32441/undtl.htm#JITDG91126">Oracle TopLink</a> para criar aplicações de alto desempenho que armazenam dados persistentes. Os dados podem ser transformados em dados relacionais ou elementos XML.</p><h3 id="ferramentas-orm-populares-para-python">Ferramentas ORM populares para Python</h3><h4 id="1-django">1. Django</h4><p>O <a href="https://docs.djangoproject.com/en/5.1/topics/db/queries/">Django</a> é uma ótima ferramenta para criar aplicações da web rapidamente.</p><h4 id="2-web2py">2. web2py</h4><p>O <a href="http://www.web2py.com/init/default/index">web2py</a> é um <em>framework full-stack</em> de código aberto do Python para criar aplicações da web rápidas, escaláveis, seguras e orientadas a dados.</p><h4 id="3-sqlobject">3. SQLObject</h4><p>O <a href="http://www.sqlobject.org/">SQLObject</a> é um gerenciador relacional de objetos que fornece uma interface de objeto para seu banco de dados.</p><h4 id="4-sqlalchemy">4. SQLAlchemy</h4><p>O <a href="https://www.sqlalchemy.org/">SQLAlchemy</a> fornece padrões de persistência projetados para acesso a banco de dados eficiente e de alto desempenho.</p><h3 id="ferramentas-orm-populares-para-php">Ferramentas ORM populares para PHP</h3><h4 id="1-laravel">1. Laravel</h4><p>O <a href="https://laravel.com/docs/11.x/eloquent">Laravel</a> vem com um gerenciador relacional de objetos chamado Eloquent que facilita a interação com bancos de dados.</p><h4 id="2-cakephp">2. CakePHP</h4><p>O <a href="https://book.cakephp.org/5/en/orm.html">CakePHP</a> fornece dois tipos de objetos: repositórios que fornecem acesso a uma coleção de dados e entidades que representam registros individuais de dados.</p><h4 id="3-qcodo">3. Qcodo</h4><p>O <a href="https://github.com/qcodo/qcodo">Qcodo</a> fornece diferentes comandos que podem ser executados no terminal para interagir com bancos de dados.</p><h4 id="4-redbeanphp">4. RedBeanPHP</h4><p>O <a href="https://redbeanphp.com/index.php">RedBeanPHP</a> é um mapeador relacional de objetos que não necessita de configuração.</p><h3 id="ferramentas-orm-populares-para-net">Ferramentas ORM populares para .NET</h3><h4 id="1-entity-framework">1. Entity Framework</h4><p>O <a href="https://learn.microsoft.com/en-us/ef/">Entity Framework</a> é um mapeador de banco de dados de objetos de vários bancos de dados. Ele suporta SQL, SQLite, MySQL, PostgreSQL e Azure Cosmos DB.</p><h4 id="2-nhibernate">2. NHibernate</h4><p>O <a href="https://nhibernate.info/">NHibernate</a> é um mapeador relacional de objetos de código aberto com diversos <em>plug-ins</em> e ferramentas para tornar o desenvolvimento mais fácil e rápido.</p><h4 id="3-dapper">3. Dapper</h4><p>O <a href="https://www.learndapper.com/">Dapper</a> é um micro-ORM. É usado principalmente para mapear consultas para objetos. Essa ferramenta não faz a maioria das coisas que uma ferramenta ORM faria, como geração de SQL, armazenamento em cache de resultados, carregamento lento (do inglês, <em>lazy loading</em>) e assim por diante.</p><h4 id="4-base-one-foundation-component-library-bfc-">4. Base One Foundation Component Library (BFC)</h4><p>O <a href="http://www.boic.com/b1mspecsheet.htm">BFC</a> é uma estrutura para criar aplicações de banco de dados em rede com Visual Studio e com software DBMS da Microsoft, Oracle, IBM, Sybase e MySQL.</p><p>Você pode ver mais ferramentas ORM <a href="https://pt.wikipedia.org/wiki/Lista_de_softwares_de_mapeamento_objeto-relacional">aqui</a>.</p><p>Agora, vamos discutir algumas das vantagens e desvantagens de se usar ferramentas ORM.</p><h2 id="vantagens-de-se-usar-ferramentas-orm">Vantagens de se usar ferramentas ORM</h2><p>Aqui estão algumas das vantagens de usar uma ferramenta ORM:</p><ul><li>Acelera o tempo de desenvolvimento para equipes.</li><li>Diminui o custo de desenvolvimento.</li><li>Lida com a lógica necessária para interagir com os bancos de dados.</li><li>Melhora a segurança. As ferramentas ORM são construídas para eliminar a possibilidade de ataques de <a href="https://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL">injeção de SQL</a>.</li><li>Você escreve menos código ao usar ferramentas ORM do que com SQL.</li></ul><h2 id="desvantagens-de-se-usar-ferramentas-orm">Desvantagens de se usar ferramentas ORM</h2><ul><li>Aprender a usar ferramentas ORM pode ser demorado.</li><li>Elas provavelmente não terão um desempenho melhor quando consultas muito complexas estiverem envolvidas.</li><li>As ferramentas de ORMs são geralmente mais lentas do que usar SQL.</li></ul><h2 id="resumo">Resumo</h2><p>Neste artigo, falamos sobre Mapeamento Objeto-Relacional. Essa é uma técnica usada para conectar programas orientados a objetos a bancos de dados relacionais.</p><p>Listamos algumas das ferramentas ORM populares para diferentes linguagens de programação.</p><p>Concluímos com algumas das vantagens e desvantagens de se usar ferramentas ORM.</p><p>Bons estudos em programação para você!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como conectar seu contêiner do Docker do Microsoft SQL Server ao Azure Data Studio ]]>
                </title>
                <description>
                    <![CDATA[  Este guia mostra como usar o Docker para baixar uma imagem do MSSQL Server e executá-la. O Azure Data Studio é a ferramenta de banco de dados multiplataforma que usaremos para conectar nosso contêiner do Docker ao MSSQL e para executar instruções SQL.  No final, mostrarei como importar ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-conectar-seu-conteiner-do-docker-do-microsoft-sql-server-ao-azure-data-studio/</link>
                <guid isPermaLink="false">64f931ec9566cf03c3d5491c</guid>
                
                    <category>
                        <![CDATA[ Bancos de dados ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ana Laura Reis ]]>
                </dc:creator>
                <pubDate>Sun, 08 Oct 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/Screen-Shot-2020-03-29-at-3.52.47-AM.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/cjn-how-to-connect-your-microsoft-sql-server-docker-container-with-azure-data-studio/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Connect your Microsoft SQL Server Docker Container with Azure Data Studio</a>
      </p><p><br>Este guia mostra como usar o Docker para baixar uma imagem do MSSQL Server e executá-la. O Azure Data Studio é a ferramenta de banco de dados multiplataforma que usaremos para conectar nosso contêiner do Docker ao MSSQL e para executar instruções SQL. </p><p>No final, mostrarei como importar um banco de dados para o sistema de arquivos do Docker para que você possa acessá-lo por meio do Azure Data Studio. </p><p>Confira outras dicas relacionadas aqui (em inglês):</p><ul><li><em><em><a href="https://www.freecodecamp.org/news/cjn-how-to-connect-your-aws-rds-microsoft-sql-server-using-azure-data-studio/">Como conectar seu AWS RDS Microsoft SQL Server usando Azure Data Studio</a></em></em></li><li><a href="https://www.freecodecamp.org/news/cjn-how-to-import-a-sample-database-to-your-aws-rds-microsoft-sql-server-using-s3/"><em><em>Como importar um banco de dados de amostra para seu Microsoft SQL Server AWS RDS usando S3</em></em></a></li></ul><p>Vamos abordar as tecnologias mencionadas abaixo:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-238.png" class="kg-image" alt="image-238" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-238.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-238.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-238.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-238.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="310" loading="lazy"></figure><ul><li>Banco de Dados: Microsoft SQL Server </li><li>Contêiner para baixar o mssql-server-demo: Docker </li><li>Instalador para o mssql-cli: Node.js (ambiente de execução)/Gerenciador de Pacotes do Node (NPM) </li><li>Ferramenta de banco de dados e interface gráfica: Azure Data Studio</li></ul><h2 id="como-criar-nosso-ambiente-com-o-docker">Como criar nosso ambiente com o Docker</h2><h3 id="instalar-o-docker"><strong>Instalar o Docker</strong></h3><p>Guia completo <a href="https://database.guide/how-to-install-sql-server-on-a-mac/">aqui</a> (em inglês):</p><ol><li>Baixe o Docker CE (Community Edition) para Mac <a href="https://store.docker.com/editions/community/docker-ce-desktop-mac?tab=description">aqui</a> .</li><li>Para instalar, clique duas vezes no arquivo .dmg e arraste o ícone do aplicativo Docker para o aplicativo de pasta.</li></ol><blockquote>Nota da tradução: para usuários de outras plataformas, como Windows e Linux, sugerimos o guia da própria Microsoft de instalação do SQL Server em português. Para o Docker, veja como instalar em outras plataformas <a href="https://docs.docker.com/desktop/install/windows-install/">aqui</a> e <a href="https://docs.docker.com/desktop/install/linux-install/">aqui</a>.</blockquote><h4 id="o-que-docker"><strong>O que é Docker?</strong></h4><p>O Docker é uma plataforma que permite que o software seja executado em seu próprio ambiente isolado. O SQL Server (a partir de 2017) pode ser executado no Docker em seu próprio contêiner isolado.</p><p>Uma vez que o Docker esteja instalado, você simplesmente faz o download - ou "puxa" - a Imagem Docker do SQL Server no Linux para o seu Mac e, em seguida, a executa como um contêiner do Docker. Este contêiner é um ambiente isolado que contém tudo o que o SQL Server precisa para funcionar.</p><h3 id="iniciar-o-docker"><strong>Iniciar o Docker</strong></h3><p>Abra seu aplicativo do Docker. Ele deve estar localizado na pasta Aplicativos.</p><h3 id="aumentar-a-mem-ria"><strong>Aumentar a memória</strong></h3><p>Por padrão, Docker terá 2GB de memória alocados para ele. O SQL Server precisa de pelo menos 3,25 GB. Para segurança, aumente para 4 GB, se puder. Já que esse é apenas um <em>"playground"</em>, 2 GB deverão ser suficientes.</p><h3 id="opcional-caso-queria-aumenta-o-tamanho-da-mem-ria-"><strong>Opcional – caso queria aumenta o tamanho da memória:</strong></h3><ol><li>Selecione <em>Preferences</em> no ícone pequeno do Docker no menu superior </li><li>Deslize o controle deslizante de memória para pelo menos 2 GB</li><li> Clique em <em>Apply</em> e <em>Restart</em></li></ol><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-245.png" class="kg-image" alt="image-245" width="498" height="692" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-246.png" class="kg-image" alt="image-246" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-246.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-246.png 992w" sizes="(min-width: 720px) 720px" width="992" height="902" loading="lazy"></figure><h3 id="baixar-o-sql-server"><strong>Baixar o SQL Server</strong></h3><p>Abra uma janela no terminal e execute o seguinte comando: </p><pre><code class="language-terminal">sudo docker pull mcr.microsoft.com/mssql/server:2019-latest</code></pre><p>Isso baixará a imagem mais recente do SQL Server 2019 para Linux do Docker para o seu computador.</p><p>Você também pode verificar a <a href="https://hub.docker.com/_/microsoft-mssql-server">versão mais recente do contêiner</a> no site do Docker, se desejar.</p><h3 id="iniciar-a-imagem-do-docker"><strong>Iniciar a imagem do Docker </strong></h3><p>Execute o seguinte comando para iniciar uma instância da imagem do Docker que você acabou de baixar.</p><pre><code class="language-terminal">docker run -d --name sql_server_demo -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=really</code></pre><p>Exemplo de saída:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-254.png" class="kg-image" alt="image-254" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-254.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-254.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-254.png 1480w" sizes="(min-width: 720px) 720px" width="1480" height="704" loading="lazy"></figure><h3 id="verificar-o-cont-iner-do-docker-opcional-"><strong>Verificar o contêiner do Docker (opcional)</strong></h3><p>Você pode executar o seguinte comando para verificar se o contêiner do Docker está em execução:</p><pre><code class="language-terminal">docker ps</code></pre><p>Se estiver instalado e funcionando, deverá retornar algo assim:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-247.png" class="kg-image" alt="image-247" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-247.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-247.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-247.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w2400/2023/10/image-247.png 2400w" sizes="(min-width: 1200px) 1200px" width="2824" height="118" loading="lazy"></figure><p>Se você fechou acidentalmente seu aplicativo do Docker, abra seu terminal e digite:</p><pre><code class="language-terminal">docker start sql_server_demo</code></pre><h3 id="instalar-o-node-js-e-o-npm"><strong>Instalar o Node.js e o NPM</strong></h3><p>Verifique se você possui o Node.js e o NPM. Execute os seguintes comandos em seu terminal.</p><pre><code class="language-terminal">node -v
npm -v</code></pre><p>Se a saída foi o número da versão, pule o restante desta seção.</p><p>Em seguida, visite o site do Node.js clicando no seguinte link:</p><p><a href="https://nodejs.org/en/">https://nodejs.org/en/</a></p><p>Clique no botão de download da versão LTS (o número da versão pode ser diferente) para baixar o pacote Node.js:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-249.png" class="kg-image" alt="image-249" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-249.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-249.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-249.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-249.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="434" loading="lazy"></figure><p>Em seguida, clique e execute o pacote após o download. MacOS e Windows terão processos de instalação diferentes. Siga as instruções para instalar o Node.js.</p><p>Em seguida, teste novamente se o Node.js e o NPM foram instalados com sucesso executando os seguintes comandos no terminal:</p><pre><code class="language-terminal">node -v
npm -v</code></pre><p>A saída deverá ser algo assim:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-248.png" class="kg-image" alt="image-248" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-248.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-248.png 884w" sizes="(min-width: 720px) 720px" width="884" height="154" loading="lazy"></figure><h3 id="instalar-o-sql-cli"><strong>Instalar o sql-cli</strong></h3><p>Execute o seguinte comando para instalar a ferramenta de linha de comando do sql-cli. Essa ferramenta permite que você execute consultas e outros comandos em sua instância do SQL Server.</p><pre><code class="language-terminal">npm install -g sql-cli</code></pre><p>Se houver algum erro de permissão, digite <code>sudo</code> antes do comando:</p><pre><code class="language-terminal">sudo npm install -g sql-cli</code></pre><h2 id="conectar-se-ao-mssql-server"><strong>Conectar-se ao MSSQL Server</strong></h2><p>Conecte-se ao seu SQL Server usando o comando <code>mssql</code>, seguido dos parâmetros de nome de usuário e senha. Sintaxe: &nbsp;-u &lt;nome de usuário&gt; -p &lt;senha&gt;</p><pre><code class="language-terminal">mssql -u sa -p reallyStrongPwd123</code></pre><p>Sua saída deverá ser assim, se você se conectar com sucesso:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-250.png" class="kg-image" alt="image-250" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-250.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-250.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-250.png 1352w" sizes="(min-width: 720px) 720px" width="1352" height="236" loading="lazy"></figure><h3 id="executar-um-teste-r-pido"><strong>Executar um teste rápido</strong></h3><p>Execute um teste rápido para verificar se você consegue se conectar ao SQL Server. Use a seguinte instrução SQL para verificar sua versão do SQL Server:</p><pre><code class="language-sql">SELECT @@VERSION;</code></pre><p>Se estiver em execução, você deverá ver algo assim:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-251.png" class="kg-image" alt="image-251" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-251.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-251.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-251.png 1288w" sizes="(min-width: 720px) 720px" width="1288" height="534" loading="lazy"></figure><h2 id="baixar-uma-gui-do-sql-server-azure-data-studio"><strong>Baixar uma GUI do SQL Server – Azure Data Studio</strong></h2><p><a href="https://database.guide/what-is-azure-data-studio/">O Azure Data Studio</a> (anteriormente SQL Operations Studio) é uma ferramenta gratuita de gerenciamento de GUI que você pode usar para gerenciar o SQL Server em seu computador. Você pode usá-lo para criar e gerenciar bancos de dados, escrever consultas, fazer backup e restaurar bancos de dados e muito mais.</p><p>O Azure Data Studio está disponível para Windows, Mac e Linux.</p><h3 id="instalar-o-azure-data-studio"><strong>Instalar o Azure Data Studio</strong></h3><p>Para instalar o Azure Data Studio em seu Mac:</p><ol><li>Visite a <a href="https://docs.microsoft.com/en-us/sql/azure-data-studio/download">página de download do Azure Data Studio</a> (em inglês – você pode encontrar a versão para as plataformas Windows e Linux na mesma página) e clique no arquivo .zip para macOS</li><li>Assim que o download do arquivo .zip para conclusão, clique duas vezes nele para expandir seu conteúdo</li><li>Arraste o arquivo .app para a pasta Aplicativos (o arquivo provavelmente será chamado <em><em>Azure Data Studio.app</em></em> )</li></ol><h3 id="conectar-se-ao-sql-server"><strong>Conectar-se ao SQL Server</strong></h3><p>Agora que o Azure Data Studio está instalado, você pode usá-lo para se conectar ao SQL Server.</p><ol><li>Inicie o Azure Data Studio. Ele está localizado na pasta Aplicativos.</li><li>Insira as credenciais de login e outras informações da instância do SQL Server à qual você deseja se conectar:</li></ol><p>Deve ser semelhante a isto:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-259.png" class="kg-image" alt="image-259" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-259.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-259.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-259.png 1064w" width="1064" height="739" loading="lazy"></figure><p>Deve ser semelhante a isto:</p><ul><li><strong><strong>Nome do servidor</strong></strong> : localhost, [número da porta]<br><strong><strong>Exemplo</strong></strong> : localhost, 1433</li><li><strong><strong>Tipo de autenticação</strong></strong> : Login SQL</li><li><strong><strong>Nome de usuário</strong></strong> : [seu nome de usuário do SQL Server] ou sa</li><li><strong><strong>Senha</strong></strong> : [sua senha do SQL Server] ou reallyStrongPwd123</li><li><strong><strong>Nome do banco de dados</strong></strong> : &lt;Default&gt;</li><li><strong><strong><strong><strong>Grupo de servidores</strong></strong> : &lt;</strong>Default<strong>&gt;</strong></strong></li></ul><p>Se você estiver usando uma porta diferente da padrão 1433, clique em Advanced... e insira-a no campo de Port. </p><p>Alternativamente, você pode acrescentá-la ao nome do seu servidor com uma vírgula no meio. </p><p>Por exemplo, se você estiver usando a porta 1400, digite localhost,1400. Agora você pode prosseguir e criar bancos de dados, executar scripts e realizar outras tarefas de gerenciamento do SQL Server. </p><ol><li>Clique em <em>New Query </em>(Nova consulta).</li></ol><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-253.png" class="kg-image" alt="image-253" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-253.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-253.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-253.png 1063w" width="1063" height="739" loading="lazy"></figure><p>2. &nbsp; &nbsp; Digite <strong><strong>SELECT @@VERSION</strong></strong>, e clique em <strong><strong>Run Query</strong> </strong>(Executar consulta).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-241.png" class="kg-image" alt="image-241" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-241.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-241.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-241.png 1482w" sizes="(min-width: 720px) 720px" width="1482" height="1486" loading="lazy"></figure><p>Você deverá conseguir ver: <em><em>Microsoft SQL Server</em></em> em <em>Results</em>.</p><h2 id="importar-um-banco-de-dados-de-exemplo-para-o-sql-server-usando-o-azure-data-studio"><strong>Importar um banco de dados de exemplo para o SQL Server usando o Azure Data Studio</strong></h2><h3 id="baixar-o-arquivo-de-banco-de-dados-de-exemplo-adventureworks"><strong>Baixar o arquivo de banco de dados de exemplo AdventureWorks</strong></h3><p>Para obter os downloads OLTP do AdventureWorks, acesse este <a href="https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-ver15">link</a> e escolha qualquer banco de dados de amostra. No meu exemplo, eu escolho <code>AdventureWorks2017.bak</code>. Faremos o upload disso para o <em>S3 Bucket.</em></p><h3 id="copiar-o-arquivo-para-sua-janela-de-encaixe"><strong>Copiar o arquivo para sua janela de encaixe</strong></h3><p>Digite o seguinte comando no terminal seguindo esta sintaxe:</p><pre><code>docker cp &lt;location_of_file&gt; &lt;container_id&gt;:/var/opt/mssql/data</code></pre><p>Deverá ficar assim:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-255.png" class="kg-image" alt="image-255" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-255.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-255.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-255.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-255.png 1680w" sizes="(min-width: 1200px) 1200px" width="1680" height="42" loading="lazy"></figure><p>Se você esqueceu o ID do contêiner, use o comando <code>docker ps</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-258.png" class="kg-image" alt="image-258" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-258.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-258.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-258.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w2400/2023/10/image-258.png 2400w" sizes="(min-width: 1200px) 1200px" width="2828" height="120" loading="lazy"></figure><h3 id="importar-o-banco-de-dados-de-exemplo-no-docker"><strong>Importar o banco de dados de exemplo no Docker</strong></h3><p>Vá para Azure Data Studio e clique em <strong><strong>localhost, 1443</strong></strong> e escolha <strong><strong><em>Restore</em></strong> </strong>(Restaurar).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-265.png" class="kg-image" alt="image-265" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-265.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-265.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-265.png 1098w" sizes="(min-width: 720px) 720px" width="1098" height="674" loading="lazy"></figure><p>Em seguida, escolha <em><strong>"Backup file"</strong></em> como a opção a partir da qual fazer a restauração. Em seguida, clique no botão azul à direita do caminho do arquivo de backup.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-264.png" class="kg-image" alt="image-264" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-264.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-264.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-264.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-264.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="470" loading="lazy"></figure><p>Procure o arquivo de banco de dados de exemplo. Deve estar localizado em:</p><pre><code class="language-terminal">/var/opt/mssql/data/AdventureWorks2017.bak</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-260.png" class="kg-image" alt="image-260" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-260.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-260.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-260.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-260.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="714" loading="lazy"></figure><p>Escolha <strong><strong>Restore</strong></strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-263.png" class="kg-image" alt="image-263" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-263.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-263.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/10/image-263.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-263.png 2378w" sizes="(min-width: 1200px) 1200px" width="2378" height="524" loading="lazy"></figure><p>Verifique seu host local, 1443. Ele deve gerar um banco de dados chamado AdventureWorks2017 e conter conteúdo como tabelas e visualizações. Caso contrário, clique com o botão direito em localhost, 1443 e escolha <em>Refresh</em> (Atualizar). Você também pode reiniciar seu aplicativo Azure Data Studio.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-262.png" class="kg-image" alt="image-262" width="550" height="770" loading="lazy"></figure><h3 id="testar-o-banco-de-dados-de-amostra"><strong>Testar o banco de dados de amostra</strong></h3><ol><li>Escolha <strong><strong>AdventureWorks2017</strong></strong> no menu suspenso.</li><li>Escreva uma consulta SQL:</li></ol><pre><code class="language-sql">SELECT * FROM HumanResources.Department;</code></pre><p>3. Clique em <strong><strong>Executar</strong></strong> para executar a consulta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-266.png" class="kg-image" alt="image-266" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-266.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-266.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-266.png 1408w" sizes="(min-width: 720px) 720px" width="1408" height="208" loading="lazy"></figure><p>Você deve ter uma saída como esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-267.png" class="kg-image" alt="image-267" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-267.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-267.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-267.png 1436w" sizes="(min-width: 720px) 720px" width="1436" height="684" loading="lazy"></figure><p>Parabéns! Você conclui o processo!</p><p>Recursos:</p><ul><li><a href="https://database.guide/how-to-install-sql-server-on-a-mac/">Como instalar o SQL Server em um Mac</a> (em inglês)</li></ul><p>Conecte-se com o autor pelo LinkedIn <a href="https://www.linkedin.com/in/clarkngo/">aqui</a>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-240.png" class="kg-image" alt="image-240" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-240.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/image-240.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-240.png 1486w" sizes="(min-width: 720px) 720px" width="1486" height="696" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Curso de bancos de dados relacionais – como aprender SQL no VSCode usando o Docker e o freeCodeCamp ]]>
                </title>
                <description>
                    <![CDATA[ Agora, você pode aprender conceitos de bancos de dados relacionais e SQL diretamente no editor VSCode. Este tutorial orientará você sobre como instalar um curso sobre o assunto usando o Docker. Neste curso de 300 horas de duração, você aprenderá fazendo um total de 14 projetos. Alguns deles envolverão instruções ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/curso-de-bancos-de-dados-relacionais-como-aprender-sql-no-vscode-usando-o-docker-e-o-freecodecamp/</link>
                <guid isPermaLink="false">6235c1a16a6ca90519ace8f3</guid>
                
                    <category>
                        <![CDATA[ Bancos de dados ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Sun, 20 Mar 2022 17:42:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/Screen-Shot-2021-09-12-at-9.22.55-PM.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-run-freecodecamps-relational-databases-curriculum-using-docker-vscode-and-coderoad/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Relational Database Course – How to Learn SQL in VSCode Using Docker and freeCodeCamp</a>
      </p><p>Agora, você pode aprender conceitos de bancos de dados relacionais e SQL diretamente no editor VSCode. Este tutorial orientará você sobre como instalar um curso sobre o assunto usando o Docker.</p><p>Neste curso de 300 horas de duração, você aprenderá fazendo um total de 14 projetos. Alguns deles envolverão instruções passo a passo. Outros terão final aberto, com suítes de teste elaboradas.</p><p>Você usará as ferramentas de um desenvolvedor de verdade, como o VS Code, o PostgreSQL e a linha de comando do Linux/Unix para completar tutoriais interativos e criar projetos.</p><h3 id="sobre-o-que-voc-aprender-"><strong>Sobre o que você aprenderá</strong></h3><ul><li>A linha de comando do Linux/Unix</li><li>Bancos de dados relacionais</li><li>SQL e PostgreSQL</li><li>Bash e criação de scripts em Bash</li><li>Git e GitHub</li><li>Nano</li><li>Além de vários outros conceitos e ferramentas</li></ul><p>Este curso foi possível com o apoio do <a href="https://www.classcentral.com/">Class Central</a>, um site com mecanismo de busca e avaliação de cursos on-line.</p><h2 id="como-instalar-o-docker-e-executar-o-curr-culo-de-bancos-de-dados-relacionais"><strong>Como instalar o Docker e executar o currículo de Bancos de Dados Relacionais</strong></h2><p>O Docker executará um contêiner que terá o software e a estrutura de arquivos necessária para esses tutoriais no seu computador.</p><p>Você trabalhará nesse contêiner usando o VSCode e a extensão <em>Dev Containers </em>(para trabalho com contêineres remotos). Quando ela estiver em execução, a extensão CodeRoad será responsável por executar os tutoriais que criamos.</p><h3 id="pr-requisitos"><strong>Pré-requisitos</strong></h3><p>Antes de começar, é preciso instalar algumas coisas:</p><ol><li>O <a href="https://docs.docker.com/engine/install/">mecanismo do Docker</a></li><li>O <a href="https://code.visualstudio.com/download">VS Code</a></li><li>A extensão <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers">Dev Containers</a> para o VS Code</li><li>O <a href="https://git-scm.com/downloads">Git</a></li></ol><h3 id="como-executar-um-projeto-no-docker"><strong>Como executar um projeto no Docker</strong></h3><p>Siga estes passos para executar o contêiner do Docker e para começar um tutorial:</p><ol><li>Faça um clone do repositório RDB Alpha no seu computador usando <code>git clone https://github.com/freeCodeCamp/rdb-alpha</code></li><li>Abra um terminal, navegue até o diretório <code>rdb-alpha</code> e abra o VS Code usando <code>code .</code></li><li>No VS Code, abra a paleta de comandos com <code>Ctrl / Cmd + Shift + P</code>. Em seguida, digite <code>Dev-Containers: Rebuild and Reopen in Container</code> e execute o comando.</li><li>Uma nova janela do VS será aberta e começará a criar a imagem do Docker. Quando realizado pela primeira vez, o processo de criação é demorado.</li><li>Ao terminar a criação da imagem, abra a paleta de comando novamente com <code>Ctrl / Cmd + Shift + P</code>, digite <code>CodeRoad: Start</code> e execute o comando. Ele não estará disponível até que a extensão tenha terminado de ser instalada no contêiner. Se você ainda não tiver a opção do CodeRoad disponível, é porque a extensão ainda não foi instalada no contêiner.</li><li>Na janela do CodeRoad, clique em "Start New Tutorial" (Começar um novo tutorial)</li><li>Clique na guia <code>URL</code> e insira o URL do arquivo <code>tutorial.json</code> do projeto que você deseja começar (por exemplo, <a href="https://raw.githubusercontent.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/main/tutorial.json">https://raw.githubusercontent.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/main/tutorial.json</a>) A lista completa dos tutoriais disponíveis se encontra abaixo.</li><li>Clique no botão "Start" (Iniciar) e comece as lições</li></ol><h3 id="como-reiniciar-ou-trocar-de-projetos"><strong>Como reiniciar ou trocar de projetos</strong></h3><p>Se você reiniciar ou trocar de projetos, perderá seu progresso em um tutorial que você tiver iniciado, bem como todos os arquivos e pastas que tiver criado no contêiner.</p><ol><li>Abra a paleta de comandos com <code>Ctrl / Cmd + Shift + P</code>, digite <code>Dev-Containers: Rebuild Container</code> e execute o comando</li><li>Aguarde até que o VS Code reabra e recarregue o contêiner</li><li>Abra o CodeRoad na paleta de comandos como antes, clique em "Start New Tutorial" (Começar um novo tutorial) e digite o URL do arquivo <code>tutorial.json</code> para o projeto que deseja fazer</li></ol><h3 id="cursos-dispon-veis"><strong>Cursos disponíveis</strong></h3><p>Aqui temos uma lista de tutoriais disponíveis no momento. Abra um deles e use seu URL, conforme descrito nas instruções acima para iniciá-lo.</p><ul><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/main/tutorial.json">Learn Bash by Building a Boilerplate</a> (Aprenda Bash criando um boilerplate)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-relational-databases-by-building-a-mario-database/main/tutorial.json">Learn Relational Databases by Building a Mario Database</a> (Aprenda bancos de dados relacionais criando um banco de dados do Mario Bros)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-celestial-bodies-database/main/tutorial.json">Celestial Bodies Database</a> (Banco de dados de corpos celestiais - final aberto)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-bash-scripting-by-building-five-programs/main/tutorial.json">Learn Bash Scripting by Building Five Programs</a> (Aprenda a fazer scripts no Bash criando cinco programas)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-sql-by-building-a-student-database-part-1/main/tutorial.json">Learn SQL by Building a Student Database: Part 1</a> (Aprenda SQL criando um banco de dados de estudantes: parte 1)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-sql-by-building-a-student-database-part-2/main/tutorial.json">Learn SQL by Building a Student Database: Part 2</a> (Aprenda SQL criando um banco de dados de estudantes: parte 2)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-world-cup-database/main/tutorial.json">World Cup Database</a> (Banco de dados da Copa do Mundo - final aberto)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-advanced-bash-by-building-a-kitty-ipsum-translator/main/tutorial.json">Learn Advanced Bash by Building a Kitty Ipsum Translator</a> (Aprenda Bash avançado criando um tradutor de Kitty Ipsum)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-bash-and-sql-by-building-a-bike-rental-shop/main/tutorial.json">Learn Bash and SQL by Building a Bike Rental Shop</a> (Aprenda Bash e SQL criando uma loja de aluguel de bicicletas)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-salon-appointment-scheduler/main/tutorial.json">Salon Appointment Scheduler</a> (Agendador de compromissos de um salão de beleza - final aberto)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-nano-by-building-a-castle/main/tutorial.json">Learn Nano by Building a Castle</a> (Aprenda Nano construindo um castelo)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-git-by-building-an-sql-reference-object/main/tutorial.json">Learn Git by Building an SQL Reference Object</a> (Aprenda Git criando um objeto de referência em SQL)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-periodic-table-database/main/tutorial.json">Periodic Table Database</a> (Banco de dados de tabela periódica - final aberto)</li><li><a href="https://raw.githubusercontent.com/freeCodeCamp/learn-number-guessing-game/main/tutorial.json">Number Guessing Game</a> (Jogo de adivinhação de números - final aberto) </li></ul><h4 id="abaixo-voc-ver-um-v-deo-onde-eu-fa-o-o-projeto-learn-bash-by-building-a-boilerplate-em-13-minutos-e-38-segundos-"><strong>Abaixo você verá um vídeo onde eu faço o projeto "Learn Bash by Building a Boilerplate" em 13 minutos e 38 segundos:</strong></h4><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/VQmCwzfSM-k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="este-curso-em-breve-estar-dispon-vel-no-seu-navegador-em-ingl-s-pelo-freecodecamp-org-learn-e-em-portugu-s-pelo-freecodecamp-org-portuguese-learn-"><strong>Este curso em breve estará disponível no seu navegador, em inglês, pelo <a href="https://www.freecodecamp.org/learn">freeCodeCamp.org/learn</a> e em português pelo <a href="https://www.freecodecamp.org/portuguese/learn/">freeCodeCamp.org/portuguese/learn</a>.</strong></h2><p>Você, então, conseguirá adquirir sua Certificação de Bancos de Dados Relacionais.</p><h2 id="baixe-tamb-m-o-tema-noturno-do-freecodecamp-para-o-vs-code"><strong>Baixe também o tema noturno &nbsp;do freeCodeCamp para o VS Code</strong></h2><p>Se você gosta do esquema de cores usado nesses tutoriais, pode baixar a <a href="https://marketplace.visualstudio.com/items?itemName=freeCodeCamp.freecodecamp-dark-vscode-theme">extensão de tema escuro do freeCodeCamp</a> pelo Visual Studio Marketplace.</p><p><a href="https://www.freecodecamp.org/portuguese/news/tema-de-modo-escuro-do-vs-code-o-estilo-de-modo-noturno-do-freecodecamp-para-o-visual-studio-code/">Saiba mais sobre o tema de modo escuro aqui</a>.</p><h2 id="ajude-nos-a-melhorar-esses-cursos-fazendo-perguntas-e-nos-dando-seu-feedback"><strong>Ajude-nos a melhorar esses cursos fazendo perguntas e nos dando seu feedback</strong></h2><p>Se tiver perguntas sobre esses novos cursos de bancos de dados relacionais, se ficar travado em algum momento, ou se tiver um feedback mais geral para nos dar a respeito deles, crie uma thread no <a href="https://forum.freecodecamp.org/">fórum do freeCodeCamp</a>.</p><p>Também temos nosso próprio sistema de bate-papo, ao estilo Slack, onde você pode fazer perguntas e ajudar a contribuir com nossos projetos de código aberto. <a href="https://chat.freecodecamp.org/home">Participe do nosso bate-papo</a>.</p><p>Feliz programação!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
