<?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>Direto e Fácil &#187; MySql</title>
	<atom:link href="http://www.diretoefacil.com.br/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diretoefacil.com.br</link>
	<description>Não tem que ser difícil.</description>
	<lastBuildDate>Tue, 20 Dec 2011 15:54:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Removendo referências em cascata no Rails</title>
		<link>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/</link>
		<comments>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 23:48:22 +0000</pubDate>
		<dc:creator>Bruno Milare</dc:creator>
				<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Cascata]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=204</guid>
		<description><![CDATA[O problema: Recentement me deparei com um problema que pode ser considerado bem sutil. Eu tinha três tabelas e cada uma tinha relacionamento 1 para n com outra, algo parecido com o MER abaixo. Eu estava tratando a remoção em (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h1>O problema:</h1>
<p>Recentement me deparei com um problema que pode ser considerado bem sutil.<br />
Eu tinha três tabelas e cada uma tinha relacionamento 1 para n com outra, algo parecido com o MER abaixo.</p>
<div class="wp-caption aligncenter" style="width: 468px"><img alt="MER" src="http://img138.imageshack.us/img138/3425/relacionamentodestroyde.png" title="MER" width="458" height="108" /><p class="wp-caption-text">Relacionamentos</p></div>
<p>Eu estava tratando a remoção em cascata das dependências utilizando :delete_all, e quando removia a tabela principal, somente o primeiro nível de referência era removido, deixando a última tabela intacta, fui atrás de saber o porque disso.</p>
<p>Descobri que o <em>:delete_all</em> age direto na tabela, portanto, assim que um registro é destruído suas dependências são destruídas direto no banco e a aplicação Rails nem se dá conta de que algo foi removido, então, quando a tabela intermediária é removida, a aplicação não sabe que tem que remover a próxima dependência e então pára por aí.</p>
<p>Para resolver isso utilizei o <em>:destroy</em> para remoção em cascata, esse método instancia o objeto a ser removido e então os callbacks são chamados, assim a aplicação é notificada da remoção e chama a próxima remoção de dependências, obviamente esse método é mais lento, vamos verificar isso na parte de performance.<br />
<span id="more-204"></span></p>
<h1>Na prática:</h1>
<p>Para ilustrar o problema e fazer algumas comparações, criei o cenário ilustrado no MER acima. Criando 10 produtos, para cada produto 10 categorias e para cada categoria 10 tags. Tendo portanto:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Produtos: <span style="color: #000000;">10</span><br />
Categorias: <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> = <span style="color: #000000;">100</span><br />
Tags: <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> = <span style="color: #000000;">1000</span></div></div>
<h2>:delete_all</h2>
<p>Seguem os modelos:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Product <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:categories</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete_all</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Category <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; belongs_to <span style="color:#ff3333; font-weight:bold;">:product</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:tags</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete_all</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Tag <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; belongs_to <span style="color:#ff3333; font-weight:bold;">:category</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Temos assim o seguinte resultado:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 10, categories: 100, tags: 1000&quot;</span> <br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.all.each<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000; font-weight: bold;">|</span>p<span style="color: #000000; font-weight: bold;">|</span> p.destroy<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 0, categories: 0, tags: 1000&quot;</span></div></div>
<p>Vemos que as tags permaneceram intactas.</p>
<h2>:destroy</h2>
<p>Nesse caso podemos alterar somente o modelo do Produto, não há necessidade de alterar a Categoria visto que as Tags são o nosso último nível e não precisamos tratar suas dependências.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Product <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:categories</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:destroy</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>E o resultado:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 10, categories: 100, tags: 1000&quot;</span> <br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.all.each<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000; font-weight: bold;">|</span>p<span style="color: #000000; font-weight: bold;">|</span> p.destroy<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 0, categories: 0, tags: 0&quot;</span></div></div>
<h2>Perfomance</h2>
<p>Para cada produto, de 100, vamos aumentar o número de categorias para 1000 registros por produto e sem nenhuma registro de tag, pois assim podemos validar a performance, pois serão apresentados os mesmo resultados.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Produtos <span style="color: #000000;">100</span><br />
Categorias <span style="color: #000000;">1000</span> x <span style="color: #000000;">100</span> = <span style="color: #000000;">100000</span></div></div>
<p>Com :delete_all:</p>
<pre>4 seconds</pre>
<p>Com :destroy:</p>
<pre>118 seconds</pre>
<p>Só pra ter um ideia, rs =)</p>
<p>Abraços,</p>
<p>Bruno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Buddy &#8211; Admin para MySql leve e rápido.</title>
		<link>http://www.diretoefacil.com.br/2008/08/21/sql-buddy-admin-para-mysql-leve-e-rapido/</link>
		<comments>http://www.diretoefacil.com.br/2008/08/21/sql-buddy-admin-para-mysql-leve-e-rapido/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 23:54:11 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[MySql]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=7</guid>
		<description><![CDATA[Navegando pela web esses dias dei de cara com um aplicativo web para administração do MySql o SQL Buddy, acho que todo desenvolvedor conhece o phpMyAdmin ele realmente é uma mão na roda quando precisamos administrar algo no MySql de (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/08/21/sql-buddy-admin-para-mysql-leve-e-rapido/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Navegando pela web esses dias dei de cara com um aplicativo web para administração do MySql o <a href="http://www.sqlbuddy.com/" target="_blank">SQL Buddy</a>, acho que todo desenvolvedor conhece o <a href="http://www.phpmyadmin.net" target="_blank">phpMyAdmin</a> ele realmente é uma mão na roda quando precisamos administrar algo no MySql de forma remota, porém eu acho a interface do phpMyAdmin meio confusa e muita vezes acho que a velocidade deixa muito a desejar.</p>
<p>O SQL Buddy é um Web based MySQL administration que foca na simplicidade e na velocidade, pra isso ele usa ajax para as requisições tornando assim a interface e usabilidade do mesmo bem agradáveis.</p>
<p>A simplicidade da instalação também chama a atenção, é bem no estilo rails, pois basta descompactar o mesmo em um diretório e pronto, é claro que tem que estar com o php rodando. Vale lembrar que tem suporte a temas e ainda já tem tradução para português. A dica está dada!</p>
<p style="text-align: center;"><a href="http://www.sqlbuddy.com/" target="_blank"><img class="size-full wp-image-9 aligncenter" title="sqlbuddy" src="http://www.diretoefacil.com.br/wp-content/uploads/2008/08/sqlbuddy.jpg" alt="" width="500" height="289" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/08/21/sql-buddy-admin-para-mysql-leve-e-rapido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.550 seconds -->

