<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo de Curso Fundamentos da Engenharia de Dados - Data Universe</title>
	<atom:link href="https://datauniverse.com.br/tag/curso-fundamentos-da-engenharia-de-dados/feed/" rel="self" type="application/rss+xml" />
	<link>https://datauniverse.com.br/tag/curso-fundamentos-da-engenharia-de-dados/</link>
	<description>Conteúdos sobre as áreas de Data Science, Data Analytics, Estatística e Probabilidade, Inteligência Artificial e Machine Learning.</description>
	<lastBuildDate>Tue, 31 Mar 2026 23:23:30 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://datauniverse.com.br/wp-content/uploads/2026/01/cropped-data-universe-logo-icon-32x32.png</url>
	<title>Arquivo de Curso Fundamentos da Engenharia de Dados - Data Universe</title>
	<link>https://datauniverse.com.br/tag/curso-fundamentos-da-engenharia-de-dados/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arquitetura Medallion (Bronze, Silver, Gold) x Modelo SOR, SOT e SPEC</title>
		<link>https://datauniverse.com.br/arquitetura-medallion-bronze-silver-gold-x-modelo-sor-sot-e-spec/</link>
					<comments>https://datauniverse.com.br/arquitetura-medallion-bronze-silver-gold-x-modelo-sor-sot-e-spec/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 23:21:02 +0000</pubDate>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=3036</guid>

					<description><![CDATA[<p>Na engenharia de dados, extrair informações de diversas fontes e jogá-las em um repositório sem organização é a receita perfeita para criar um &#8220;Pântano de Dados&#8221; (Data Swamp). Para que os dados sejam úteis, eles precisam passar por estágios de refinamento. É exatamente para estruturar esse fluxo que existem frameworks arquiteturais como o Medallion (Bronze, [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/arquitetura-medallion-bronze-silver-gold-x-modelo-sor-sot-e-spec/">Arquitetura Medallion (Bronze, Silver, Gold) x Modelo SOR, SOT e SPEC</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Na engenharia de dados, extrair informações de diversas fontes e jogá-las em um repositório sem organização é a receita perfeita para criar um &#8220;Pântano de Dados&#8221; (Data Swamp). Para que os dados sejam úteis, eles precisam passar por estágios de refinamento.</p>



<p>É exatamente para estruturar esse fluxo que existem frameworks arquiteturais como o <strong>Medallion (Bronze, Silver, Gold)</strong> e o modelo <strong>SOR, SOT, SPEC</strong>. <mark style="background-color:#fcb900" class="has-inline-color">Na prática, ambos descrevem a mesma jornada de amadurecimento do dado, mas com origens e focos ligeiramente diferentes.</mark></p>



<h3 class="wp-block-heading">A Arquitetura Medallion (Bronze, Silver, Gold)</h3>



<p>O conceito foi introduzido pela equipe da Databricks (liderada por nomes como <strong>Ali Ghodsi</strong>, CEO e cofundador) por volta de <strong>2020</strong> junto com o conceito de <em><a href="https://datauniverse.com.br/data-lakehouse/">Data Lakehouse</a></em>, a arquitetura Medallion foca no <strong>estado de qualidade e refinamento</strong> dos arquivos e tabelas dentro de um pipeline de <a href="https://datauniverse.com.br/big-data/">Big Data</a>.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="960" height="540" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-16.png" alt="" class="wp-image-3038" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-16.png 960w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-16-300x169.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-16-768x432.png 768w" sizes="(max-width: 960px) 100vw, 960px" /><figcaption class="wp-element-caption">https://learn.microsoft.com/pt-br/azure/databricks/lakehouse/medallion</figcaption></figure>



<p>A analogia é simples: o dado entra bruto e vai sendo &#8220;lapidado&#8221; até virar ouro.</p>



<p><strong>Camada Bronze (Raw / Bruta):</strong> É a zona de aterrissagem. Os dados chegam aqui exatamente no mesmo formato dos sistemas de origem (APIs, ERPs, CRMs, <a href="https://datauniverse.com.br/logs-logging/">logs</a>), sem nenhuma alteração.</p>



<p><em>Objetivo:</em> Manter o histórico imutável. Se houver um erro no processamento futuro, você sempre pode voltar à camada Bronze e reprocessar o dado original.</p>



<p><strong>Camada Silver (Cleansed / Conformed):</strong> É onde a faxina acontece. Os dados da Bronze são lidos, filtrados, padronizados (ex: transformar todas as datas para o formato YYYY-MM-DD), desduplicados e têm seus tipos de dados corrigidos.</p>



<p><em>Objetivo:</em> Criar uma base de dados limpa, integrada e confiável que representa a operação da empresa, pronta para exploração por analistas e cientistas de dados.</p>



<p><strong>Camada Gold (Curated / Aggregated):</strong> É a camada de negócio. Aqui, os dados da Silver são agregados, somados e cruzados para responder a perguntas específicas (ex: &#8220;Total de vendas por região por mês&#8221;).</p>



<p><em>Objetivo:</em> Entregar dados altamente otimizados e prontos para consumo por ferramentas de BI (Tableau, Power BI, Metabase) ou modelos de Machine Learning.</p>



<h3 class="wp-block-heading">O Modelo SOR, SOT e SPEC</h3>



<p>Enquanto o Medallion nasceu no mundo do Big Data e processamento em nuvem, a nomenclatura <strong>SOR, SOT e SPEC</strong> tem raízes mais profundas na Governança de Dados clássica e em arquiteturas de Data Warehousing (como as de Ralph Kimball e Bill Inmon). O termo ganhou força com <strong>Bill Inmon</strong> (conhecido como o &#8220;Pai do Data Warehouse. <mark style="background-color:#fcb900" class="has-inline-color">O foco aqui é a <strong>confiabilidade e o propósito</strong> do dado.</mark></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="270" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-17-1024x270.png" alt="sor, sot e spec" class="wp-image-3039" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-17-1024x270.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-17-300x79.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-17-768x203.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-17.png 1095w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="509" height="564" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-18.png" alt="sor, sot e spec" class="wp-image-3040" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-18.png 509w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-18-271x300.png 271w" sizes="(max-width: 509px) 100vw, 509px" /></figure>



<p><strong>SOR (System of Record &#8211; Sistema de Registro):</strong> É a origem do dado. Em arquitetura de dados, representa a camada onde a informação é armazenada de forma bruta e fidedigna ao sistema transacional que a gerou.</p>



<p><mark style="background-color:#ff6900" class="has-inline-color has-palette-color-1-color"><em>Equivalência:</em> É a representação lógica da camada <strong>Bronze</strong>.</mark></p>



<p><strong>SOT (Source of Truth / Single Source of Truth &#8211; Fonte Única da Verdade):</strong> É o coração da governança. É a camada onde as discrepâncias entre diferentes sistemas foram resolvidas. Se o sistema de Vendas diz que o cliente é &#8220;João S.&#8221; e o sistema de Entregas diz &#8220;João Silva&#8221;, a SOT resolve esse conflito e consolida o dado oficial da empresa.</p>



<p><mark style="background-color:#abb8c3" class="has-inline-color"><em>Equivalência:</em> É a representação lógica da camada <strong>Silver</strong>.</mark></p>



<p><strong>SPEC (Specific / System of Engagement &#8211; Específico):</strong> São as visões de dados criadas para propósitos específicos de um departamento ou caso de uso. O RH não quer ver a base inteira da empresa; ele quer um conjunto de dados focado em métricas de contratação e turnover (um Data Mart).</p>



<p><mark style="background-color:#fcb900" class="has-inline-color"><em>Equivalência:</em> É a representação lógica da camada <strong>Gold</strong>.</mark></p>



<h3 class="wp-block-heading">Qual a diferença real entre eles?</h3>



<p><mark style="background-color:#fcb900" class="has-inline-color">A diferença não está na tecnologia ou no fluxo (ambos usam pipelines de extração, limpeza e agregação), mas sim na <strong>filosofia e no vocabulário adotado pela equipe</strong>.</mark></p>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="351" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-1024x351.png" alt="sor, sot e spec" class="wp-image-3037" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-1024x351.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-300x103.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-768x263.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-1536x527.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-2048x703.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-15-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-table"><table><thead><tr><td><strong>Característica</strong></td><td><strong>Arquitetura Medallion (Databricks)</strong></td><td><strong>Arquitetura SOR / SOT / SPEC</strong></td></tr></thead><tbody><tr><td><strong>Origem do Conceito</strong></td><td>Engenharia de Dados Moderna (Data Lakehouse, Spark).</td><td>Governança de Dados e Data Warehousing tradicional.</td></tr><tr><td><strong>Foco Principal</strong></td><td>Estágio de processamento e qualidade do dado (Bruto $\rightarrow$ Limpo $\rightarrow$ Agregado).</td><td>Autoridade, governança e consumo do dado (Registro $\rightarrow$ Verdade $\rightarrow$ Aplicação).</td></tr><tr><td><strong>Camada 1 (Bruto)</strong></td><td><strong>Bronze:</strong> Pouso do dado bruto e retenção de histórico.</td><td><strong>SOR:</strong> O espelho exato do sistema de origem.</td></tr><tr><td><strong>Camada 2 (Limpo)</strong></td><td><strong>Silver:</strong> Dados padronizados, desduplicados e modelados.</td><td><strong>SOT:</strong> A &#8220;Fonte Única da Verdade&#8221; validada para toda a empresa.</td></tr><tr><td><strong>Camada 3 (Negócio)</strong></td><td><strong>Gold:</strong> Dados agregados e otimizados para dashboards de BI.</td><td><strong>SPEC:</strong> Visões departamentais específicas (Data Marts) e produtos de dados.</td></tr></tbody></table></figure>



<p>Na prática das empresas modernas, esses termos frequentemente se misturam. Um Arquiteto de Dados pode perfeitamente desenhar um pipeline dizendo: <em>&#8220;Vamos usar a camada <strong>Silver</strong> do nosso Data Lake como a nossa <strong>Source of Truth (SOT)</strong> corporativa&#8221;</em>.</p>



<p>Se você abrir o banco de dados de uma empresa madura, a tabela que o engenheiro chama de &#8220;Silver&#8221; é a exata mesma tabela que o time de governança chama de &#8220;SOT&#8221; (Source of Truth).</p>



<p>A diferença não está na tecnologia ou no fluxo dos dados. A diferença está <strong>na perspectiva de quem está olhando</strong> e <strong>no vocabulário usado para resolver problemas diferentes</strong>.</p>



<p>Pense nisso como duas &#8220;lentes&#8221; para olhar o mesmo funil de dados: a lente da Engenharia e a lente do Negócio/Governança.</p>



<h3 class="wp-block-heading">Lente 1: Medallion (A Visão da Engenharia)</h3>



<p>O Medallion (Bronze, Silver, Gold) foca no <strong>estado de processamento e qualidade do dado</strong>. É o vocabulário de quem &#8220;põe a mão na massa&#8221; (Engenheiros de Dados, Arquitetos Cloud).</p>



<ul class="wp-block-list">
<li><strong>A pergunta que ele responde:</strong> &#8220;O quanto de código, limpeza e transformação nós já rodamos nesse dado?&#8221;</li>



<li><strong>Na prática:</strong> Você usa esses termos em reuniões técnicas.
<ul class="wp-block-list">
<li><em>Exemplo:</em> &#8220;A pipeline deu erro porque o arquivo JSON que chegou na <strong>Bronze</strong> veio corrompido, então o script do Spark não conseguiu limpar e jogar para a <strong>Silver</strong>.&#8221;</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Lente 2: SOR, SOT, SPEC (A Visão do Negócio e Governança)</h3>



<p>O SOR/SOT/SPEC foca na <strong>confiabilidade, auditoria e autoridade do dado</strong>. É o vocabulário de quem consome o dado e toma decisões de negócio (Diretores, Analistas de Negócio, Auditores, Data Stewards).</p>



<ul class="wp-block-list">
<li><strong>A pergunta que ele responde:</strong> &#8220;Eu posso confiar nesse número para apresentar para o conselho diretivo? Quem é o dono dessa informação?&#8221;</li>



<li><strong>Na prática:</strong> Você usa esses termos em reuniões de alinhamento estratégico ou resolução de conflitos.
<ul class="wp-block-list">
<li><em>Exemplo:</em> &#8220;O dashboard de Vendas e o de Finanças estão mostrando faturamentos diferentes. Precisamos definir que a tabela X do Data Warehouse será a nossa <strong>SOT (Fonte Única da Verdade)</strong> para o faturamento global da empresa.&#8221;</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Quando usar um vocabulário no lugar do outro?</h3>



<p>Aqui está a regra de ouro para o seu dia a dia profissional: <strong>Você não escolhe um modelo em detrimento do outro, você os usa simultaneamente dependendo com quem está falando.</strong></p>



<p>Veja como os dois mundos se mapeiam perfeitamente na mesma infraestrutura:</p>



<figure class="wp-block-table"><table><thead><tr><td><strong>A Tabela Física no Banco</strong></td><td><strong>Como o Engenheiro chama (Medallion)</strong></td><td><strong>Como o Negócio chama (Governança)</strong></td><td><strong>O que acontece ali na prática?</strong></td></tr></thead><tbody><tr><td><strong>Pasta <code>raw_vendas</code></strong> no Data Lake</td><td><strong>Bronze</strong> (Porque o dado está cru, recém-chegado da API).</td><td><strong>SOR</strong> (System of Record &#8211; O espelho exato do sistema que originou a venda).</td><td>É o backup intocável. Se der problema, todo mundo volta aqui para auditar o que aconteceu originalmente.</td></tr><tr><td><strong>Tabela <code>clientes_limpos</code></strong> no BigQuery</td><td><strong>Silver</strong> (Porque o código já removeu duplicatas e arrumou os CPFs).</td><td><strong>SOT</strong> (Source of Truth &#8211; Porque o negócio decidiu que essa tabela é a verdade corporativa sobre quem é cliente).</td><td>É a base central da empresa. Todos os departamentos devem ler daqui para não haver divergência de números.</td></tr><tr><td><strong>Tabela <code>vendas_agregadas_rh</code></strong></td><td><strong>Gold</strong> (Porque cruzou vendas com a tabela de funcionários para calcular comissões).</td><td><strong>SPEC</strong> (System of Engagement/Specific &#8211; Porque foi feita <em>especificamente</em> para o RH calcular a folha de pagamento).</td><td>É o dado final, resumido e otimizado apenas para quem vai consumir aquele painel ou relatório.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Resumo:</h3>



<ul class="wp-block-list">
<li>Você fala <strong>Bronze, Silver e Gold</strong> quando está discutindo com outro desenvolvedor sobre <em>como o código vai transformar o arquivo</em>.</li>



<li>Você fala <strong>SOR, SOT e SPEC</strong> quando o Diretor pergunta: <em>&#8220;De onde veio esse número e por que eu deveria confiar nele?&#8221;</em>.</li>
</ul>
<p>O post <a href="https://datauniverse.com.br/arquitetura-medallion-bronze-silver-gold-x-modelo-sor-sot-e-spec/">Arquitetura Medallion (Bronze, Silver, Gold) x Modelo SOR, SOT e SPEC</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/arquitetura-medallion-bronze-silver-gold-x-modelo-sor-sot-e-spec/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Monólitos x Microserviços</title>
		<link>https://datauniverse.com.br/monolitos-x-microservicos/</link>
					<comments>https://datauniverse.com.br/monolitos-x-microservicos/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 00:44:08 +0000</pubDate>
				<category><![CDATA[Arquitetura de Dados]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=3030</guid>

					<description><![CDATA[<p>Para entender a diferença entre Monólitos e Microsserviços, a melhor forma é imaginar a organização de uma cozinha, desde uma pequena lanchonete até a praça de alimentação de um shopping. Imagine um restaurante. Num monólito, existe um único chef que anota o pedido, cozinha, serve e lava a louça, tudo numa cozinha só. É simples, [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/monolitos-x-microservicos/">Monólitos x Microserviços</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Para entender a diferença entre <strong>Monólitos</strong> e <strong>Microsserviços</strong>, a melhor forma é imaginar a organização de uma cozinha, desde uma pequena lanchonete até a praça de alimentação de um shopping.</p>



<p>Imagine um restaurante. Num <strong>monólito</strong>, existe um único chef que anota o pedido, cozinha, serve e lava a louça, tudo numa cozinha só. <mark style="background-color:#fcb900" class="has-inline-color">É simples, eficiente para começar, mas se o chef adoecer, o restaurante para. </mark></p>



<p>Num sistema de <strong>microserviços</strong>, há especialistas: um maître, um garçom, um grelheiro, um confeiteiro e um lavador de louças, cada um faz sua parte de forma independente, se comunicando para entregar o prato ao cliente. <mark style="background-color:#fcb900" class="has-inline-color">Mais complexo de coordenar, mas muito mais resiliente e escalável.</mark></p>



<h2 class="wp-block-heading">O Monólito: A &#8220;Cozinha de um único Chef&#8221;</h2>



<p>No modelo monolítico, toda a aplicação é construída como uma <strong>unidade única e indivisível</strong>. Todas as funções (pedidos, pagamentos, estoque, entrega) estão no mesmo código, rodam no mesmo servidor e compartilham o mesmo banco de dados.</p>



<p><strong>Como funciona na prática:</strong> Imagine um pequeno restaurante onde o mesmo chef recebe o pedido, cozinha, lava a louça e faz o caixa.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="687" height="420" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-13.png" alt="" class="wp-image-3032" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-13.png 687w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-13-300x183.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<p>Repare que os três módulos internos vivem dentro do mesmo processo. Um bug em &#8220;Acesso a dados&#8221; pode derrubar a &#8220;Apresentação&#8221;. Um deploy de qualquer módulo exige redeployar o sistema inteiro.</p>



<p><strong>Vantagens do monólito:</strong></p>



<p>É muito simples de começar. É fácil de testar e colocar no ar (deploy), pois é apenas um &#8220;pacote&#8221;.</p>



<ul class="wp-block-list">
<li>Simples de desenvolver no início um único projeto, uma única base de código</li>



<li>Fácil de testar localmente</li>



<li>Sem latência de rede entre módulos (chamadas são em memória)</li>



<li>Deploy simples: um artefato, um servidor</li>
</ul>



<p><strong>Desvantagens do monólito:</strong></p>



<p>Se o restaurante lota e você precisa de mais agilidade na cozinha, você não consegue contratar &#8220;apenas um cozinheiro&#8221;. Você teria que clonar o restaurante inteiro (com caixa, pia e balcão novos) só para fritar mais batatas. Se o chef tropeça e se machuca, o restaurante inteiro para.</p>



<ul class="wp-block-list">
<li>Qualquer falha pode derrubar tudo</li>



<li>Escalar exige replicar a aplicação inteira, mesmo que só uma parte precise de mais recursos</li>



<li>Times grandes brigam pela mesma base de código</li>



<li>Com o tempo, o código fica acoplado e difícil de manter (o famoso &#8220;big ball of mud&#8221;)</li>
</ul>



<h2 class="wp-block-heading">Microsserviços: A &#8220;Praça de Alimentação&#8221;</h2>



<p>Na arquitetura de microsserviços, a aplicação é dividida em <strong>vários pequenos serviços independentes</strong> que se comunicam entre si (geralmente via APIs ou Mensageria). Cada serviço cuida de uma única função de negócio e pode ter seu próprio banco de dados e tecnologia.</p>



<p>Eles se comunicam via HTTP/REST, gRPC ou mensageria (Kafka, RabbitMQ).</p>



<p><strong>Como funciona na prática:</strong> Imagine uma praça de alimentação. Existe um quiosque só para Bebidas, um só para Hambúrgueres e um Totem central para Pagamentos.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="681" height="292" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-14.png" alt="" class="wp-image-3033" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-14.png 681w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-14-300x129.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></figure>



<p>Cada serviço é completamente independente. O serviço de Pedidos pode cair sem afetar o de Produtos. Você pode escalar só o serviço de Pagamentos em datas como Black Friday, sem tocar nos outros.</p>



<p><strong>Vantagens dos microserviços:</strong></p>



<p>Se a demanda por hambúrgueres aumenta, você coloca mais chapas apenas naquele quiosque, sem mexer no setor de bebidas. Se o sistema de bebidas der erro, as pessoas ainda conseguem comprar comida e pagar.</p>



<ul class="wp-block-list">
<li>Escalabilidade granular: escale só o que precisa</li>



<li>Falhas são isoladas: um serviço cai sem derrubar os outros</li>



<li>Times podem trabalhar de forma independente em serviços diferentes</li>



<li>Cada serviço pode usar a linguagem e o banco de dados mais adequados para seu problema</li>



<li>Deploy independente por serviço</li>
</ul>



<p><strong>Desvantagens dos microserviços:</strong></p>



<p>Agora você precisa de uma logística complexa para que os pedidos cheguem corretamente de um quiosque ao outro. A comunicação entre os serviços é o ponto mais difícil de gerenciar.</p>



<ul class="wp-block-list">
<li>Complexidade operacional muito maior (Kubernetes, service mesh, monitoramento distribuído)</li>



<li>Latência de rede nas chamadas entre serviços</li>



<li>Transações distribuídas são difíceis (não tem <code>BEGIN TRANSACTION</code> entre bancos diferentes)</li>



<li>Debugging é mais difícil: um erro pode atravessar 5 serviços</li>



<li>Overhead de infraestrutura significativo</li>
</ul>



<h2 class="wp-block-heading">Comparativo Direto</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Característica</strong></td><td><strong>Monólito</strong></td><td><strong>Microsserviços</strong></td></tr></thead><tbody><tr><td><strong>Desenvolvimento</strong></td><td>Simples e rápido no início.</td><td>Lento e complexo para configurar.</td></tr><tr><td><strong>Escalabilidade</strong></td><td>Vertical (precisa de uma máquina maior).</td><td>Horizontal (adiciona mais máquinas pequenas).</td></tr><tr><td><strong>Falhas</strong></td><td>Uma falha pode derrubar o sistema todo.</td><td>Falhas são isoladas em um serviço.</td></tr><tr><td><strong>Tecnologia</strong></td><td>Uma única stack (ex: Tudo em Java).</td><td>Cada serviço pode usar uma linguagem diferente.</td></tr><tr><td><strong>Deployment</strong></td><td>Atualiza tudo de uma vez.</td><td>Atualiza cada peça independentemente.</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="638" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-12-1024x638.png" alt="" class="wp-image-3031" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-12-1024x638.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-12-300x187.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-12-768x479.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-12.png 1216w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">O ponto crítico que ninguém conta: A falácia do &#8220;começa com microserviços&#8221;</h2>



<p><mark style="background-color:#fcb900" class="has-inline-color">Um erro clássico é começar um projeto novo já com microserviços. O problema é que você ainda não sabe onde estão as fronteiras naturais do seu domínio</mark>. Martin Fowler chama isso de &#8220;distributed monolith&#8221;: você tem toda a complexidade dos microserviços, sem nenhum dos benefícios os serviços ficam tão acoplados que um deploy de um exige deploy de todos os outros.</p>



<p>A abordagem recomendada é começar com um monólito bem estruturado e extrair microserviços conforme a necessidade real aparecer.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Critério</th><th class="has-text-align-left" data-align="left">Monólito</th><th class="has-text-align-left" data-align="left">Microserviços</th><th class="has-text-align-left" data-align="left">Vence</th></tr></thead><tbody><tr><td>Complexidade inicial</td><td>Baixa. Um projeto, um deploy, um banco.</td><td>Alta. Orquestração, rede, monitoramento distribuído.</td><td>Monólito</td></tr><tr><td>Escalabilidade</td><td>Escala a aplicação inteira, mesmo que o gargalo seja um módulo só.</td><td>Escala apenas o serviço que precisa de mais recursos.</td><td>Micro</td></tr><tr><td>Resiliência</td><td>Falha num módulo pode derrubar tudo.</td><td>Falhas são isoladas por serviço.</td><td>Micro</td></tr><tr><td>Velocidade de dev</td><td>Rápido no início. Lento quando o código cresce e fica acoplado.</td><td>Lento no início (infra). Rápido quando times são grandes e independentes.</td><td>Depende</td></tr><tr><td>Deploy</td><td>Um artefato. Simples, mas qualquer mudança exige redeployar tudo.</td><td>Deploy independente por serviço. Risco menor por mudança.</td><td>Micro</td></tr><tr><td>Debugging</td><td>Stack trace local. Fácil de reproduzir.</td><td>Trace distribuído. Precisa de ferramentas como Jaeger, Zipkin.</td><td>Monólito</td></tr><tr><td>Transações</td><td>ACID nativo com um banco. Rollback trivial.</td><td>Sem transações distribuídas nativas. Precisa de Saga pattern.</td><td>Monólito</td></tr><tr><td>Custo de infra</td><td>Baixo. Um ou poucos servidores.</td><td>Alto. Kubernetes, service mesh, múltiplos bancos, observabilidade.</td><td>Monólito</td></tr><tr><td>Tamanho do time</td><td>Ideal para times pequenos (1–15 devs).</td><td>Justificado com times grandes e múltiplos squads independentes.</td><td>Depende</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Qual escolher?</h2>



<ul class="wp-block-list">
<li><strong>Escolha Monólito se:</strong> Você está criando um MVP (Produto Mínimo Viável), tem uma equipe pequena ou a aplicação não é absurdamente complexa. <strong>Dica:</strong> Comece como um &#8220;Monólito Modular&#8221; bem organizado.</li>



<li><strong>Escolha Microsserviços se:</strong> Sua aplicação é gigante (nível Netflix, Uber ou Nubank), você tem dezenas de times de desenvolvedores e precisa escalar partes diferentes do sistema de forma independente.</li>
</ul>



<p>Existe uma heurística simples que resume bem quando migrar:</p>



<p><strong>Fique no monólito enquanto:</strong> O time for pequeno, o produto ainda estiver buscando product-market fit, ou você conseguir deployar sem travar outros times.</p>



<p><strong>Considere microserviços quando:</strong> Times diferentes estão se bloqueando para deployar, uma parte do sistema tem exigências de escala radicalmente diferentes das outras (ex: serviço de busca vs serviço de autenticação), ou a resiliência de partes críticas vira um requisito de negócio.</p>



<p>Netflix, Amazon e Uber não começaram com microserviços, todos começaram como monólitos e migraram conforme a necessidade. Isso diz muito sobre a ordem certa de fazer as coisas.</p>
<p>O post <a href="https://datauniverse.com.br/monolitos-x-microservicos/">Monólitos x Microserviços</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/monolitos-x-microservicos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Views e Materialized Views em Bancos de Dados</title>
		<link>https://datauniverse.com.br/views-em-bancos-de-dados/</link>
					<comments>https://datauniverse.com.br/views-em-bancos-de-dados/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Tue, 24 Mar 2026 00:21:46 +0000</pubDate>
				<category><![CDATA[Otimização de Performance]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=3023</guid>

					<description><![CDATA[<p>No desenvolvimento e na engenharia de dados, nem sempre queremos (ou devemos) dar acesso direto às tabelas brutas do banco de dados. Às vezes, uma tabela é complexa demais, contém informações sensíveis ou exige JOINs exaustivos que os analistas precisam repetir todo dia. Para resolver isso, utilizamos as Views (ou Visões). O que é uma [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/views-em-bancos-de-dados/">Views e Materialized Views em Bancos de Dados</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>No desenvolvimento e na engenharia de dados, nem sempre queremos (ou devemos) dar acesso direto às tabelas brutas do banco de dados. Às vezes, uma tabela é complexa demais, contém informações sensíveis ou exige JOINs exaustivos que os analistas precisam repetir todo dia.</p>



<p>Para resolver isso, utilizamos as <strong>Views</strong> (ou Visões).</p>



<h2 class="wp-block-heading">O que é uma View?</h2>



<p>Uma <strong>view</strong> (ou visão) é uma tabela virtual criada a partir de uma consulta SQL. <mark style="background-color:#fcb900" class="has-inline-color">Ela não armazena dados por si mesma</mark>, em vez disso, é uma &#8220;janela&#8221; que sempre exibe o resultado de uma query pré-definida, como se fosse uma tabela real.</p>



<p>Pense em uma view como um atalho salvo para uma consulta complexa. Quando você consulta uma view, o banco de dados executa a query por trás dela e retorna o resultado, como se você estivesse consultando uma tabela comum.</p>



<p>Veja como uma view se posiciona na arquitetura de um banco de dados:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="678" height="325" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-11.png" alt="" class="wp-image-3026" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-11.png 678w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-11-300x144.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></figure>



<h2 class="wp-block-heading">Por que criar uma view?</h2>



<p><strong>1. Simplicidade e reutilização</strong></p>



<p>Queries longas e com muitos <code>JOIN</code>s podem ser encapsuladas em uma view e reutilizadas em vários lugares, sem repetição de código.</p>



<p><strong>2. Segurança e controle de acesso</strong></p>



<p>Views permitem expor apenas os dados que um usuário ou sistema pode ver, sem dar acesso direto às tabelas.</p>



<p><strong>3. Abstração e manutenção</strong></p>



<p>Se a estrutura do banco mudar, você atualiza apenas a view — as aplicações que a consomem não precisam saber o que mudou por baixo.</p>



<h2 class="wp-block-heading">Como criar uma view: Exemplos práticos</h2>



<p><strong>Exemplo 1 — Criando uma view simples</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Criando uma view simples
CREATE VIEW resumo_clientes AS
SELECT
    c.id,
    c.nome,
    COUNT(p.id) AS total_pedidos,
    SUM(p.valor) AS valor_total
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.id, c.nome;

-- Consultando a view como se fosse uma tabela
SELECT * FROM resumo_clientes WHERE valor_total > 1000;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Criando uma view simples</span></span>
<span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">VIEW</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">resumo_clientes</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">AS</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">c</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">id</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">c</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">nome</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">COUNT</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">p</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">id</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> total_pedidos,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">SUM</span><span style="color: #F6F6F4">(</span><span style="color: #BF9EEE">p</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">valor</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> valor_total</span></span>
<span class="line"><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> clientes c</span></span>
<span class="line"><span style="color: #F286C4">LEFT JOIN</span><span style="color: #F6F6F4"> pedidos p </span><span style="color: #F286C4">ON</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">p</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">cliente_id</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">c</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">id</span></span>
<span class="line"><span style="color: #F286C4">GROUP BY</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">c</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">id</span><span style="color: #F6F6F4">, </span><span style="color: #BF9EEE">c</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">nome</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">-- Consultando a view como se fosse uma tabela</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> resumo_clientes </span><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> valor_total </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1000</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p><strong>Exemplo 2 — relatório de vendas por mês:</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>CREATE VIEW vendas_mensais AS
SELECT
    DATE_TRUNC('month', data_pedido) AS mes,
    COUNT(*) AS quantidade_pedidos,
    SUM(total) AS receita_total,
    AVG(total) AS ticket_medio
FROM pedidos
WHERE status = 'concluido'
GROUP BY DATE_TRUNC('month', data_pedido)
ORDER BY mes DESC;

-- Uso:
SELECT * FROM vendas_mensais WHERE mes >= '2024-01-01';</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">VIEW</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">vendas_mensais</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">AS</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span></span>
<span class="line"><span style="color: #F6F6F4">    DATE_TRUNC(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">month</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, data_pedido) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> mes,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">COUNT</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> quantidade_pedidos,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">SUM</span><span style="color: #F6F6F4">(total) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> receita_total,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">AVG</span><span style="color: #F6F6F4">(total) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> ticket_medio</span></span>
<span class="line"><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> pedidos</span></span>
<span class="line"><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">status</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">concluido</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #F286C4">GROUP BY</span><span style="color: #F6F6F4"> DATE_TRUNC(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">month</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, data_pedido)</span></span>
<span class="line"><span style="color: #F286C4">ORDER BY</span><span style="color: #F6F6F4"> mes </span><span style="color: #F286C4">DESC</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">-- Uso:</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> vendas_mensais </span><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> mes </span><span style="color: #F286C4">&gt;=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2024-01-01</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p>Neste vídeo, falo sobre como criar uma View no phpMyAdmin para otimizar consultas no banco de dados de forma simples e eficiente:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="O que é uma View? Como criar uma View no PhpMyAdmin" width="1290" height="726" src="https://www.youtube.com/embed/bW_8ydv4KTc?start=98&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Materialized Views: Quando performance importa</h2>



<p>Views comuns executam a query toda vez que são consultadas. Para queries muito pesadas, existe o conceito de <strong>materialized view</strong>, que armazena fisicamente o resultado e pode ser atualizada periodicamente.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- PostgreSQL: criando uma materialized view
CREATE MATERIALIZED VIEW estatisticas_diarias AS
SELECT
    DATE(criado_em) AS dia,
    COUNT(*) AS novos_usuarios,
    SUM(receita) AS receita_do_dia
FROM eventos
GROUP BY DATE(criado_em);

-- Atualizando os dados armazenados
REFRESH MATERIALIZED VIEW estatisticas_diarias;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- PostgreSQL: criando uma materialized view</span></span>
<span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> MATERIALIZED VIEW estatisticas_diarias </span><span style="color: #F286C4">AS</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">DATE</span><span style="color: #F6F6F4">(criado_em) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> dia,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">COUNT</span><span style="color: #F6F6F4">(</span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> novos_usuarios,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">SUM</span><span style="color: #F6F6F4">(receita) </span><span style="color: #F286C4">AS</span><span style="color: #F6F6F4"> receita_do_dia</span></span>
<span class="line"><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> eventos</span></span>
<span class="line"><span style="color: #F286C4">GROUP BY</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">DATE</span><span style="color: #F6F6F4">(criado_em);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">-- Atualizando os dados armazenados</span></span>
<span class="line"><span style="color: #F6F6F4">REFRESH MATERIALIZED VIEW estatisticas_diarias;</span></span></code></pre></div>



<p>É importante conhecer essa diferença, especialmente se você trabalha com grandes volumes de dados:</p>



<ul class="wp-block-list">
<li><strong>View Comum:</strong> É apenas um &#8220;atalho&#8221;. Toda vez que você a chama, o banco executa o SELECT original. Se a tabela base mudar, a View reflete a mudança na hora.</li>



<li><strong>Materialized View (View Materializada):</strong> Muito comum em Data Warehouses (como Snowflake, Oracle ou Redshift). Ela <strong>salva o resultado</strong> da consulta fisicamente no disco.
<ul class="wp-block-list">
<li><strong>Vantagem:</strong> É infinitamente mais rápida para leitura em tabelas gigantes.</li>



<li><strong>Desvantagem:</strong> Os dados podem ficar desatualizados (é necessário dar um &#8220;refresh&#8221; manual ou agendado para atualizar os dados).</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Qual é a diferença entre uma View, um Tabela e uma consulta AD-HOC?</h2>



<ul class="wp-block-list">
<li><strong>Tabelas</strong>: São estruturas físicas que armazenam dados diretamente no banco. Elas são a base de qualquer banco de dados relacional.</li>



<li><strong>Views</strong>: São consultas armazenadas que não armazenam dados por si mesmas, servindo como uma camada de abstração para facilitar o acesso a informações complexas.</li>



<li><strong>Consultas ADHOC:</strong> Uma consulta SQL que é executada de forma esporádica ou para responder a uma necessidade específica, sem estar previamente salva como uma view ou estrutura fixa.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="572" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-10-1024x572.png" alt="" class="wp-image-3025" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-10-1024x572.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-10-300x167.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-10-768x429.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-10.png 1177w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>💡 <strong>Quando usar uma View?</strong><strong><br></strong>Se você deseja simplificar consultas, ocultar dados sensíveis ou organizar melhor as informações sem criar cópias dos dados.</p>



<p>💡 <strong>Quando usar uma Tabela?</strong><strong><br></strong>Sempre que precisar armazenar dados de forma persistente e garantir que sejam acessados com alta performance.</p>



<p>💡 <strong>Quando usar uma Consulta ADHOC?</strong><strong><br></strong>Sempre que precisar responder alguma pergunta temporária que não precisa ser consumida posteriormente</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Situação</th><th>Usar view?</th></tr></thead><tbody><tr><td>Query complexa repetida em vários lugares</td><td>✅ Sim</td></tr><tr><td>Controle de acesso a colunas sensíveis</td><td>✅ Sim</td></tr><tr><td>Simplificar a interface para outras equipes</td><td>✅ Sim</td></tr><tr><td>Query pesada consultada com muita frequência</td><td>✅ Materialized view</td></tr><tr><td>Precisa inserir/atualizar dados diretamente</td><td>⚠️ Com cuidado (views simples permitem, views com JOIN geralmente não)</td></tr></tbody></table></figure>
<p>O post <a href="https://datauniverse.com.br/views-em-bancos-de-dados/">Views e Materialized Views em Bancos de Dados</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/views-em-bancos-de-dados/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Índices de Banco de Dados (Database Indexes)</title>
		<link>https://datauniverse.com.br/indices-de-banco-de-dados-database-indexes/</link>
					<comments>https://datauniverse.com.br/indices-de-banco-de-dados-database-indexes/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 12 Mar 2026 02:15:15 +0000</pubDate>
				<category><![CDATA[Otimização de Performance]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=3013</guid>

					<description><![CDATA[<p>Se você já precisou buscar uma informação em uma tabela com milhões de linhas e a consulta demorou minutos (ou até horas) para retornar, você já sentiu na pele a falta de um bom índice. Na Engenharia de Dados e Administração de Bancos de Dados (DBA), os Índices são a principal ferramenta para otimizar a [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/indices-de-banco-de-dados-database-indexes/">Índices de Banco de Dados (Database Indexes)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Se você já precisou buscar uma informação em uma tabela com milhões de linhas e a consulta demorou minutos (ou até horas) para retornar, você já sentiu na pele a falta de um bom índice. Na Engenharia de Dados e Administração de Bancos de Dados (DBA), os <strong>Índices</strong> são a principal ferramenta para otimizar a performance de leitura.</p>



<h2 class="wp-block-heading">A Analogia Clássica: O Índice de um Livro</h2>



<p>Imagine que você está lendo um livro de História de 1.000 páginas e quer encontrar todas as menções a &#8220;Júlio César&#8221;.</p>



<ul class="wp-block-list">
<li><strong>Sem um índice (Full Table Scan):</strong> <mark style="background-color:#fcb900" class="has-inline-color">Você teria que ler o livro inteiro, da página 1 à 1.000, procurando o nome. No banco de dados, isso se chama <em>Full Table Scan</em> (Varredura Completa da Tabela)</mark>, e é o pior cenário para a performance.</li>



<li><strong>Com um índice (Index Scan):</strong> Você vai até as últimas páginas do livro, no Índice Remissivo, procura a letra &#8220;J&#8221;, acha &#8220;Júlio César&#8221; e vê que ele é citado nas páginas 45, 112 e 890. Você vai direto a essas páginas.</li>
</ul>



<p>Um índice de banco de dados faz exatamente isso: ele cria uma <strong>estrutura de dados separada</strong> (geralmente uma árvore chamada <strong>B-Tree</strong>) que mantém os valores de uma coluna específica ordenados, junto com um &#8220;ponteiro&#8221; (o número da página) que diz exatamente onde a linha inteira está gravada no disco.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1011" height="454" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-6.png" alt="" class="wp-image-3015" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-6.png 1011w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-6-300x135.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-6-768x345.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1009" height="347" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-7.png" alt="" class="wp-image-3016" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-7.png 1009w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-7-300x103.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-7-768x264.png 768w" sizes="(max-width: 1009px) 100vw, 1009px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1008" height="435" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-8.png" alt="" class="wp-image-3017" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-8.png 1008w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-8-300x129.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-8-768x331.png 768w" sizes="(max-width: 1008px) 100vw, 1008px" /></figure>



<h2 class="wp-block-heading">O Preço a se Pagar (Trade-offs)</h2>



<p>Se os índices deixam tudo mais rápido, por que não colocamos índices em todas as colunas de todas as tabelas?</p>



<p>Porque <strong>índices não são mágicos; eles têm um custo</strong>.</p>



<ol start="1" class="wp-block-list">
<li><strong>Overhead de Escrita (Lentidão no <a href="https://datauniverse.com.br/crud-create-read-update-e-delete/">CRUD</a>):</strong> Toda vez que você faz um <code>INSERT</code>, <code>UPDATE</code> ou <code>DELETE</code> na tabela, o banco de dados precisa atualizar a tabela principal <strong>E</strong> reorganizar a estrutura do índice. Muitos índices deixam as gravações muito lentas.</li>



<li><strong>Consumo de Disco:</strong> O índice é uma cópia ordenada dos dados daquela coluna. Ele ocupa espaço físico no servidor. Um banco de dados super indexado pode ter seus índices ocupando mais gigabytes do que os próprios dados reais.</li>
</ol>



<h2 class="wp-block-heading">Quando Usar (e Quando NÃO Usar) Índices</h2>



<p>A arte da otimização de banco de dados está em saber equilibrar a balança entre a velocidade de leitura e o custo de escrita.</p>



<p><strong>Onde você DEVE criar índices:</strong></p>



<ul class="wp-block-list">
<li><strong>Chaves Primárias (PK) e Estrangeiras (FK):</strong> (Bancos relacionais geralmente criam o índice da PK automaticamente). Essencial para que os <code>JOINs</code> entre tabelas sejam rápidos.</li>



<li><strong>Colunas muito usadas no <code>WHERE</code>:</strong> Se você pesquisa clientes pelo CPF o tempo todo, a coluna <code>cpf</code> precisa de um índice.</li>



<li><strong>Colunas usadas em <code>ORDER BY</code> ou <code>GROUP BY</code>:</strong> Como o índice já guarda os dados de forma ordenada, o banco não gasta processamento extra para ordenar o resultado.</li>
</ul>



<p><strong>Onde você NÃO DEVE criar índices:</strong></p>



<ul class="wp-block-list">
<li><strong>Tabelas muito pequenas:</strong> Se a tabela tem 500 linhas, o banco lê tudo em milissegundos. O índice só gastaria espaço.</li>



<li><strong>Colunas de Baixa Cardinalidade:</strong> Colunas com poucos valores distintos, como <code>sexo</code> (M/F) ou <code>status</code> (Ativo/Inativo). O índice não ajuda a filtrar muita coisa e o banco pode acabar optando pelo <em>Full Table Scan</em> de qualquer jeito.</li>



<li><strong>Tabelas com altíssimo volume de inserção (<a href="https://datauniverse.com.br/logs-logging/">Logs</a>):</strong> Se uma tabela recebe milhares de <code>INSERTS</code> por segundo e é pouco lida, um índice vai criar um gargalo de gravação.</li>
</ul>



<h2 class="wp-block-heading">Exemplos Práticos em Código SQL</h2>



<p>Vamos ver como aplicar isso na prática usando SQL. Imagine uma tabela <code>Clientes</code> com milhões de registros.</p>



<h3 class="wp-block-heading">1. Criando um Índice Simples</h3>



<p>Se o time de vendas sempre busca clientes pelo e-mail, criar um índice nessa coluna vai transformar uma busca que demorava 10 segundos em algo que leva 5 milissegundos.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Criando um índice simples na coluna email
CREATE INDEX idx_clientes_email 
ON Clientes (email);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Criando um índice simples na coluna email</span></span>
<span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">INDEX</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">idx_clientes_email</span><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #F286C4">ON</span><span style="color: #F6F6F4"> Clientes (email);</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">2. Criando um Índice Único (Unique Index)</h3>



<p>Além de acelerar a busca, ele garante a integridade dos dados, impedindo que dois clientes sejam cadastrados com o mesmo CPF.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Criando um índice único na coluna cpf
CREATE UNIQUE INDEX idx_clientes_cpf 
ON Clientes (cpf);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Criando um índice único na coluna cpf</span></span>
<span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">UNIQUE INDEX</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">idx_clientes_cpf</span><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #F286C4">ON</span><span style="color: #F6F6F4"> Clientes (cpf);</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">3. Criando um Índice Composto (Composite Index)</h3>



<p>Se você tem uma consulta que SEMPRE filtra por duas colunas ao mesmo tempo (ex: buscar vendas de uma loja específica em uma data específica), você pode criar um índice que combina as duas colunas.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Índice composto: a ordem das colunas importa!
CREATE INDEX idx_vendas_loja_data 
ON Vendas (id_loja, data_venda);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Índice composto: a ordem das colunas importa!</span></span>
<span class="line"><span style="color: #F286C4">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">INDEX</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">idx_vendas_loja_data</span><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #F286C4">ON</span><span style="color: #F6F6F4"> Vendas (id_loja, data_venda);</span></span>
<span class="line"></span></code></pre></div>



<p><em>(Nota: Esse índice é excelente para consultas como <code>WHERE id_loja = 5 AND data_venda = '2026-03-11'</code>, mas não ajudaria em nada se você buscasse APENAS pela <code>data_venda</code>).</em></p>



<h3 class="wp-block-heading">4. Removendo um Índice</h3>



<p>Se você percebeu que um índice não está sendo usado e está apenas atrasando suas inserções, você deve excluí-lo.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Removendo o índice do banco de dados
DROP INDEX idx_clientes_email;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Removendo o índice do banco de dados</span></span>
<span class="line"><span style="color: #F286C4">DROP</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">INDEX</span><span style="color: #F6F6F4"> idx_clientes_email;</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><strong>DataWarehouses Modernos não utilizam índices tradicionais.</strong></h2>



<p>Bancos de dados tradicionais (OLTP) usam índices B-Tree para encontrar uma agulha no palheiro (uma linha específica). <mark style="background-color:#fcb900" class="has-inline-color">Já o BigQuery e o Snowflake são bancos <strong>Orientados a Colunas (Columnar Databases)</strong> projetados para análise massiva de dados (OLAP).</mark></p>



<p>Em vez de índices, eles usam três conceitos automáticos:</p>



<ol start="1" class="wp-block-list">
<li><strong>Micro-particionamento (Automático):</strong> No Snowflake, por exemplo, os dados são divididos em arquivos minúsculos chamados <em>micro-partitions</em>. O sistema sabe o valor mínimo e máximo de cada coluna em cada arquivo e descarta o que não precisa ler.</li>



<li><strong>Metadata Cache:</strong> O banco mantém metadados sobre onde cada dado está. Ele não precisa de você para &#8220;criar&#8221; o caminho; ele faz isso sozinho.</li>



<li><strong>Clustering:</strong> É o &#8220;primo&#8221; do índice nessas ferramentas. Você define uma <code>Clustering Key</code> para dizer ao banco: &#8220;Organize esses dados fisicamente por data e região&#8221;. Isso agrupa os dados de forma eficiente.</li>
</ol>



<h3 class="wp-block-heading">Como saber se uma tabela tem &#8220;índices&#8221; (ou otimizações) em Data Warehouses modernos</h3>



<p>Se você está em um banco tradicional, você procura por <strong>Indexes</strong>. Se você está em BigQuery/Snowflake, você procura por <strong>Clustering</strong> e <strong><a href="https://datauniverse.com.br/sharding-vs-partitioning/">Partitioning</a></strong>.</p>



<h4 class="wp-block-heading">1. No Snowflake</h4>



<p>O Snowflake não tem índices. Se você quer saber como uma tabela foi otimizada, você deve checar as <strong>Clustering Keys</strong>.</p>



<ul class="wp-block-list">
<li><strong>Via interface:</strong> Vá na aba &#8220;Data&#8221;, selecione a tabela e procure por &#8220;Clustering Information&#8221;.</li>



<li><strong>Via código SQL:</strong></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Mostra detalhes da tabela, incluindo as chaves de agrupamento (clustering)
SHOW TABLES LIKE 'nome_da_minha_tabela';
-- Verifique a coluna 'cluster_by' no resultado.
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Mostra detalhes da tabela, incluindo as chaves de agrupamento (clustering)</span></span>
<span class="line"><span style="color: #F6F6F4">SHOW TABLES </span><span style="color: #F286C4">LIKE</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">nome_da_minha_tabela</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #7B7F8B">-- Verifique a coluna &#39;cluster_by&#39; no resultado.</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading">2. No BigQuery</h4>



<p>O BigQuery usa <strong>Partitioning</strong> (geralmente por data) e <strong>Clustering</strong>.</p>



<ul class="wp-block-list">
<li><strong>Via interface:</strong> Clique na tabela e vá na aba <strong>&#8220;Details&#8221;</strong>. Procure pelas seções &#8220;Table info&#8221; (onde diz se é particionada) e &#8220;Schema&#8221; (onde as colunas de cluster aparecem com um ícone específico).</li>



<li><strong>Via código SQL:</strong></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Consulta os metadados das tabelas no dataset
SELECT table_name, ddl 
FROM `meu_projeto.meu_dataset.INFORMATION_SCHEMA.TABLES`
WHERE table_name = 'nome_da_tabela';
-- No DDL (o código de criação), você verá as cláusulas PARTITION BY e CLUSTER BY.
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Consulta os metadados das tabelas no dataset</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> table_name, ddl </span></span>
<span class="line"><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">`</span><span style="color: #E7EE98">meu_projeto.meu_dataset.INFORMATION_SCHEMA.TABLES</span><span style="color: #DEE492">`</span></span>
<span class="line"><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> table_name </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">nome_da_tabela</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #7B7F8B">-- No DDL (o código de criação), você verá as cláusulas PARTITION BY e CLUSTER BY.</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading">3. Em Bancos Tradicionais (Postgres, SQL Server, MySQL)</h4>



<p>Se você cair em um projeto que usa bancos relacionais comuns, você usa as tabelas de sistema:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Exemplo para PostgreSQL: Lista todos os índices de uma tabela
SELECT * FROM pg_indexes WHERE tablename = 'nome_da_tabela';

-- Exemplo genérico (muitas ferramentas de BI mostram isso na lateral):
-- Procure por uma pasta chamada "Indexes" na árvore de objetos do banco.
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Exemplo para PostgreSQL: Lista todos os índices de uma tabela</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> pg_indexes </span><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> tablename </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">nome_da_tabela</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">-- Exemplo genérico (muitas ferramentas de BI mostram isso na lateral):</span></span>
<span class="line"><span style="color: #7B7F8B">-- Procure por uma pasta chamada &quot;Indexes&quot; na árvore de objetos do banco.</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading">Dica para Arquitetos e Engenheiros</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Índices são a ponte entre um sistema que &#8220;funciona&#8221; e um sistema que <strong>escala</strong>. Em um curso de Engenharia de Dados, esse tema é o divisor de águas que ensina os alunos a pararem de culpar o &#8220;servidor fraco&#8221; e começarem a olhar para a estrutura física das suas consultas.</p>
</blockquote>
<p>O post <a href="https://datauniverse.com.br/indices-de-banco-de-dados-database-indexes/">Índices de Banco de Dados (Database Indexes)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/indices-de-banco-de-dados-database-indexes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CRUD (Create, Read, Update e Delete)</title>
		<link>https://datauniverse.com.br/crud-create-read-update-e-delete/</link>
					<comments>https://datauniverse.com.br/crud-create-read-update-e-delete/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Fri, 06 Mar 2026 21:55:13 +0000</pubDate>
				<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=3004</guid>

					<description><![CDATA[<p>Seja em um aplicativo de celular, em um site de e-commerce ou em um complexo ecossistema de Big Data, quase tudo o que você faz com uma informação se resume a quatro ações básicas. Essas ações formam o acrônimo CRUD, que significa Create, Read, Update e Delete (Criar, Ler, Atualizar e Excluir). O CRUD é [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/crud-create-read-update-e-delete/">CRUD (Create, Read, Update e Delete)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Seja em um aplicativo de celular, em um site de e-commerce ou em um complexo ecossistema de <a href="https://datauniverse.com.br/big-data/">Big Data</a>, quase tudo o que você faz com uma informação se resume a quatro ações básicas. Essas ações formam o acrônimo <mark style="background-color:#fcb900" class="has-inline-color"><strong>CRUD</strong>, que significa <strong>Create, Read, Update e Delete</strong> </mark>(Criar, Ler, Atualizar e Excluir).</p>



<p>O CRUD é o padrão absoluto que define as funções essenciais para o armazenamento persistente de dados em sistemas de software.</p>



<h2 class="wp-block-heading">Entendendo cada letra do CRUD</h2>



<p>Para ilustrar, imagine que você está usando a agenda de contatos do seu smartphone:</p>



<ul class="wp-block-list">
<li><strong>C &#8211; Create (Criar):</strong> É a ação de inserir uma nova informação no sistema.
<ul class="wp-block-list">
<li><em>Exemplo prático:</em> Quando você conhece alguém novo e salva o nome e o número de telefone dessa pessoa na sua agenda.</li>
</ul>
</li>



<li><strong>R &#8211; Read (Ler):</strong> É a ação de consultar, buscar ou recuperar dados que já foram armazenados. É a operação mais executada na maioria dos sistemas.
<ul class="wp-block-list">
<li><em>Exemplo prático:</em> Quando você abre a agenda e pesquisa pelo nome &#8220;João&#8221; para ver qual é o número dele.</li>
</ul>
</li>



<li><strong>U &#8211; Update (Atualizar):</strong> É a ação de modificar um dado que já existe no banco de dados.
<ul class="wp-block-list">
<li><em>Exemplo prático:</em> Quando o João muda de número de telefone e você edita o contato dele na agenda para salvar a informação nova.</li>
</ul>
</li>



<li><strong>D &#8211; Delete (Excluir):</strong> É a ação de remover permanentemente uma informação do sistema.
<ul class="wp-block-list">
<li><em>Exemplo prático:</em> Quando você não fala mais com o João e decide apagar o contato dele do seu celular.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Como o CRUD se traduz na Tecnologia?</h2>



<p>O conceito de CRUD é universal, mas ele ganha &#8220;nomes&#8221; diferentes dependendo de onde o Engenheiro de Dados ou Desenvolvedor está trabalhando.</p>



<p>A tabela abaixo mostra como essas quatro ações conceituais são traduzidas para a linguagem de Banco de Dados Relacional (<strong>SQL</strong>) e para o padrão de comunicação da web (<strong>APIs REST</strong>):</p>



<figure class="wp-block-table"><table><thead><tr><td><strong>Operação CRUD</strong></td><td><strong>O que faz</strong></td><td><strong>Comando SQL (Bancos de Dados)</strong></td><td><strong>Método HTTP (APIs Web)</strong></td></tr></thead><tbody><tr><td><strong>Create</strong></td><td>Insere novos dados</td><td><code>INSERT</code></td><td><code>POST</code></td></tr><tr><td><strong>Read</strong></td><td>Consulta dados existentes</td><td><code>SELECT</code></td><td><code>GET</code></td></tr><tr><td><strong>Update</strong></td><td>Modifica dados existentes</td><td><code>UPDATE</code></td><td><code>PUT</code> ou <code>PATCH</code></td></tr><tr><td><strong>Delete</strong></td><td>Remove dados</td><td><code>DELETE</code></td><td><code>DELETE</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><strong>C</strong>reate (Criar/Inserir)</h2>



<p>A operação de criação é feita através do comando <code>INSERT</code>. Aqui, passamos o nome da tabela, as colunas que queremos preencher e os respectivos valores.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Inserindo um novo aluno na tabela
INSERT INTO Alunos (nome_aluno, matricula, data_nasc)
VALUES ('Felipe Andrade', '2026105', '2004-08-20');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Inserindo um novo aluno na tabela</span></span>
<span class="line"><span style="color: #F286C4">INSERT INTO</span><span style="color: #F6F6F4"> Alunos (nome_aluno, matricula, data_nasc)</span></span>
<span class="line"><span style="color: #F286C4">VALUES</span><span style="color: #F6F6F4"> (</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">Felipe Andrade</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2026105</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2004-08-20</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">);</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><strong>R</strong>ead (Ler/Consultar)</h2>



<p>A leitura é a alma do SQL, feita com o comando <code>SELECT</code>. Podemos buscar todos os dados de uma vez ou filtrar por critérios específicos.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Consultar todos os alunos cadastrados
SELECT * FROM Alunos;

-- Consultar apenas o nome de um aluno específico usando a matrícula
SELECT nome_aluno 
FROM Alunos 
WHERE matricula = '2026105';
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Consultar todos os alunos cadastrados</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> Alunos;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B">-- Consultar apenas o nome de um aluno específico usando a matrícula</span></span>
<span class="line"><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> nome_aluno </span></span>
<span class="line"><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> Alunos </span></span>
<span class="line"><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> matricula </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2026105</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><strong>U</strong>pdate (Atualizar/Alterar)</h2>



<p>O comando <code>UPDATE</code> modifica registros existentes. <strong>Atenção:</strong> É vital usar a cláusula <code>WHERE</code>; caso contrário, você atualizará todos os alunos da tabela de uma só vez (o pesadelo de todo DBA).</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Alterando a data de nascimento do Felipe
UPDATE Alunos
SET data_nasc = '2004-09-20'
WHERE matricula = '2026105';
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Alterando a data de nascimento do Felipe</span></span>
<span class="line"><span style="color: #F286C4">UPDATE</span><span style="color: #F6F6F4"> Alunos</span></span>
<span class="line"><span style="color: #F286C4">SET</span><span style="color: #F6F6F4"> data_nasc </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2004-09-20</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> matricula </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">2026105</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><strong>D</strong>elete (Excluir/Remover)</h2>



<p>A exclusão é feita com o comando <code>DELETE</code>. Assim como no Update, o uso do <code>WHERE</code> é obrigatório para garantir que você está apagando apenas o registro correto.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>-- Removendo o aluno do sistema através do seu ID único
DELETE FROM Alunos
WHERE id_aluno = 5;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">-- Removendo o aluno do sistema através do seu ID único</span></span>
<span class="line"><span style="color: #F286C4">DELETE</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> Alunos</span></span>
<span class="line"><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> id_aluno </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span></code></pre></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><mark style="background-color:#fcb900" class="has-inline-color">Em ambientes de produção, é comum utilizarmos o <strong>Soft Delete</strong>. Em vez de usar o comando <code>DELETE</code> físico, adicionamos uma coluna chamada <code>ativo</code> (booleano).</mark> Para &#8220;apagar&#8221; o usuário, apenas fazemos um <code>UPDATE Alunos SET ativo = false</code>. Isso mantém o histórico e a integridade dos dados para auditoria futura.</p>
</blockquote>



<h3 class="wp-block-heading">Por que o CRUD é tão importante?</h3>



<p>Entender o CRUD é o primeiro passo para projetar qualquer aplicação. Se você modelou um banco de dados (como vimos nas fases Conceitual, <a href="https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/">Lógica e Física</a>) e o seu sistema não consegue realizar pelo menos o <em>Create</em> e o <em>Read</em>, ele não tem utilidade prática.</p>



<p>Além disso, é através da limitação das operações CRUD que implementamos a segurança e o <strong><a href="https://datauniverse.com.br/rbac-role-based-access-control/">RBAC (Role-Based Access Control)</a></strong>. Por exemplo, um estagiário pode ter permissão apenas de <em>Read</em> em uma tabela financeira, enquanto o gerente tem permissão completa de <em>Create, Read, Update e Delete</em>.</p>
<p>O post <a href="https://datauniverse.com.br/crud-create-read-update-e-delete/">CRUD (Create, Read, Update e Delete)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/crud-create-read-update-e-delete/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Modelagem de dados Conceitual, Lógica e Física</title>
		<link>https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/</link>
					<comments>https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 19:48:23 +0000</pubDate>
				<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=2998</guid>

					<description><![CDATA[<p>Modelagem de dados é o processo de criação de uma representação visual de todo um sistema de informação ou de partes dele para comunicar conexões entre pontos de dados e estruturas.&#160; O objetivo é ilustrar os tipos de dados utilizados e armazenados no sistema, as relações entre esses tipos de dados, as formas como os [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/">Modelagem de dados Conceitual, Lógica e Física</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Modelagem de dados é o processo de criação de uma representação visual de todo um sistema de informação ou de partes dele para comunicar conexões entre pontos de dados e estruturas.&nbsp;</p>



<p>O objetivo é ilustrar os tipos de dados utilizados e armazenados no sistema, as <strong>relações</strong> entre esses tipos de dados, as formas como os dados podem ser agrupados e organizados e seus formatos e atributos.</p>



<p>Os modelos de dados são construídos em torno das necessidades do negócio. As regras e os requisitos são definidos antecipadamente através do feedback das partes interessadas do negócio, para que possam ser incorporados no design de um novo sistema ou adaptados na iteração de um sistema existente.</p>



<p>Os dados podem ser modelados em vários níveis de abstração. O processo começa com a coleta de informações sobre os requisitos de negócios das partes interessadas e dos usuários finais.</p>



<p>Essas regras de negócios são então traduzidas em estruturas de dados para formular um projeto concreto de banco de dados.&nbsp;</p>



<p>Um modelo de dados pode ser comparado a um roteiro, um projeto de arquiteto ou qualquer diagrama formal que facilite uma compreensão mais profunda do que está sendo projetado.</p>



<p>A modelagem de dados emprega esquemas padronizados e técnicas formais. Isso fornece uma maneira comum, consistente e previsível de definir e gerenciar recursos de dados em uma organização ou mesmo fora dela.</p>



<p><mark style="background-color:#fcb900" class="has-inline-color">Idealmente, os modelos de dados são documentos vivos que evoluem junto com as mudanças nas necessidades de negócios</mark>. Eles desempenham um papel importante no suporte aos processos de negócios e no planejamento da arquitetura e estratégia de TI. </p>



<ol class="wp-block-list">
<li><strong>Modelo Conceitual:</strong>
<ul class="wp-block-list">
<li>Pergunta: O QUÊ?</li>



<li>Visão do Negócio</li>



<li>Sem Detalhes Técnicos</li>



<li>Entidades e Relacionamentos</li>



<li>Atividade: Reuniões com Usuários</li>
</ul>
</li>



<li><strong>Modelo Lógico:</strong>
<ul class="wp-block-list">
<li>Pergunta: COMO?</li>



<li>Estrutura Lógica</li>



<li>Independente de SGBD</li>



<li>Tabelas, Chaves, Atributos</li>



<li>Atividade: Design do Banco</li>
</ul>
</li>



<li><strong>Modelo Físico:</strong>
<ul class="wp-block-list">
<li>Pergunta: IMPLEMENTAÇÃO</li>



<li>Banco de Dados Real</li>



<li>Específico para SGBD</li>



<li>Índices, Constraints, Tipos</li>



<li>Resultado: Banco Pronto para Usar</li>
</ul>
</li>
</ol>



<p><strong>Progressão Lógica:</strong></p>



<ul class="wp-block-list">
<li>Conceitual → Lógico → Físico</li>



<li>Cada nível adiciona mais detalhe técnico</li>



<li>Do abstrato para o concreto</li>
</ul>



<h2 class="wp-block-heading">Primeiro passo: Entendimento do Negócio</h2>



<p>Imagine que você vai construir uma casa. Você não começa comprando cimento e tijolos no primeiro dia. Primeiro, você desenha um esboço com o arquiteto para entender quantos quartos a casa terá (o conceito). Depois, faz uma planta baixa com as medidas e a disposição das portas (a lógica). Por fim, o engenheiro define a espessura da parede, a fiação e o tipo de encanamento (o físico).</p>



<p>Na Engenharia de Software e de Dados, o processo de criar um banco de dados segue exatamente a mesma lógica. A <strong>Modelagem de Dados</strong> é dividida em três fases: <strong>Conceitual, Lógica e Física</strong>.</p>



<p><strong>Atividades:</strong></p>



<ul class="wp-block-list">
<li>Reuniões com stakeholders para entender o modelo de negócio, processos e objetivos da startup.</li>



<li>Análise de documentos e softwares utilizados pela contabilidade.</li>



<li>Levantamento dos requisitos de dados para cada área da empresa (financeiro, fiscal, clientes, etc.).</li>
</ul>



<p><strong>Exemplo:</strong> Identificar quais dados são necessários para registrar transações financeiras, gerar relatórios fiscais, gerenciar clientes e acompanhar indicadores de desempenho.</p>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="535" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-1024x535.png" alt="" class="wp-image-2999" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-1024x535.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-300x157.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-768x402.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-1536x803.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-2048x1071.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-4-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Modelagem Conceitual: A Visão de Negócio</h3>



<p>O modelo conceitual é o mais alto nível de abstração. O foco aqui não é a tecnologia, mas sim entender as regras de negócio e como as informações se relacionam no mundo real. É um desenho feito para que gerentes, diretores e analistas de negócio consigam entender o sistema sem precisar saber programação.</p>



<p>Os modelos conceituais geralmente são criados como parte do processo de coleta dos requisitos iniciais do projeto. Normalmente, eles incluem classes de entidade (definindo os tipos de coisas que são importantes para o negócio representar no modelo de dados), suas características e restrições, os relacionamentos entre elas e os requisitos relevantes de segurança e integridade de dados.&nbsp;</p>



<p><strong>Objetivo:</strong> Criar uma representação abstrata das entidades, relacionamentos e atributos dos dados, independente de tecnologia.</p>



<p><strong>Atividades:</strong></p>



<ul class="wp-block-list">
<li>Identificação das entidades principais (Cliente, Conta Bancária, Transação Financeira, Plano de Contas, Nota Fiscal, etc.).</li>



<li>Definição dos atributos de cada entidade (nome, CPF/CNPJ, data, valor, descrição, categoria, etc.).</li>



<li>Estabelecimento dos relacionamentos entre as entidades (um cliente possui várias contas bancárias, uma transação está associada a uma conta e a um plano de contas, etc.).</li>



<li>Criação de um Diagrama Entidade-Relacionamento (DER) para visualizar o modelo conceitual.</li>
</ul>



<p><strong>Exemplo Prático:</strong></p>



<p>Em um sistema de biblioteca escolar:</p>



<ul class="wp-block-list">
<li>Um <code>Aluno</code> <strong>pega emprestado</strong> um <code>Livro</code>.</li>



<li>O modelo conceitual mostrará apenas caixas para &#8220;Aluno&#8221; e &#8220;Livro&#8221;, unidas por uma linha representando o &#8220;Empréstimo&#8221;. Não nos importamos com o CPF do aluno ou o ISBN do livro ainda.</li>
</ul>



<p>Esse modelo oferece uma visão geral do que o sistema conterá, como será organizado e quais regras de negócios estão envolvidas.&nbsp;</p>



<h3 class="wp-block-heading">2. Modelagem Lógica: A Estrutura da Informação</h3>



<p>Esse modelo fornece maiores detalhes sobre os conceitos e relações no domínio em consideração.&nbsp;</p>



<p>Os modelos lógicos não especificam nenhum requisito técnico do sistema. Este estágio é frequentemente omitido em práticas ágeis ou DevOps.&nbsp;</p>



<p>Os modelos lógicos podem ser úteis em ambientes de implementação altamente processuais ou para projetos que são orientados a dados por natureza, como design de Data Warehouse ou desenvolvimento de sistemas de relatórios.</p>



<p><strong>Objetivo:</strong> Transformar o modelo conceitual em um modelo mais detalhado, utilizando estruturas e regras específicas.</p>



<p><strong>Atividades:</strong></p>



<ul class="wp-block-list">
<li>Definição das características detalhadas dos dados (tipo de dado, tamanho, formato, constraints, etc.).</li>



<li>Estabelecimento de regras de negócio (validações, gatilhos, etc.).</li>



<li>Criação de um Modelo Lógico de Dados (MLD) utilizando notações como UML.</li>
</ul>



<p>Uma vez aprovado o conceito, avançamos para o modelo lógico. Aqui, começamos a adicionar detalhes estruturais aos dados, mas ainda sem nos prender a um banco de dados específico (como Oracle, MySQL ou PostgreSQL). Este modelo é geralmente construído por Arquitetos de Dados ou Analistas de Sistemas.</p>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Responder <em>como</em> os dados serão estruturados e relacionados.</li>



<li><strong>Elementos adicionados:</strong>
<ul class="wp-block-list">
<li><strong>Atributos:</strong> As características das entidades (ex: Nome, Data de Nascimento, Preço).</li>



<li><strong>Chaves Primárias (PK):</strong> O identificador único de cada registro (ex: ID_Cliente).</li>



<li><strong>Chaves Estrangeiras (FK):</strong> O campo que cria a ligação entre duas tabelas.</li>



<li><strong><a href="https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/">Normalização</a>:</strong> É aqui que aplicamos as Formas Normais (1FN, 2FN, 3FN) para evitar redundâncias.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>Exemplo Prático (Tabelas Lógicas):</strong></h3>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="874" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-1024x874.png" alt="" class="wp-image-3000" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-1024x874.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-300x256.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-768x655.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-1536x1310.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-2048x1747.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-5-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Tabela: LIVRO</h3>



<figure class="wp-block-table"><table><thead><tr><th>id_livro</th><th>titulo</th><th>isbn</th><th>descricao</th><th>id_autor</th><th>id_categoria</th><th>quantidade_total</th><th>quantidade_disponivel</th><th>data_publicacao</th><th>idioma</th></tr></thead><tbody><tr><td>1</td><td>Dom Casmurro</td><td>978-8535929003</td><td>Romance clássico de Machado de Assis</td><td>1</td><td>1</td><td>5</td><td>3</td><td>1899-01-01</td><td>Português</td></tr><tr><td>2</td><td>1984</td><td>978-0451524935</td><td>Distopia futurista de George Orwell</td><td>2</td><td>2</td><td>4</td><td>2</td><td>1949-06-08</td><td>Inglês</td></tr><tr><td>3</td><td>O Cortiço</td><td>978-8535914689</td><td>Romance naturalista de Aluísio Azevedo</td><td>3</td><td>1</td><td>3</td><td>1</td><td>1890-01-01</td><td>Português</td></tr><tr><td>4</td><td>O Pequeno Príncipe</td><td>978-8525051696</td><td>Fábula infantil de Antoine de Saint-Exupéry</td><td>4</td><td>3</td><td>6</td><td>4</td><td>1943-04-06</td><td>Francês</td></tr><tr><td>5</td><td>Grande Sertão Veredas</td><td>978-8535915853</td><td>Romance épico de Guimarães Rosa</td><td>5</td><td>1</td><td>2</td><td>1</td><td>1956-01-01</td><td>Português</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Tabela: AUTOR</h3>



<figure class="wp-block-table"><table><thead><tr><th>id_autor</th><th>nome</th><th>nacionalidade</th><th>data_nascimento</th><th>biografia</th></tr></thead><tbody><tr><td>1</td><td>Machado de Assis</td><td>Brasileira</td><td>1839-06-21</td><td>Escritor brasileiro, considerado por muitos críticos o maior nome da literatura brasileira</td></tr><tr><td>2</td><td>George Orwell</td><td>Britânica</td><td>1903-06-25</td><td>Escritor inglês conhecido por seus romances distópicos</td></tr><tr><td>3</td><td>Aluísio Azevedo</td><td>Brasileira</td><td>1857-04-14</td><td>Escritor brasileiro pioneiro do naturalismo</td></tr><tr><td>4</td><td>Antoine de Saint-Exupéry</td><td>Francesa</td><td>1900-06-29</td><td>Piloto e escritor francês, autor de O Pequeno Príncipe</td></tr><tr><td>5</td><td>Guimarães Rosa</td><td>Brasileira</td><td>1908-06-27</td><td>Escritor mineiro, um dos maiores modernistas brasileiros</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Tabela: CATEGORIA</h3>



<figure class="wp-block-table"><table><thead><tr><th>id_categoria</th><th>nome</th><th>descricao</th></tr></thead><tbody><tr><td>1</td><td>Romance</td><td>Narrativas de ficção sobre a vida humana e relacionamentos</td></tr><tr><td>2</td><td>Distopia</td><td>Ficção científica que retrata sociedades futuras negativas</td></tr><tr><td>3</td><td>Infantil</td><td>Histórias e fábulas destinadas ao público infantil</td></tr><tr><td>4</td><td>Mistério</td><td>Histórias que envolvem suspense e investigação</td></tr><tr><td>5</td><td>Poesia</td><td>Textos em verso com linguagem lírica e expressiva</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Tabela: MEMBRO</h3>



<figure class="wp-block-table"><table><thead><tr><th>id_membro</th><th>nome</th><th>email</th><th>telefone</th><th>endereco</th><th>data_cadastro</th><th>status</th></tr></thead><tbody><tr><td>1</td><td>João Silva</td><td><a href="mailto:joao.silva@email.com">joao.silva@email.com</a></td><td>(11) 98765-4321</td><td>Rua A, 123 &#8211; São Paulo</td><td>2024-01-15</td><td>Ativo</td></tr><tr><td>2</td><td>Maria Santos</td><td><a href="mailto:maria.santos@email.com">maria.santos@email.com</a></td><td>(11) 99876-5432</td><td>Avenida B, 456 &#8211; São Paulo</td><td>2024-02-20</td><td>Ativo</td></tr><tr><td>3</td><td>Pedro Oliveira</td><td><a href="mailto:pedro.oliveira@email.com">pedro.oliveira@email.com</a></td><td>(11) 97654-3210</td><td>Rua C, 789 &#8211; São Paulo</td><td>2024-03-10</td><td>Ativo</td></tr><tr><td>4</td><td>Ana Costa</td><td><a href="mailto:ana.costa@email.com">ana.costa@email.com</a></td><td>(11) 96543-2109</td><td>Avenida D, 321 &#8211; São Paulo</td><td>2024-01-25</td><td>Inativo</td></tr><tr><td>5</td><td>Carlos Mendes</td><td><a href="mailto:carlos.mendes@email.com">carlos.mendes@email.com</a></td><td>(11) 95432-1098</td><td>Rua E, 654 &#8211; São Paulo</td><td>2024-04-05</td><td>Ativo</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Tabela: EMPRESTIMO</h3>



<figure class="wp-block-table"><table><thead><tr><th>id_emprestimo</th><th>id_membro</th><th>id_livro</th><th>data_emprestimo</th><th>data_devolucao_prevista</th><th>data_devolucao_real</th><th>status</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>1</td><td>2024-05-01</td><td>2024-05-15</td><td>2024-05-14</td><td>Devolvido</td></tr><tr><td>2</td><td>2</td><td>2</td><td>2024-05-03</td><td>2024-05-17</td><td>NULL</td><td>Pendente</td></tr><tr><td>3</td><td>3</td><td>4</td><td>2024-05-05</td><td>2024-05-19</td><td>NULL</td><td>Pendente</td></tr><tr><td>4</td><td>1</td><td>3</td><td>2024-04-20</td><td>2024-05-04</td><td>2024-05-06</td><td>Devolvido com Atraso</td></tr><tr><td>5</td><td>5</td><td>5</td><td>2024-05-02</td><td>2024-05-16</td><td>2024-05-15</td><td>Devolvido</td></tr></tbody></table></figure>



<p><strong>Entidades (Tabelas) e seus Atributos:</strong></p>



<ol class="wp-block-list">
<li><strong>LIVRO:</strong>
<ul class="wp-block-list">
<li>id_livro (Chave Primária)</li>



<li>titulo, isbn (Chave Única)</li>



<li>descricao, data_publicacao</li>



<li>quantidade_total, quantidade_disponível</li>



<li>id_autor (Chave Estrangeira)</li>



<li>id_categoria (Chave Estrangeira)</li>
</ul>
</li>



<li><strong>AUTOR:</strong>
<ul class="wp-block-list">
<li>id_autor (Chave Primária)</li>



<li>nome, nacionalidade</li>



<li>data_nascimento, biografia</li>
</ul>
</li>



<li><strong>CATEGORIA:</strong>
<ul class="wp-block-list">
<li>id_categoria (Chave Primária)</li>



<li>nome, descricao</li>
</ul>
</li>



<li><strong>MEMBRO:</strong>
<ul class="wp-block-list">
<li>id_membro (Chave Primária)</li>



<li>nome, email (Chave Única)</li>



<li>telefone, endereco</li>



<li>data_cadastro, status</li>
</ul>
</li>



<li><strong>EMPRESTIMO:</strong>
<ul class="wp-block-list">
<li>id_emprestimo (Chave Primária)</li>



<li>id_membro (Chave Estrangeira)</li>



<li>id_livro (Chave Estrangeira)</li>



<li>data_emprestimo, data_devolucao_prevista</li>



<li>data_devolucao_real, status</li>
</ul>
</li>
</ol>



<p><strong>Relacionamentos:</strong></p>



<ul class="wp-block-list">
<li>Um LIVRO é escrito por Um AUTOR</li>



<li>Um LIVRO pertence a Uma CATEGORIA</li>



<li>Um LIVRO tem vários EMPRÉSTIMOs</li>



<li>Um MEMBRO realiza vários EMPRÉSTIMOs</li>
</ul>



<p><strong>Legenda</strong></p>



<ul class="wp-block-list">
<li><strong>PK (Primary Key)</strong>: Chave Primária &#8211; Identifica unicamente cada registro</li>



<li><strong>FK (Foreign Key)</strong>: Chave Estrangeira &#8211; Estabelece relacionamento com outra tabela</li>



<li><strong>UK (Unique Key)</strong>: Chave Única &#8211; Campo único que não pode ser duplicado</li>
</ul>



<h3 class="wp-block-heading">3. Modelagem Física: A Implementação Tecnológica</h3>



<p>O modelo físico é a &#8220;mão na massa&#8221;. É aqui que o modelo lógico é traduzido para a linguagem de um Sistema Gerenciador de Banco de Dados (SGBD) específico. O Engenheiro de Dados ou o DBA (Database Administrator) define como os dados serão efetivamente gravados no disco do servidor.</p>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Responder <em>como</em> o sistema vai armazenar os dados fisicamente, otimizando o desempenho.</li>



<li><strong>Elementos adicionados:</strong>
<ul class="wp-block-list">
<li><strong>Tipos de Dados (Data Types):</strong> Definir se um campo será <code>VARCHAR(50)</code>, <code>INT</code>, <code>DECIMAL(10,2)</code> ou <code>BOOLEAN</code>.</li>



<li><strong>Índices (Indexes):</strong> Criados para acelerar a busca de dados.</li>



<li><strong>Restrições (Constraints):</strong> Regras do banco, como <code>NOT NULL</code> ou <code>UNIQUE</code>.</li>



<li><strong>Particionamento:</strong> Decisões de arquitetura (como vimos no caso do <a href="https://datauniverse.com.br/sharding-vs-partitioning/">Sharding</a> e Partitioning).</li>
</ul>
</li>
</ul>



<p><strong>Exemplo Prático (Especificação Física):</strong></p>



<p>A tabela de <code>Aluno</code> agora ganha sua definição técnica, pronta para virar código SQL:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Nome da Coluna</strong></td><td><strong>Tipo de Dado (PostgreSQL)</strong></td><td><strong>Restrição (Constraint)</strong></td><td><strong>Descrição</strong></td></tr></thead><tbody><tr><td><code>id_aluno</code></td><td>INTEGER</td><td>PRIMARY KEY, AUTOINCREMENT</td><td>Identificador único numérico</td></tr><tr><td><code>nome_aluno</code></td><td>VARCHAR(100)</td><td>NOT NULL</td><td>Nome completo do aluno</td></tr><tr><td><code>matricula</code></td><td>VARCHAR(20)</td><td>UNIQUE, NOT NULL</td><td>Código de matrícula da escola</td></tr><tr><td><code>data_nasc</code></td><td>DATE</td><td>NULL</td><td>Data de nascimento (formato YYYY-MM-DD)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Quadro Resumo: Comparando as 3 Fases</h3>



<p>Para facilitar a visualização e servir de material de estudo, aqui está a comparação direta:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Característica</strong></td><td><strong>Modelo Conceitual</strong></td><td><strong>Modelo Lógico</strong></td><td><strong>Modelo Físico</strong></td></tr></thead><tbody><tr><td><strong>Público-Alvo</strong></td><td>Gestores, Analistas de Negócio e Clientes.</td><td>Arquitetos de Dados e Analistas de Sistemas.</td><td>DBAs, Engenheiros de Dados e Desenvolvedores.</td></tr><tr><td><strong>Nível de Detalhe</strong></td><td>Muito baixo (Visão Macro).</td><td>Médio (Visão Estrutural).</td><td>Muito alto (Visão Técnica).</td></tr><tr><td><strong>Dependência de SGBD</strong></td><td>Nenhuma.</td><td>Nenhuma (Agnóstico).</td><td>Total (Depende se é MySQL, Oracle, etc.).</td></tr><tr><td><strong>O que define?</strong></td><td>Entidades e Relacionamentos gerais.</td><td>Atributos, Chaves (PK/FK) e Normalização.</td><td>Tipos de dados, Índices, Views e Constraints.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Referências Importantes sobre o Tema</h3>



<p>Se você deseja se aprofundar na literatura acadêmica e de mercado que padronizou esses conceitos, recomendo os seguintes pilares da engenharia de dados:</p>



<ol start="1" class="wp-block-list">
<li><strong>Peter Chen (1976):</strong> Criador do Modelo Entidade-Relacionamento (MER), que é a base da modelagem conceitual até hoje. Seu artigo <em>&#8220;The Entity-Relationship Model: Toward a Unified View of Data&#8221;</em> mudou a história da computação.</li>



<li><strong>DAMA-DMBOK (Data Management Body of Knowledge):</strong> O guia oficial da Data Management Association. O capítulo de <em>Data Modeling and Design</em> estabelece os padrões globais da indústria para a criação de modelos lógicos e físicos em empresas de grande porte.</li>



<li><strong>Ralph Kimball e Bill Inmon:</strong> Para modelagem focada em Data Warehouses (OLAP), que utiliza modelagem dimensional (Star Schema/Snowflake), que é uma variação específica após a modelagem relacional clássica.</li>
</ol>
<p>O post <a href="https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/">Modelagem de dados Conceitual, Lógica e Física</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/modelagem-de-dados-conceitual-logica-e-fisica/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Normalização vs. Desnormalização de Dados</title>
		<link>https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/</link>
					<comments>https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 19:15:33 +0000</pubDate>
				<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=2987</guid>

					<description><![CDATA[<p>Na engenharia e arquitetura de dados, a forma como você organiza as tabelas de um banco de dados dita o desempenho, a integridade e a escalabilidade do sistema. O grande dilema na hora de criar esse modelo físico geralmente se resume a dois caminhos: Normalização e Desnormalização. Eles não são inimigos, mas sim estratégias opostas [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/">Normalização vs. Desnormalização de Dados</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Na engenharia e arquitetura de dados, a forma como você organiza as tabelas de um banco de dados dita o desempenho, a integridade e a escalabilidade do sistema. O grande dilema na hora de criar esse modelo físico geralmente se resume a dois caminhos: <strong>Normalização</strong> e <strong>Desnormalização</strong>.</p>



<p>Eles não são inimigos, mas sim estratégias opostas usadas para resolver problemas diferentes. <mark style="background-color:#fcb900" class="has-inline-color">A normalização foca na escrita e integridade (OLTP), enquanto a desnormalização foca na velocidade de leitura (OLAP).</mark></p>



<h2 class="wp-block-heading">O que é Normalização?</h2>



<p>A normalização é o processo de organizar os dados em um banco de dados relacional para <strong>reduzir a redundância</strong> e <strong>melhorar a integridade</strong>. O objetivo é garantir que cada pedaço de informação seja armazenado em apenas um lugar. Quando você precisa atualizar o nome de um cliente, por exemplo, você altera apenas uma linha em uma única tabela, e não em centenas de registros de vendas.</p>



<p>Para atingir esse nível de organização, aplicamos regras progressivas chamadas de <strong>Formas Normais (FN)</strong>.</p>



<p>O processo de normalização aplica uma série de regras sobre as tabelas de um banco de dados para verificar se estas estão corretamente projetadas. </p>



<p>Embora existam cinco formas normais (ou regras de normalização), na prática usamos um conjunto de três Formas Normais, <mark style="background-color:#fcb900" class="has-inline-color">ou seja, um banco de dados é considerado normalizado se nele foram aplicadas as regras destas três formas normais.</mark></p>



<h2 class="wp-block-heading">O que é Desnormalização?</h2>



<p>A desnormalização é o processo intencional de <strong>adicionar redundância</strong> a um banco de dados que já foi normalizado. O objetivo é melhorar a <strong>performance de leitura</strong>.</p>



<p>Em sistemas de Data Warehouse ou Analytics (OLAP), fazer dezenas de <code>JOINs</code> para montar um relatório através de tabelas na 3FN é extremamente lento. A desnormalização &#8220;achata&#8221; essas tabelas, agrupando dados frequentemente consultados em um lugar só.</p>



<ul class="wp-block-list">
<li><strong>Exemplo Prático:</strong> Em vez de fazer um JOIN entre <code>Vendas</code>, <code>Clientes</code>, <code>Cidades</code> e <code>Estados</code> para saber o total vendido em São Paulo, você cria uma tabela desnormalizada gigante (Fato/Dimensão) onde a linha da venda já contém o nome da cidade e do estado, mesmo que isso repita a palavra &#8220;São Paulo&#8221; um milhão de vezes.</li>
</ul>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="404" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-1024x404.png" alt="" class="wp-image-2989" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-1024x404.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-300x118.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-768x303.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-1536x605.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-2048x807.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-3-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">1ª Forma Normal (1FN): Atomicidade</h2>



<p>A regra de ouro aqui é: cada coluna deve conter apenas um valor único e indivisível (atômico), e não pode haver grupos repetidos. Uma entidade estará na primeira forma normal (IFN) se todos os campos forem atômicos (simples) e não multivalorados (com múltiplos valores).</p>



<p><strong>Problema (Não Normalizado):</strong> Uma tabela de livros onde um livro possui vários autores na mesma célula.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Livro</strong></td><td><strong>Titulo</strong></td><td><strong>Autores</strong></td></tr></thead><tbody><tr><td>101</td><td>Engenharia de Dados</td><td>João Silva, Maria Souza</td></tr><tr><td>102</td><td>Redes Neurais</td><td>Carlos Dias</td></tr></tbody></table></figure>



<p><strong>Solução (1FN):</strong> Dividir em múltiplas linhas, garantindo que a coluna <code>Autores</code> tenha apenas um valor por registro.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Livro</strong></td><td><strong>Titulo</strong></td><td><strong>Autor</strong></td></tr></thead><tbody><tr><td>101</td><td>Engenharia de Dados</td><td>João Silva</td></tr><tr><td>101</td><td>Engenharia de Dados</td><td>Maria Souza</td></tr><tr><td>102</td><td>Redes Neurais</td><td>Carlos Dias</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Quais os problemas de uma tabela não normalizada com a 1FN?</h3>



<p>São vários. A primeira forma normal tenta resolver um dos maiores problemas de bancos de dados que é<br>a repetição (redundância de dados) e a desorganização deles.</p>



<p>Imagine um campo telefone que permita a entrada de mais de um valor (dois números de telefones) por exemplo. Como faríamos uma busca em um dos valores apenas? Mesma coisa em um campo endereço onde as partes não estivessem desmembradas, da seguinte forma: </p>



<p><strong>Rua das Oliveiras, 256, Parque Novo Mundo, São Paulo, SP. </strong></p>



<p>Como seria possível fazer uma busca de todos os clientes que morassem no Parque Novo<br>Mundo? Ou na cidade de São Paulo? Ou no estado de SP?</p>



<h3 class="wp-block-heading">Toda tabela precisa obrigatoriamente ser normalizada com a 1FN?</h3>



<p>Não. A normalização é um processo corretivo que deve ser aplicado em casos específicos onde o problema for identificado. Tudo irá depender de como a análise dos dados foi feita. De início você terá muita dificuldade em aplicar as regras de normalização e somente o tempo e o acúmulo de experiência farão esse processo ser natural para você. <mark style="background-color:#fcb900" class="has-inline-color">Um analista experiente aplica a normalização de dados por padrão, pois ele olha para uma tabela e já &#8216;sente&#8217; que tem algo errado ali e aplica a correção para tal.</mark></p>



<h2 class="wp-block-heading">2ª Forma Normal (2FN): Dependência Total</h2>



<p>Para estar na 2FN, a tabela precisa estar na 1FN e todos os atributos não-chave devem depender de <strong>toda</strong> a chave primária (isso se aplica a tabelas com chaves primárias compostas). Uma entidade estará na 2FN se ela já se encontrar na 1FN e todos os atributos não chave forem totalmente dependentes da chave primária.</p>



<ul class="wp-block-list">
<li>Crie tabelas separadas para conjuntos de valores que se aplicam a vários registros.</li>



<li>Relacione essas tabelas com uma chave estrangeira.</li>



<li>Primeiramente, para estar na 2FN é preciso estar também na 1FN.&nbsp;</li>
</ul>



<p>2FN define que os atributos normais, ou seja, os não chave, devem depender unicamente da chave primária da tabela.&nbsp;Assim como as colunas da tabela que não são dependentes dessa chave devem ser removidas da tabela principal e cria-se uma nova tabela utilizando esses dados.</p>



<p><strong>Problema (1FN, mas viola 2FN):</strong> Uma tabela de matrículas onde a chave composta é <code>ID_Aluno</code> + <code>ID_Curso</code>. O <code>Nome_Curso</code> depende apenas do <code>ID_Curso</code>, não do aluno.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Aluno</strong></td><td><strong>ID_Curso</strong></td><td><strong>Nome_Curso</strong></td><td><strong>Semestre_Matricula</strong></td></tr></thead><tbody><tr><td>55</td><td>10</td><td>Banco de Dados</td><td>2026.1</td></tr><tr><td>55</td><td>20</td><td>Programação</td><td>2026.1</td></tr></tbody></table></figure>



<p><strong>Solução (2FN):</strong> Separar as informações específicas do curso em uma nova tabela.</p>



<p><strong>Tabela Matricula:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Aluno</strong></td><td><strong>ID_Curso</strong></td><td><strong>Semestre_Matricula</strong></td></tr></thead><tbody><tr><td>55</td><td>10</td><td>2026.1</td></tr><tr><td>55</td><td>20</td><td>2026.1</td></tr></tbody></table></figure>



<p><strong>Tabela Curso:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Curso</strong></td><td><strong>Nome_Curso</strong></td></tr></thead><tbody><tr><td>10</td><td>Banco de Dados</td></tr><tr><td>20</td><td>Programação</td></tr></tbody></table></figure>



<p>Conforme vimos tanto com a 1FN quanto agora com a 2FN, <mark style="background-color:#fcb900" class="has-inline-color">quando aplicamos a normalização de dados é comum gerar novas tabelas a fim de satisfazer as formas normais que estão sendo aplicadas.</mark> Mais uma vez gostaria de deixar claro que a normalização de dados, apesar das regras serem simples, causa grande dificuldade nos iniciantes da área. Então tenha paciência pois com o tempo irá ganhar experiência e tudo ficará mais fácil.</p>



<h2 class="wp-block-heading">3ª Forma Normal (3FN): Sem Dependências Transitivas</h2>



<p>Para estar na 3FN, a tabela deve estar na 2FN e nenhum atributo não-chave pode depender de outro atributo não-chave. Todos devem depender <strong>apenas</strong> da chave primária.</p>



<ul class="wp-block-list">
<li>Elimine campos que não dependem da chave.</li>



<li>Assim como para estar na 2FN é preciso estar na 1FN, para estar na 3FN é preciso estar também na 2FN.&nbsp;</li>
</ul>



<p>3FN define que todos os atributos dessa tabela devem ser funcionalmente independentes uns dos outros, ao mesmo tempo que devem ser dependentes exclusivamente da chave primária da tabela.&nbsp;</p>



<p>3FN foi projetada para melhorar o desempenho de processamento dos banco de dados e minimizar os custos de armazenamento.&nbsp;</p>



<p><strong>Problema (2FN, mas viola 3FN):</strong> Uma tabela de veículos onde a chave primária é a <code>Placa</code>. O atributo <code>Pais_Origem_Marca</code> depende da <code>Marca</code>, e não diretamente da <code>Placa</code>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Placa</strong></td><td><strong>Modelo</strong></td><td><strong>Marca</strong></td><td><strong>Pais_Origem_Marca</strong></td></tr></thead><tbody><tr><td>ABC-1234</td><td>Civic</td><td>Honda</td><td>Japão</td></tr><tr><td>XYZ-9876</td><td>Corolla</td><td>Toyota</td><td>Japão</td></tr></tbody></table></figure>



<p><strong>Solução (3FN):</strong> Criar uma tabela separada para as marcas.</p>



<p><strong>Tabela Veiculo:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Placa</strong></td><td><strong>Modelo</strong></td><td><strong>ID_Marca</strong></td></tr></thead><tbody><tr><td>ABC-1234</td><td>Civic</td><td>1</td></tr><tr><td>XYZ-9876</td><td>Corolla</td><td>2</td></tr></tbody></table></figure>



<p><strong>Tabela Marca:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Marca</strong></td><td><strong>Nome_Marca</strong></td><td><strong>Pais_Origem_Marca</strong></td></tr></thead><tbody><tr><td>1</td><td>Honda</td><td>Japão</td></tr><tr><td>2</td><td>Toyota</td><td>Japão</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">3.5 Forma Normal de Boyce-Codd (BCNF)</h2>



<p>Conhecida como &#8220;3.5FN&#8221;, ela é uma versão mais rigorosa da 3FN. A regra dita que <strong>todo determinante deve ser uma chave candidata</strong>. Ela resolve anomalias em tabelas que possuem múltiplas chaves candidatas compostas e sobrepostas.</p>



<p><strong>Problema:</strong> Uma clínica onde a chave primária é (<code>ID_Paciente</code> + <code>Especialidade</code>). Um médico atende apenas uma especialidade. O <code>Nome_Medico</code> determina a <code>Especialidade</code>, criando uma redundância se o médico mudar de especialidade.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Paciente</strong></td><td><strong>Especialidade</strong></td><td><strong>Nome_Medico</strong></td></tr></thead><tbody><tr><td>99</td><td>Cardiologia</td><td>Dr. Marcos</td></tr><tr><td>88</td><td>Cardiologia</td><td>Dr. Marcos</td></tr></tbody></table></figure>



<p><strong>Solução (BCNF):</strong> Separar a relação do paciente com o médico, e do médico com a especialidade.</p>



<p><strong>Tabela Consulta:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Paciente</strong></td><td><strong>ID_Medico</strong></td></tr></thead><tbody><tr><td>99</td><td>500</td></tr><tr><td>88</td><td>500</td></tr></tbody></table></figure>



<p><strong>Tabela Medico_Especialidade:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Medico</strong></td><td><strong>Nome_Medico</strong></td><td><strong>Especialidade</strong></td></tr></thead><tbody><tr><td>500</td><td>Dr. Marcos</td><td>Cardiologia</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">4ª Forma Normal (4FN): Dependências Multivaloradas Independentes</h2>



<p>Para estar na 4FN, a tabela deve estar na BCNF e não pode conter mais de uma dependência multivalorada independente.</p>



<p><strong>Problema:</strong> Um programador tem várias &#8220;Linguagens&#8221; (Python, Java) e possui várias &#8220;Certificações&#8221; (AWS, Azure). Colocar tudo na mesma tabela cria uma multiplicação (produto cartesiano) de registros desnecessários.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Programador</strong></td><td><strong>Linguagem</strong></td><td><strong>Certificacao</strong></td></tr></thead><tbody><tr><td>1</td><td>Python</td><td>AWS</td></tr><tr><td>1</td><td>Python</td><td>Azure</td></tr><tr><td>1</td><td>Java</td><td>AWS</td></tr><tr><td>1</td><td>Java</td><td>Azure</td></tr></tbody></table></figure>



<p><strong>Solução (4FN):</strong> Criar duas tabelas distintas para separar as dependências que não têm relação entre si.</p>



<p><strong>Tabela Programador_Linguagem:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Programador</strong></td><td><strong>Linguagem</strong></td></tr></thead><tbody><tr><td>1</td><td>Python</td></tr><tr><td>1</td><td>Java</td></tr></tbody></table></figure>



<p><strong>Tabela Programador_Certificacao:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>ID_Programador</strong></td><td><strong>Certificacao</strong></td></tr></thead><tbody><tr><td>1</td><td>AWS</td></tr><tr><td>1</td><td>Azure</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">5ª Forma Normal (5FN): Dependência de Junção</h2>



<p>É extremamente rara na prática. Diz que uma tabela está na 5FN se ela não puder ser dividida em tabelas menores sem perder informações ao tentar juntá-las (JOIN) novamente. Trata de relações ternárias (três variáveis conectadas) que causam anomalias se agrupadas.</p>



<p><strong>Problema:</strong> Uma relação complexa onde um <strong>Vendedor</strong> vende produtos de uma <strong>Marca</strong> que pertence a uma <strong>Categoria</strong>. Se juntarmos tudo, podemos inferir erroneamente que um vendedor vende uma categoria de uma marca específica que ele, na verdade, não tem autorização para vender.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Vendedor</strong></td><td><strong>Marca</strong></td><td><strong>Categoria</strong></td></tr></thead><tbody><tr><td>Roberto</td><td>Samsung</td><td>Smartphones</td></tr><tr><td>Roberto</td><td>Samsung</td><td>TVs</td></tr></tbody></table></figure>



<p><strong>Solução (5FN):</strong> Dividir a relação ternária em três tabelas binárias (relação de dois em dois).</p>



<p><strong>Tabela Vendedor_Marca:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Vendedor</strong></td><td><strong>Marca</strong></td></tr></thead><tbody><tr><td>Roberto</td><td>Samsung</td></tr></tbody></table></figure>



<p><strong>Tabela Vendedor_Categoria:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Vendedor</strong></td><td><strong>Categoria</strong></td></tr></thead><tbody><tr><td>Roberto</td><td>Smartphones</td></tr><tr><td>Roberto</td><td>TVs</td></tr></tbody></table></figure>



<p><strong>Tabela Marca_Categoria:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Marca</strong></td><td><strong>Categoria</strong></td></tr></thead><tbody><tr><td>Samsung</td><td>Smartphones</td></tr><tr><td>Samsung</td><td>TVs</td></tr></tbody></table></figure>
<p>O post <a href="https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/">Normalização vs. Desnormalização de Dados</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/normalizacao-vs-desnormalizacao-de-dados/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sharding vs. Partitioning</title>
		<link>https://datauniverse.com.br/sharding-vs-partitioning/</link>
					<comments>https://datauniverse.com.br/sharding-vs-partitioning/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 18:43:33 +0000</pubDate>
				<category><![CDATA[Otimização de Performance]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=2982</guid>

					<description><![CDATA[<p>À medida que as aplicações crescem, os bancos de dados enfrentam um gargalo inevitável. Tabelas com bilhões de linhas tornam as consultas lentas, os backups demorados e os índices pesados demais para a memória. Quando você atinge o limite do que um único servidor pode suportar (escalabilidade vertical), a solução é &#8220;dividir para conquistar&#8221;. É [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/sharding-vs-partitioning/">Sharding vs. Partitioning</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>À medida que as aplicações crescem, os bancos de dados enfrentam um gargalo inevitável. Tabelas com bilhões de linhas tornam as consultas lentas, os backups demorados e os índices pesados demais para a memória. Quando você atinge o limite do que um único servidor pode suportar (escalabilidade vertical), a solução é &#8220;dividir para conquistar&#8221;.</p>



<p>É aqui que entram duas das arquiteturas mais importantes da Engenharia de Dados e de Software: <strong>Partitioning</strong> (Particionamento) e <strong>Sharding</strong> (Fragmentação). Embora frequentemente confundidos, eles resolvem problemas de escala de maneiras fundamentalmente diferentes.</p>



<h2 class="wp-block-heading">O que é Partitioning (Particionamento)?</h2>



<p><mark style="background-color:#fcb900" class="has-inline-color">O particionamento é a técnica de dividir uma tabela lógica muito grande em pedaços físicos menores e mais gerenciáveis, <strong>dentro do mesmo banco de dados ou servidor</strong>.</mark> O sistema de banco de dados gerencia essas partições de forma transparente; para a aplicação, parece que ela ainda está consultando uma única tabela gigante.</p>



<p>Existem dois tipos principais de particionamento:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Particionamento Vertical</strong></td><td><strong>Particionamento Horizontal</strong></td></tr><tr><td>Divide a tabela por <strong>colunas</strong>.<br><br><em>Exemplo:</em> Uma tabela de &#8220;Usuários&#8221; pode ter colunas de acesso frequente (ID, Nome, Email) em uma partição, e colunas pesadas e de acesso raro (Foto de Perfil, Biografia longa) em outra. Isso economiza memória e acelera leituras (I/O).</td><td>Divide a tabela por <strong>linhas</strong>.<br><br><em>Exemplo:</em> Uma tabela de &#8220;Vendas&#8221; pode ser particionada por data. Vendas de 2024 ficam em uma partição, 2025 em outra.<br><br><em>Benefício:</em> Se você consultar apenas as vendas de hoje, o banco de dados ignora as partições antigas (técnica chamada <em>Partition Pruning</em>), acelerando drasticamente a consulta.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">O que é Sharding (Fragmentação)?</h2>



<p>O Sharding é, na verdade, uma forma extrema de particionamento horizontal. A diferença crucial é a infraestrutura: no Sharding, os dados são divididos e distribuídos <strong>em múltiplos servidores físicos ou instâncias de banco de dados independentes</strong> (chamados de <em>Shards</em>).</p>



<p>Nesta arquitetura, conhecida como <em>Shared-Nothing</em> (Nada Compartilhado), cada Shard atua como um banco de dados autônomo contendo apenas uma fatia dos dados totais.</p>



<ul class="wp-block-list">
<li><strong>Como funciona:</strong> Uma &#8220;Chave de Shard&#8221; (Shard Key) determina para qual servidor o dado vai. Se você fizer o sharding por &#8220;Região&#8221;, o Shard A pode guardar os clientes do Brasil, o Shard B os dos EUA, e o Shard C os da Europa.</li>



<li><strong>Por que usar:</strong> Quando um único servidor (mesmo o mais caro e potente do mercado) não tem mais CPU, RAM ou disco suficiente para lidar com o volume de dados ou de requisições simultâneas. O Sharding permite escalabilidade horizontal infinita: basta adicionar mais servidores baratos ao cluster.</li>
</ul>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="404" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-1024x404.png" alt="" class="wp-image-2983" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-1024x404.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-300x118.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-768x303.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-1536x606.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-2048x808.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Principais Diferenças</h2>



<p>A tabela abaixo destaca o contraste direto entre as duas abordagens:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Característica</strong></td><td><strong>Partitioning</strong></td><td><strong>Sharding</strong></td></tr></thead><tbody><tr><td><strong>Localização dos Dados</strong></td><td>Mesmo servidor / mesma instância de banco de dados.</td><td>Múltiplos servidores independentes (Nós/Nodes).</td></tr><tr><td><strong>Objetivo Principal</strong></td><td>Facilidade de manutenção (ex: apagar dados velhos) e otimização de consultas locais.</td><td>Escalabilidade massiva de processamento (CPU/RAM) e armazenamento além do limite de uma máquina.</td></tr><tr><td><strong>Complexidade da Aplicação</strong></td><td>Baixa. O banco de dados gerencia tudo. A aplicação nem percebe a divisão.</td><td>Alta. A aplicação (ou um roteador intermediário) precisa saber para qual servidor enviar a query.</td></tr><tr><td><strong>Disponibilidade</strong></td><td>Se o servidor cair, todos os dados ficam indisponíveis.</td><td>Se um Shard cair, apenas a fatia de dados dele fica offline; o resto do sistema continua operando.</td></tr><tr><td><strong>Consultas Complexas (JOINs)</strong></td><td>Simples. Joins funcionam normalmente pois os dados estão na mesma máquina.</td><td>Muito difícil. Fazer JOIN entre dados que estão em servidores físicos diferentes causa grande lentidão na rede.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Particionamento na Prática: O E-commerce e o Relatório Lento</h2>



<p>Imagine que você trabalha na engenharia de dados de um grande e-commerce. Vocês têm uma tabela chamada <code>Pedidos</code> no PostgreSQL que armazena todas as vendas desde a fundação da empresa, há 10 anos. Essa tabela tem 5 bilhões de linhas.</p>



<p><strong>O Problema:</strong></p>



<p>Toda vez que o time de marketing tenta puxar um relatório das &#8220;vendas de ontem&#8221;, a query demora minutos para rodar. Além disso, o índice dessa tabela ficou tão gigante que não cabe mais na memória RAM do servidor (que custa caro).</p>



<p><strong>A Solução (Particionamento Horizontal por Data):</strong></p>



<p>Você decide particionar a tabela <code>Pedidos</code> por mês e ano.</p>



<ul class="wp-block-list">
<li><strong>Como fica nos bastidores:</strong> O banco de dados cria tabelas físicas menores &#8220;escondidas&#8221; (ex: <code>pedidos_2025_12</code>, <code>pedidos_2026_01</code>, <code>pedidos_2026_02</code>).</li>



<li><strong>A Mágica (Partition Pruning):</strong> Quando o marketing roda um <code>SELECT * FROM Pedidos WHERE data = '04/03/2026'</code>, o banco de dados é inteligente o suficiente para saber que não precisa ler a tabela inteira. Ele vai <em>direto</em> na partição <code>pedidos_2026_03</code> e ignora todo o resto. O relatório que demorava minutos passa a rodar em milissegundos.</li>



<li><strong>Manutenção:</strong> Se a política da empresa diz que dados com mais de 5 anos devem ser apagados, você não roda um comando <code>DELETE</code> (que travaria o banco e consumiria muito processamento). Você simplesmente roda um <code>DROP PARTITION pedidos_2021_01</code>. A exclusão de milhões de linhas acontece instantaneamente, liberando espaço no disco.</li>
</ul>



<p>Agora imagine que você é o arquiteto de um sistema de CRM (SaaS) global, parecido com o Salesforce. Vocês têm milhares de empresas como clientes.</p>



<p><strong>O Problema:</strong></p>



<p>O sistema faz 100.000 gravações (inserções e atualizações) por segundo. O servidor de banco de dados atual chegou a 100% de uso de CPU, a memória RAM está no limite e o disco não consegue gravar dados mais rápido do que isso. Fazer um particionamento não vai ajudar, porque <em>a máquina física</em> não aguenta mais o tráfego.</p>



<p><strong>A Solução (Sharding Baseado em ID do Cliente):</strong></p>



<p>Você decide transformar seu banco de dados único em um cluster de múltiplos servidores independentes (Shards). Você escolhe o <code>id_empresa</code> como a sua <strong>Chave de Shard (Shard Key)</strong>.</p>



<ul class="wp-block-list">
<li><strong>Como fica nos bastidores:</strong>
<ul class="wp-block-list">
<li><strong>Servidor 1 (Shard A):</strong> Armazena todos os dados das Empresas de ID 1 a 10.000.</li>



<li><strong>Servidor 2 (Shard B):</strong> Armazena todos os dados das Empresas de ID 10.001 a 20.000.</li>



<li><strong>Servidor 3 (Shard C):</strong> Armazena todos os dados das Empresas de ID 20.001 a 30.000.</li>
</ul>
</li>



<li><strong>A Mágica (Roteamento):</strong> Quando um funcionário da Empresa 15.000 faz login e tenta salvar um novo cliente no CRM, a sua aplicação (ou um roteador de banco de dados intermediário) avalia a requisição. Ele vê o ID 15.000 e pensa: <em>&#8220;A Empresa 15.000 mora no Servidor 2&#8221;</em>. A requisição de gravação é enviada <strong>exclusivamente</strong> para o Servidor 2.</li>



<li><strong>Escalabilidade Infinita:</strong> O Servidor 1 e o Servidor 3 nem ficam sabendo dessa transação. Você acabou de dividir o uso de CPU, RAM e Disco por três. Se o SaaS continuar crescendo e vocês ganharem mais 10.000 empresas clientes, basta comprar um Servidor 4 (Shard D) e plugar na arquitetura.</li>
</ul>



<h2 class="wp-block-heading">Resumo do Impacto Prático</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Cenário Prático</strong></td><td><strong>O que você quer resolver?</strong></td><td><strong>Estratégia Recomendada</strong></td><td><strong>Exemplo de Ação</strong></td></tr></thead><tbody><tr><td><strong>Tabela &#8220;Obesa&#8221;</strong></td><td>Consultas lentas em relatórios e dificuldade de apagar dados velhos. A máquina ainda aguenta o tráfego.</td><td><strong>Partitioning</strong></td><td>Dividir a tabela de histórico de transações por Mês/Ano.</td></tr><tr><td><strong>Hardware no Limite</strong></td><td>Muitos usuários simultâneos gravando e lendo dados; CPU e RAM do maior servidor do mercado já não dão conta.</td><td><strong>Sharding</strong></td><td>Dividir o banco de dados por Região (América Latina no Servidor 1, Europa no Servidor 2).</td></tr></tbody></table></figure>



<p>A implementação do particionamento geralmente é nativa e mais simples (bancos como PostgreSQL e MySQL fazem isso muito bem). Já o sharding adiciona uma camada de complexidade grande na engenharia, pois a sua aplicação precisa saber como rotear as informações.</p>



<h2 class="wp-block-heading">Quando escolher qual?</h2>



<p>A regra de ouro na arquitetura de dados é: <strong>Evite o Sharding até que ele seja absolutamente necessário.</strong></p>



<p><strong>Vá de Partitioning quando:</strong></p>



<ul class="wp-block-list">
<li>Você tem tabelas gigantes (ex: <a href="https://datauniverse.com.br/logs-logging/">logs</a>, histórico financeiro) que estão deixando os relatórios lentos.</li>



<li>Você precisa arquivar ou deletar dados antigos rapidamente (basta &#8220;dropar&#8221; a partição do mês passado, o que é instantâneo em comparação a deletar milhões de linhas).</li>



<li>Seu hardware atual ainda tem capacidade de CPU e memória, o problema é apenas a organização do dado no disco.</li>
</ul>



<p><strong>Vá de Sharding quando:</strong></p>



<ul class="wp-block-list">
<li>Você atingiu o limite de hardware. Fazer um <em>upgrade</em> no servidor atual custaria uma fortuna ou é fisicamente impossível.</li>



<li>Sua aplicação tem uma carga massiva de gravação (Writes) que um único disco não consegue processar.</li>



<li>Você precisa de distribuição geográfica (ex: guardar dados de europeus na Europa por questões de latência ou conformidade com a GDPR).</li>
</ul>



<h2 class="wp-block-heading">O Desafio do Sharding: O &#8220;Hotspot&#8221;</h2>



<p>Um dos maiores riscos do Sharding é escolher a chave errada, criando um <strong>Hotspot</strong> (ponto quente). Por exemplo, se você dividir um banco de dados de uma rede social pela letra inicial do nome, o servidor responsável pela letra &#8220;A&#8221; e &#8220;M&#8221; receberá 80% do tráfego e vai travar, enquanto o servidor das letras &#8220;X&#8221;, &#8220;Y&#8221; e &#8220;Z&#8221; ficará ocioso. A distribuição precisa ser perfeitamente balanceada.</p>
<p>O post <a href="https://datauniverse.com.br/sharding-vs-partitioning/">Sharding vs. Partitioning</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/sharding-vs-partitioning/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RBAC (Role-Based Access Control)</title>
		<link>https://datauniverse.com.br/rbac-role-based-access-control/</link>
					<comments>https://datauniverse.com.br/rbac-role-based-access-control/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 17:19:36 +0000</pubDate>
				<category><![CDATA[Data Security]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=2979</guid>

					<description><![CDATA[<p>Seja em uma startup ou em uma corporação global, o desafio de gerenciar quem pode ver ou modificar o quê dentro dos sistemas da empresa é gigantesco. É exatamente para resolver esse problema de forma escalável e segura que o RBAC (Role-Based Access Control, ou Controle de Acesso Baseado em Funções) foi criado. Para entender [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/rbac-role-based-access-control/">RBAC (Role-Based Access Control)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Seja em uma startup ou em uma corporação global, o desafio de gerenciar quem pode ver ou modificar o quê dentro dos sistemas da empresa é gigantesco. É exatamente para resolver esse problema <mark style="background-color:#fcb900" class="has-inline-color">de forma escalável</mark> e segura que o <strong>RBAC (Role-Based Access Control</strong>, ou Controle de Acesso Baseado em Funções) foi criado.</p>



<p>Para entender tudo sobre o assunto, precisamos desmistificar o que ele é, por que é fundamental e se ele realmente é o &#8220;novo&#8221; padrão da segurança em nuvem.</p>



<h3 class="wp-block-heading">O que é o RBAC e como ele funciona?</h3>



<p>O RBAC é um método de segurança que restringe o acesso a sistemas e redes com base nas funções (roles) que os usuários exercem dentro de uma organização.</p>



<p>Em vez de atribuir permissões individualmente para cada funcionário (o que seria um pesadelo administrativo), você cria <strong>Funções</strong> e atribui <strong>Permissões</strong> a essas funções. Depois, basta alocar os <strong>Usuários</strong> nas funções adequadas.</p>



<p>A estrutura lógica funciona assim:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Permissões</strong></td><td><strong>Funções (Roles)</strong></td><td><strong>Usuários</strong></td></tr><tr><td>Ações que podem ser executadas (ex: &#8220;ler banco de dados&#8221;, &#8220;deletar servidor&#8221;, &#8220;editar planilhas&#8221;).</td><td>Agrupamentos lógicos de permissões que definem um cargo (ex: &#8220;Analista de RH&#8221;, &#8220;Engenheiro de Dados Sênior&#8221;, &#8220;Auditor&#8221;).</td><td>As pessoas (ou sistemas) reais que recebem uma ou mais funções.<br></td></tr></tbody></table></figure>



<p>Se o &#8220;João&#8221; é promovido de Analista Júnior para Sênior, a equipe de TI não precisa alterar dezenas de permissões individuais. Basta remover o João da função &#8220;Júnior&#8221; e adicioná-lo à função &#8220;Sênior&#8221;.</p>



<figure class="wp-block-image size-large zoooom"><img loading="lazy" decoding="async" width="1024" height="574" src="https://datauniverse.com.br/wp-content/uploads/2026/03/image-1024x574.png" alt="" class="wp-image-2980" srcset="https://datauniverse.com.br/wp-content/uploads/2026/03/image-1024x574.png 1024w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-300x168.png 300w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-768x430.png 768w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-1536x861.png 1536w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-2048x1148.png 2048w, https://datauniverse.com.br/wp-content/uploads/2026/03/image-scaled.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Por que devemos usar o RBAC?</h3>



<p><mark style="background-color:#fcb900" class="has-inline-color">A adoção do RBAC deixou de ser uma &#8220;boa prática&#8221; para se tornar uma exigência básica de governança de TI.</mark> Os principais motivos incluem:</p>



<ol start="1" class="wp-block-list">
<li><strong>Aplicação do Princípio do Privilégio Mínimo (PoLP):</strong> O RBAC garante que um usuário tenha apenas os acessos estritamente necessários para realizar seu trabalho, reduzindo drasticamente a superfície de ataque caso a conta dele seja comprometida.</li>



<li><strong>Eficiência Operacional:</strong> Processos de <em>onboarding</em> (entrada de funcionários) e <em>offboarding</em> (saída) tornam-se rápidos e automatizados. Quando alguém sai da empresa, desativar o usuário revoga automaticamente todos os acessos associados à sua função.</li>



<li><strong>Auditoria e Compliance:</strong> Para estar em conformidade com leis como LGPD, GDPR ou normas como ISO 27001, você precisa provar quem tem acesso a quais dados. O RBAC torna essa auditoria clara e mapeável.</li>
</ol>



<h3 class="wp-block-heading">O RBAC é o &#8220;novo&#8221; padrão de segurança Cloud?</h3>



<p>Para ser direto: <strong>não, o RBAC não é novo.</strong> O conceito existe desde a década de 1990. No entanto, ele é o <strong>padrão fundamental e absoluto</strong> da segurança em nuvem moderna.</p>



<p><mark style="background-color:#fcb900" class="has-inline-color">Provedores como AWS, Microsoft Azure e Google Cloud Platform (GCP) utilizam o RBAC como o coração dos seus sistemas de IAM (Identity and Access Management)</mark>. Você não gerencia a nuvem de forma segura sem dominar o RBAC.</p>



<p>Porém, a verdadeira &#8220;novidade&#8221; e o próximo passo natural na evolução da segurança em nuvem é o <strong>ABAC (Attribute-Based Access Control)</strong>.</p>



<p>A tabela abaixo esclarece a diferença para que você entenda a evolução:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Característica</strong></td><td><strong>RBAC (Role-Based)</strong></td><td><strong>ABAC (Attribute-Based)</strong></td></tr></thead><tbody><tr><td><strong>Base do Acesso</strong></td><td>Função/Cargo do usuário (Ex: &#8220;Gerente Financeiro&#8221;).</td><td>Atributos do usuário, recurso e ambiente (Ex: Cargo + Horário + Localização).</td></tr><tr><td><strong>Complexidade</strong></td><td>Baixa/Média (Fácil de implementar no início).</td><td>Alta (Requer motores de políticas dinâmicos).</td></tr><tr><td><strong>Flexibilidade</strong></td><td>Estática (O acesso é o mesmo, não importa de onde o usuário acesse).</td><td>Dinâmica (Pode bloquear o acesso do &#8220;Gerente&#8221; se ele estiver acessando de uma rede pública de madrugada).</td></tr><tr><td><strong>Uso na Nuvem</strong></td><td>Padrão atual para organizar permissões base (IAM).</td><td>Evolução sendo adotada para dados ultrassensíveis (Zero Trust).</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Boas Práticas para Implementar RBAC</h3>



<p>Se você está estruturando o RBAC na sua empresa ou ambiente cloud, siga estas regras de ouro:</p>



<ul class="wp-block-list">
<li><strong>Comece pequeno:</strong> Não tente criar funções para cada micro-atividade. Comece com funções amplas (Leitura, Escrita, Administração) e refine conforme necessário.</li>



<li><strong>Evite o &#8220;Creep de Privilégios&#8221;:</strong> Revise periodicamente as funções. É comum que usuários acumulem funções antigas quando mudam de departamento.</li>



<li><strong>Não atribua permissões diretamente:</strong> Se um usuário precisa de um acesso temporário, crie uma função temporária. Nunca fuja do modelo Função -&gt; Permissão.</li>
</ul>
<p>O post <a href="https://datauniverse.com.br/rbac-role-based-access-control/">RBAC (Role-Based Access Control)</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/rbac-role-based-access-control/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Big Data</title>
		<link>https://datauniverse.com.br/big-data/</link>
					<comments>https://datauniverse.com.br/big-data/#respond</comments>
		
		<dc:creator><![CDATA[Alexandre Polselli]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 22:00:01 +0000</pubDate>
				<category><![CDATA[Fundamentos da Engenharia de Dados]]></category>
		<category><![CDATA[Curso Fundamentos da Engenharia de Dados]]></category>
		<guid isPermaLink="false">https://datauniverse.com.br/?p=2970</guid>

					<description><![CDATA[<p>O termo Big Data refere-se a conjuntos de dados tão volumosos, rápidos e complexos que os softwares de processamento tradicionais simplesmente não conseguem gerenciá-los. No entanto, Big Data não é apenas sobre o &#8220;tamanho&#8221; da base de dados; é sobre a capacidade de transformar fluxos massivos de informações brutas em insights estratégicos. Desde uma curtida [&#8230;]</p>
<p>O post <a href="https://datauniverse.com.br/big-data/">Big Data</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>O termo <strong>Big Data</strong> refere-se a conjuntos de dados tão volumosos, rápidos e complexos que os softwares de processamento tradicionais simplesmente não conseguem gerenciá-los. No entanto, Big Data não é apenas sobre o &#8220;tamanho&#8221; da base de dados; é sobre a capacidade de transformar fluxos massivos de informações brutas em insights estratégicos.</p>



<p>Desde uma curtida em uma rede social e sinais de GPS até sensores em turbinas de avião, quase tudo o que fazemos gera rastros digitais que alimentam esse ecossistema.</p>



<h3 class="wp-block-heading">Os 5 Vs do Big Data</h3>



<p>Para entender o que define o Big Data, a indústria utiliza o modelo dos &#8220;Vs&#8221;, que ajudam a distinguir um banco de dados comum de uma operação de Big Data real:</p>



<ol start="1" class="wp-block-list">
<li><strong>Volume:</strong> A quantidade de dados gerados é massiva (escala de Terabytes a Zettabytes).</li>



<li><strong>Velocidade:</strong> Os dados são criados e precisam ser analisados em tempo real ou quase real (ex: transações de cartão de crédito).</li>



<li><strong>Variedade:</strong> Os dados vêm em diversos formatos: <strong>estruturados</strong> (tabelas), <strong>semiestruturados</strong> (XML/JSON) e <strong>não estruturados</strong> (vídeos, áudios, posts).</li>



<li><strong>Veracidade:</strong> A necessidade de garantir que os dados sejam confiáveis e precisos.</li>



<li><strong>Valor:</strong> O ponto mais importante. De nada serve ter montanhas de dados se eles não gerarem uma decisão de negócio ou benefício social.</li>
</ol>



<h3 class="wp-block-heading">Como o Big Data é Processado?</h3>



<p>Diferente de um arquivo Excel que roda no seu computador, o Big Data exige <strong>processamento distribuído</strong>. Isso significa que o trabalho é dividido entre centenas ou milhares de servidores que trabalham em paralelo.</p>



<ul class="wp-block-list">
<li><strong>Hadoop:</strong> Um framework que permite o armazenamento e processamento de grandes volumes em clusters.</li>



<li><strong>Spark:</strong> Um motor de processamento ultra veloz que trabalha com dados em memória.</li>



<li><strong>Data Lakes:</strong> Repositórios que armazenam dados em seu formato bruto até que sejam necessários para análise.</li>
</ul>



<h3 class="wp-block-heading">Por que o Big Data é Importante?</h3>



<p>O Big Data é o &#8220;combustível&#8221; para a Inteligência Artificial e o Machine Learning. Sem grandes volumes de exemplos (dados), as máquinas não conseguem aprender padrões.</p>



<figure class="wp-block-table"><table><thead><tr><td><strong>Setor</strong></td><td><strong>Aplicação Prática</strong></td></tr></thead><tbody><tr><td><strong>Saúde</strong></td><td>Previsão de surtos de doenças e personalização de tratamentos genéticos.</td></tr><tr><td><strong>Varejo</strong></td><td>Sistemas de recomendação (como os da Netflix ou Amazon) e previsão de estoque.</td></tr><tr><td><strong>Finanças</strong></td><td>Detecção de fraudes em milissegundos durante uma compra.</td></tr><tr><td><strong>Cidades Inteligentes</strong></td><td>Otimização do tráfego em tempo real com base em sensores e GPS.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">A Base de Tudo: Bits e Bytes</h2>



<ul class="wp-block-list">
<li><strong>Bit (Binary Digit):</strong> É a menor unidade de informação. Um bit pode assumir apenas dois valores: <strong>0 ou 1</strong> (ligado ou desligado). É a linguagem fundamental dos processadores.</li>



<li><strong>Byte:</strong> Um conjunto de <strong>8 bits</strong>. É a menor unidade que representa um caractere compreensível (como uma letra ou um número). Se você digitar a letra &#8220;A&#8221;, ela ocupará aproximadamente 1 byte.</li>
</ul>



<h3 class="wp-block-heading">As Medidas que Usamos no Dia a Dia</h3>



<p>A partir do Byte, as medidas crescem em escalas de 1.024 (embora comercialmente o mercado use o arredondamento para 1.000).</p>



<ul class="wp-block-list">
<li><strong>Kilobyte (KB):</strong> Equivale a 1.024 bytes. É o tamanho comum de arquivos de texto simples ou ícones pequenos.</li>



<li><strong>Megabyte (MB):</strong> São 1.024 KB. Aqui entramos no mundo multimídia: uma música em MP3 média tem cerca de 5 MB, e um minuto de vídeo em baixa resolução pode ocupar de 10 a 20 MB.</li>



<li><strong>Gigabyte (GB):</strong> São 1.024 MB. É a medida padrão para pendrives, memória RAM e smartphones. Um filme em alta definição (HD) costuma ocupar entre 4 GB e 8 GB.</li>



<li><strong>Terabyte (TB):</strong> São 1.024 GB. Atualmente, é o padrão para HDs externos e computadores de alta performance. Para ter uma ideia, 1 TB pode armazenar cerca de 200 mil músicas.</li>
</ul>



<h3 class="wp-block-heading">A Escala Industrial e Global</h3>



<p>Além do Terabyte, entramos em grandezas que fogem do uso doméstico comum e passam a descrever o tráfego global da internet e grandes centros de dados.</p>



<ul class="wp-block-list">
<li><strong>Petabyte (PB):</strong> 1.024 Terabytes. O Google, por exemplo, processa dezenas de petabytes por dia. Estima-se que 2 PB seriam suficientes para armazenar toda a produção acadêmica de um país como os EUA.</li>



<li><strong>Exabyte (EB):</strong> 1.024 Petabytes. É uma escala usada para medir o tráfego total da internet mundial por mês. Um único Exabyte poderia armazenar o equivalente a 1 bilhão de gigabytes.</li>



<li><strong>Zettabyte (ZB):</strong> 1.024 Exabytes. Imagine 1 bilhão de discos rígidos de 1 TB lotados. Isso é um Zettabyte. Especialistas dizem que se gravássemos todas as palavras já ditas pela humanidade em alta qualidade, seriam necessários cerca de 42 ZB.</li>



<li><strong>Yottabyte (YB):</strong> 1.024 Zettabytes. É o topo da escala atual. Para dar uma dimensão humana, se dividíssemos um Yottabyte pela população mundial, cada pessoa teria direito a cerca de 142 Terabytes de armazenamento próprio.</li>
</ul>



<figure class="wp-block-table"><table><thead><tr><td><strong>Unidade</strong></td><td><strong>Sigla</strong></td><td><strong>Equivalência (Base 2)</strong></td><td><strong>Tamanho Aproximado (em Bytes)</strong></td><td><strong>Exemplo do Mundo Real</strong></td></tr></thead><tbody><tr><td><strong>Bit</strong></td><td>b</td><td>0 ou 1</td><td>&#8211;</td><td>A menor unidade (impulso elétrico).</td></tr><tr><td><strong>Byte</strong></td><td>B</td><td>8 bits</td><td>1 B</td><td>Um único caractere de texto.</td></tr><tr><td><strong>Kilobyte</strong></td><td>KB</td><td>1.024 Bytes</td><td>1.024 B</td><td>Um documento de texto simples (.txt).</td></tr><tr><td><strong>Megabyte</strong></td><td>MB</td><td>1.024 KB</td><td>~1 Milhão</td><td>Uma foto em baixa resolução ou uma música MP3.</td></tr><tr><td><strong>Gigabyte</strong></td><td>GB</td><td>1.024 MB</td><td>~1 Bilhão</td><td>Um filme em HD ou a memória de um celular.</td></tr><tr><td><strong>Terabyte</strong></td><td>TB</td><td>1.024 GB</td><td>~1 Trilhão</td><td>Um HD externo moderno ou 200 mil músicas.</td></tr><tr><td><strong>Petabyte</strong></td><td>PB</td><td>1.024 TB</td><td>~1 Quatrilhão</td><td>Dados processados pelo Google diariamente.</td></tr><tr><td><strong>Exabyte</strong></td><td>EB</td><td>1.024 PB</td><td>~1 Quintilhão</td><td>O volume total de dados que circula na internet por dia.</td></tr><tr><td><strong>Zettabyte</strong></td><td>ZB</td><td>1.024 EB</td><td>~1 Sextilhão</td><td>Todas as palavras já ditas pela humanidade.</td></tr><tr><td><strong>Yottabyte</strong></td><td>YB</td><td>1.024 ZB</td><td>~1 Septilhão</td><td>Toda a capacidade de armazenamento global somada.</td></tr></tbody></table></figure>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="572" height="1024" src="https://datauniverse.com.br/wp-content/uploads/2026/02/image-16.png" alt="" class="wp-image-2971" srcset="https://datauniverse.com.br/wp-content/uploads/2026/02/image-16.png 572w, https://datauniverse.com.br/wp-content/uploads/2026/02/image-16-168x300.png 168w" sizes="(max-width: 572px) 100vw, 572px" /></figure>



<h3 class="wp-block-heading">Conclusão</h3>



<p>Big Data não é uma tecnologia do futuro; é a fundação da economia atual. Para empresas e profissionais, o desafio não é mais &#8220;obter&#8221; dados, mas sim saber quais perguntas fazer a eles. A capacidade de navegar nesse oceano de informações define quem lidera a inovação e quem fica para trás na transformação digital.</p>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1772229300704"><strong class="schema-faq-question">Curiosidade: Por que 1.024 e não 1.000?</strong> <p class="schema-faq-answer">Diferente do sistema métrico decimal (onde 1 kg = 1.000 g), a computação utiliza o <strong>sistema binário</strong> (base 2). Como $2^{10} = 1.024$, esse se tornou o padrão técnico para os saltos de unidade.<br/><br/>No entanto, fabricantes de HDs e SSDs costumam usar a base 10 (1.000) por questões comerciais, e é por isso que, ao plugar um &#8220;HD de 1 TB&#8221; no Windows, ele costuma mostrar apenas cerca de <strong>931 GB</strong> disponíveis.</p> </div> </div>
<p>O post <a href="https://datauniverse.com.br/big-data/">Big Data</a> apareceu primeiro em <a href="https://datauniverse.com.br">Data Universe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datauniverse.com.br/big-data/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
