<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>Normalização de dados</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Normalização_de_dados"/>
<meta name="wx_page_id" content="8100"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Normalização de dados" id="wxsec1"><h1 class="pagetitle" id="wx1">Normalização de dados</h1>

<wx:template id="wx_t1" pagename="Predefinição:Emtraducao2" page_id="304115"/>
<table class="caixa infodestaque" style="background: #ffffff; border: 1px solid #CECDCD; padding: .3em; margin-bottom: 3px; font-size: 95%; color:#797878; text-align: center;" id="wx2">
<tr id="wx3">
<td id="wx4"><a href="/wpt/Imagem:In_translation_icon.png" title="" wx:linktype="image" wx:pagename="Imagem:In_translation_icon.png" id="wx5"><img src="/wpt/Imagem:In_translation_icon.png" alt="" width="40" id="wx6"/></a> </td>
<td id="wx7"><b id="wx8">Este artigo encontra-se parcialmente em língua estrangeira. <a href="/wpt/Ajuda:Guia_de_tradu%C3%A7%C3%A3o" title="Ajuda:Guia de tradução" wx:linktype="known" wx:pagename="Ajuda:Guia_de_tradução" id="wx9"><span style="color:#FF4048;" id="wx10">Ajude e colabore com a tradução</span></a>.</b> 

<p id="wx11"><small id="wx12"><i id="wx13">O trecho em língua estrangeira encontra-se oculto.</i></small></p>
</td>
</tr>
</table>

<wx:templateend start="wx_t1"/>
<p id="wx14">A <b id="wx15">normalização de dados</b> é uma série de passos que se segue no projeto de um banco de dados que permite um armazenamento consistente e um eficiente acesso aos dados em um banco de dados relacional. Esses passos reduzem a redundância de dados e as chances dos dados se tornarem inconsistentes.</p>

<p id="wx16">No entanto, muitas <a href="/wpt/SGBD" title="SGBD" wx:linktype="known" wx:pagename="SGBD" wx:page_id="41446" id="wx17">SGBDs</a> relacionais não têm separação suficiente entre o projeto lógico da base de dados e a implementação física do <a href="/wpt/Banco_de_dados" title="Banco de dados" wx:linktype="known" wx:pagename="Banco_de_dados" wx:page_id="452" id="wx18">banco de dados</a>, e isso tem como conseqüência que as consultas feitas a um banco de dados totalmente normalizado têm um mau desempenho. Nestes casos, usa-se por vezes a <a href="/wpt/Desnormaliza%C3%A7%C3%A3o" class="new" title="Desnormalização" wx:linktype="unknown" wx:pagename="Desnormalização" id="wx19">desnormalização</a> para melhorar o desempenho, com o custo de menores garantias de consistência.</p>

<div id="wx_toc"/>

<a id="Panor.C3.A2mica_informal" name="Panor.C3.A2mica_informal"/>
<wx:section level="2" title="Panorâmica informal" id="wxsec2"><h2 id="wx20">Panorâmica informal</h2>

<p id="wx21">Diz-se que uma tabela num/a banco/base de dados relacional está numa certa forma normal se satisfaz certas condições. O trabalho original de <a href="/wpt/Edgar_F._Codd" title="Edgar F. Codd" wx:linktype="known" wx:pagename="Edgar_F._Codd" wx:page_id="927803" id="wx22">Edgar F. Codd</a> definiu três dessas formas, mas existem hoje outras formas normais geralmente aceitas. Damos aqui uma curta panorâmica informal das mais comuns. Cada forma normal listada abaixo representa uma condição mais forte que a que a precede na lista. Para a maioria dos efeitos práticos, considera-se que as bases de dados estão normalizadas se aderirem à terceira forma normal.</p>

<dl id="wx23">
<dd id="wx24"><i id="wx25">Primeira Forma Normal</i>
<p id="wx26">(ou <i id="wx27">1FN</i>) requer que todos os valores de colunas em uma tabela, sejam <i id="wx28">atômicos</i> (ex., um número é um átomo, enquanto uma lista ou um conjunto não o são). Por exemplo, a normalização elimina grupos repetidos pondo-os cada um em uma tabela separada, conectando-os com uma chave primária ou estrangeira.</p>
</dd>
</dl>

<dl id="wx29">
<dd id="wx30"><i id="wx31">Segunda Forma Normal</i>
<p id="wx32">(ou <i id="wx33">2FN</i>) requer que não haja dependência funcional não-trivial de um atributo que não seja a chave, em parte da chave candidata.</p>
</dd>
</dl>

<dl id="wx34">
<dd id="wx35"><i id="wx36">Terceira Forma Normal</i>
<p id="wx37">(ou <i id="wx38">3FN</i>) requer não haver dependências funcionais não-triviais de atributos que não sejam chave, em qualquer coisa exceto um superconjunto de uma chave candidata.</p>
</dd>
</dl>

<dl id="wx39">
<dd id="wx40"><i id="wx41">Forma Normal de Boyce-Codd</i>
<p id="wx42">(ou <i id="wx43">BCNF</i>)</p>
</dd>
</dl>

<p id="wx44">requer que não exista nenhuma dependência funcional não-trivial de atributos em algo mais do que um superconjunto de uma chave candidata. Neste estágio, todos os atributos são dependentes de uma chave, de uma chave inteira e de nada mais que uma chave (excluindo dependências triviais, como A-&gt;A).</p>

<dl id="wx45">
<dd id="wx46"><i id="wx47">Quarta Forma Normal</i>
<p id="wx48">(ou <i id="wx49">4NF</i>) requer que não exista nenhuma dependência multi-valorada não-trivial de conjuntos de atributo em algo mais de que um superconjunto de uma chave candidata.</p>
</dd>
</dl>

<dl id="wx50">
<dd id="wx51"><i id="wx52">Quinta Forma Normal</i>
<p id="wx53">(ou <i id="wx54">5NF</i> ou <i id="wx55">PJ/NF</i>) requer que não exista dependências de joins não triviais que não venham de key constraints.</p>
</dd>
</dl>

<dl id="wx56">
<dd id="wx57"><i id="wx58">Domain-Key Normal Form</i>
<p id="wx59">(ou <i id="wx60">DK/NF</i>) requer que todas as constraints sigam os domínios e key constraints.</p>
</dd>
</dl>

<a id="Vis.C3.A3o_Formal" name="Vis.C3.A3o_Formal"/>
</wx:section><wx:section level="2" title="Visão Formal" id="wxsec3"><h2 id="wx61">Visão Formal</h2>

<p id="wx62">Antes de falar sobre normalização, é necessário utilizar alguns termos a partir do <a href="/wpt/Modelo_relacional" title="Modelo relacional" wx:linktype="known" wx:pagename="Modelo_relacional" wx:page_id="15904" id="wx63">modelo relacional</a> e defini-los na <a href="/wpt/Teoria_de_conjuntos" title="Teoria de conjuntos" wx:linktype="known" wx:pagename="Teoria_de_conjuntos" wx:page_id="60325" id="wx64">teoria de conjuntos</a>. Estas definições muitas vezes serão simplificações de seus significados originais, uma vez que somente alguns aspectos do modelo relacional são levados em consideração na normalização.</p>

<p id="wx65">As Notações Básicas utilizadas no modelo relacional são <i id="wx66">nomes de relacionamentos</i> e <i id="wx67">nomes de atributos</i>. Representaremos estas cadeias de caracteres tais como <i id="wx68">Pessoas</i> e <i id="wx69">Nomes</i> e geralmente usaremos variáveis como <i id="wx70">r</i>, <i id="wx71">s</i>, <i id="wx72">t</i>, ... e <i id="wx73">a</i>, <i id="wx74">b</i>, <i id="wx75">c</i> para o conjunto dados definido sobre eles. Outra notação básica é o conjunto de <i id="wx76">valores atômicos</i> que contém valores tais como números e cadeias de caracteres.</p>

<p id="wx77">Nossa primeira definição que nos interessa é a noção de <i id="wx78">tupla</i> a qual formaliza a noção de linha ou registro em uma tabela:</p>

<dl id="wx79">
<dd id="wx80"><b id="wx81">Def.</b>
<p id="wx82">Uma <i id="wx83">tupla</i> é uma <a href="/wpt/Fun%C3%A7%C3%A3o" title="Função" wx:linktype="known" wx:pagename="Função" wx:page_id="884" id="wx84">função</a> parcial de nomes de atributos para valores atômicos.</p>
</dd>
</dl>

<dl id="wx85">
<dd id="wx86"><b id="wx87">Def.</b>
<p id="wx88">Um <i id="wx89">cabeçalho</i> é um conjunto finito de nomes de atributos.</p>
</dd>
</dl>

<dl id="wx90">
<dd id="wx91"><b id="wx92">Def.</b>
<p id="wx93">A <i id="wx94">projeção</i> de uma tupla <i id="wx95">t</i> em um conjunto finito de atributos <i id="wx96">A</i> é <i id="wx97">t</i>[<i id="wx98">A</i>] = { (<i id="wx99">a</i>, <i id="wx100">v</i>) : (<i id="wx101">a</i>, <i id="wx102">v</i>) ∈ <i id="wx103">t</i>, <i id="wx104">a</i> ∈ <i id="wx105">A</i> }.</p>
</dd>
</dl>

<p id="wx106">A próxima definição é a de <i id="wx107">relação</i> na qual formaliza-se o teor de uma tabela como ele é definido no modelo relacional.</p>

<dl id="wx108">
<dd id="wx109"><b id="wx110">Def.</b>
<p id="wx111">Uma <i id="wx112">relação</i> é uma tupla (<i id="wx113">H</i>, <i id="wx114">B</i>) sendo <i id="wx115">H</i>, o cabeçalho, um cabeçalho e <i id="wx116">B</i>, o corpo, um conjunto de tuplas em que possuem todas o domínio <i id="wx117">H</i>.</p>
</dd>
</dl>

<p id="wx118">Como uma relação corresponde definitivamente com aquela que é usualmente chamada de extensão de um predicado em <a href="/wpt/L%C3%B3gica_de_primeira_ordem" title="Lógica de primeira ordem" wx:linktype="known" wx:pagename="Lógica_de_primeira_ordem" wx:page_id="660396" id="wx119">lógica de primeira ordem</a> exceto que aqui nós identificamos os locais no predicado com nomes de atributos. Geralmente no modelo relacional um esquema de banco de dados é dito consistir-se de um conjunto de nomes relação, os cabeçalhos que são associados com esses nomes e as restrições que devem manter toda instância do esquema de banco de dados. Para normalização nós nos concentraremos nas restrições que indicam relações individuais, isto é, as <i id="wx120">restrições relacionais</i>. O propósito destas restrições é descrever o <i id="wx121"><a href="/wpt/Universo_%28mathematics%29" class="new" title="Universo (mathematics)" wx:linktype="unknown" wx:pagename="Universo_(mathematics)" id="wx122">universo</a> relacional</i>, ou seja, o conjunto de todas as relações que são permitidas para serem associadas com certos nomes de relação.</p>

<dl id="wx123">
<dd id="wx124"><b id="wx125">Def.</b>
<p id="wx126">Um <i id="wx127">universo relacional</i> <i id="wx128">U</i> sobre um cabeçalho <i id="wx129">H</i> é um conjunto não vazio de relações com o cabeçalho <i id="wx130">H</i>.</p>
</dd>
</dl>

<dl id="wx131">
<dd id="wx132"><b id="wx133">Def.</b>
<p id="wx134">Um <i id="wx135">esquema relacional</i> (<i id="wx136">H</i>, <i id="wx137">C</i>) consiste de um cabeçalho <i id="wx138">H</i> e um predicado <i id="wx139">C</i>(<i id="wx140">R</i>) que é definido por todas as relações <i id="wx141">R</i> com o cabeçalho <i id="wx142">H</i>.</p>
</dd>
</dl>

<dl id="wx143">
<dd id="wx144"><b id="wx145">Def.</b>
<p id="wx146">Uma relação satisfaz o esquema relacional (<i id="wx147">H</i>, <i id="wx148">C</i>) se possuir o cabeçalho <i id="wx149">H</i> e satisfizer <i id="wx150">C</i>.</p>
</dd>
</dl>

<a id="Constraints_Chave_e_Depend.C3.AAncias_Funcionais" name="Constraints_Chave_e_Depend.C3.AAncias_Funcionais"/>
</wx:section><wx:section level="2" title="Constraints Chave e Dependências Funcionais" id="wxsec4"><h2 id="wx151">Constraints Chave e Dependências Funcionais</h2>

<p id="wx152">Um dos mais simples e mais importantes tipos de restrições relacionais é a <i id="wx153">constraint chave</i>. Ela nos informa que em cada instância de um certo esquema relacional as tuplas podem ser identificadas por seus valores por certos atributos.</p>

<dl id="wx154">
<dd id="wx155"><b id="wx156">Def.</b>
<p id="wx157">Uma <i id="wx158">superchave</i> é escrita como um conjunto finito de nomes de atributos.</p>
</dd>
</dl>

<dl id="wx159">
<dd id="wx160"><b id="wx161">Def.</b>
<p id="wx162">Uma superchave <i id="wx163">K</i> <i id="wx164">indica numa relação</i> (<i id="wx165">H</i>, <i id="wx166">B</i>) se <i id="wx167">K</i> ⊆ <i id="wx168">H</i> e que não existem duas tuplas distintas <i id="wx169">t<sub id="wx170">1</sub></i> e <i id="wx171">t<sub id="wx172">2</sub></i> em <i id="wx173">B</i> tais que <i id="wx174">t<sub id="wx175">1</sub></i>[<i id="wx176">K</i>] = <i id="wx177">t<sub id="wx178">2</sub></i>[<i id="wx179">K</i>].</p>
</dd>
</dl>

<dl id="wx180">
<dd id="wx181"><b id="wx182">Def.</b>
<p id="wx183">Uma superchave <i id="wx184">K</i> indica num universo relacional <i id="wx185">U</i> sob um cabeçalho <i id="wx186">H</i> se ela indica em toda relação de <i id="wx187">U</i>.</p>
</dd>
</dl>

<dl id="wx188">
<dd id="wx189"><b id="wx190">Def.</b>
<p id="wx191">Uma superchave <i id="wx192">K</i> é indicada como uma <i id="wx193">chave candidata</i> para um universo relacional <i id="wx194">U</i> sobre <i id="wx195">H</i> se ela é indicada como uma superchave para <i id="wx196">U</i> e se não existe <a href="/wpt/Subconjunto_pr%C3%B3prio" title="Subconjunto próprio" wx:linktype="known" wx:pagename="Subconjunto_próprio" wx:page_id="46922" id="wx197">subconjunto próprio</a> de <i id="wx198">K</i> que também seja indicada como uma superchave para <i id="wx199">U</i>.</p>
</dd>
</dl>

<dl id="wx200">
<dd id="wx201"><b id="wx202">Def.</b>
<p id="wx203">Uma <i id="wx204">dependência funcional</i> (ou DF para abreviar) é escrita como <i id="wx205">X</i>-&gt;<i id="wx206">Y</i> com <i id="wx207">X</i> e <i id="wx208">Y</i> conjuntos finitos de nomes de atributos.</p>
</dd>
</dl>

<wx:template id="wx_t2" pagename="Predefinição:Emtraducao2" page_id="304115"/>
<table class="caixa infodestaque" style="background: #ffffff; border: 1px solid #CECDCD; padding: .3em; margin-bottom: 3px; font-size: 95%; color:#797878; text-align: center;" id="wx209">
<tr id="wx210">
<td id="wx211"><a href="/wpt/Imagem:In_translation_icon.png" title="" wx:linktype="image" wx:pagename="Imagem:In_translation_icon.png" id="wx212"><img src="/wpt/Imagem:In_translation_icon.png" alt="" width="40" id="wx213"/></a> </td>
<td id="wx214"><b id="wx215">Este artigo encontra-se parcialmente em língua estrangeira. <a href="/wpt/Ajuda:Guia_de_tradu%C3%A7%C3%A3o" title="Ajuda:Guia de tradução" wx:linktype="known" wx:pagename="Ajuda:Guia_de_tradução" id="wx216"><span style="color:#FF4048;" id="wx217">Ajude e colabore com a tradução</span></a>.</b> 

<p id="wx218"><small id="wx219"><i id="wx220">O trecho em língua estrangeira encontra-se oculto.</i></small></p>
</td>
</tr>
</table>

<wx:templateend start="wx_t2"/>
<dl id="wx221">
<dd id="wx222"><b id="wx223">Def.</b>
<p id="wx224">Uma dependência funcional <i id="wx225">X</i>-&gt;<i id="wx226">Y</i> <i id="wx227">é válida numa relação</i> (<i id="wx228">H</i>, <i id="wx229">B</i>) se <i id="wx230">X</i> e <i id="wx231">Y</i> são subconjuntos de <i id="wx232">H</i> e para todas as tuplas <i id="wx233">t<sub id="wx234">1</sub></i> e <i id="wx235">t<sub id="wx236">2</sub></i> em <i id="wx237">B</i> temos que se <i id="wx238">t<sub id="wx239">1</sub></i>[<i id="wx240">X</i>] = <i id="wx241">t<sub id="wx242">2</sub></i>[<i id="wx243">X</i>] então <i id="wx244">t<sub id="wx245">1</sub></i>[<i id="wx246">Y</i>] = <i id="wx247">t<sub id="wx248">2</sub></i>[<i id="wx249">Y</i>]</p>
</dd>
</dl>

<dl id="wx250">
<dd id="wx251"><b id="wx252">Def.</b>
<p id="wx253">Uma dependência funcional <i id="wx254">X</i>-&gt;<i id="wx255">Y</i> <i id="wx256">é válida numa relação universo</i> <i id="wx257">U</i> sobre um cabeçalho <i id="wx258">H</i> se é válida em todas as relações em <i id="wx259">U</i>.</p>
</dd>
</dl>

<dl id="wx260">
<dd id="wx261"><b id="wx262">Def.</b>
<p id="wx263">Uma dependência funcional é <i id="wx264">trivial trivial sob um cabeçalho</i> <i id="wx265">H</i> se se mantiver em todos os universos relacionais sobre <i id="wx266">H</i>.</p>
</dd>
</dl>

<dl id="wx267">
<dd id="wx268"><b id="wx269">Teorema</b>
<p id="wx270">Uma DF <i id="wx271">X</i>-&gt;<i id="wx272">Y</i> é trivial sob um cabeçalho <i id="wx273">H</i> sse <i id="wx274">Y</i> ⊆ <i id="wx275">X</i> ⊆ <i id="wx276">H</i>.</p>
</dd>
</dl>

<dl id="wx277">
<dd id="wx278"><b id="wx279">Teorema</b>
<p id="wx280">Uma superchave <i id="wx281">K</i> mantém-se num universo relacional <i id="wx282">U</i> sobre <i id="wx283">H</i> sse <i id="wx284">K</i> ⊆ <i id="wx285">H</i> e <i id="wx286">K</i>-&gt;<i id="wx287">H</i> se mantém em <i id="wx288">U</i>.</p>
</dd>
</dl>

<dl id="wx289">
<dd id="wx290"><b id="wx291">Def. (regras de Armstrong)</b>
<p id="wx292">Seja <i id="wx293">S</i> um conjunto de DFs; o <i id="wx294">fecho</i> de <i id="wx295">S</i> sob um cabeçalho <i id="wx296">H</i>, chamado <i id="wx297">S</i><sup id="wx298">+</sup>, é o menor superconjunto de <i id="wx299">S</i> tal que:</p>

<dl id="wx300">
<dd id="wx301">
<p id="wx302">(reflexão) se <i id="wx303">Y</i> ⊆ <i id="wx304">X</i> ⊆ <i id="wx305">H</i> então <i id="wx306">X</i>-&gt;<i id="wx307">Y</i> em <i id="wx308">S</i><sup id="wx309">+</sup></p>
</dd>

<dd id="wx310">
<p id="wx311">(transitividade) se <i id="wx312">X</i>-&gt;<i id="wx313">Y</i> em <i id="wx314">S</i><sup id="wx315">+</sup> e <i id="wx316">Y</i>-&gt;<i id="wx317">Z</i> em <i id="wx318">S</i><sup id="wx319">+</sup> então <i id="wx320">X</i>-&gt;<i id="wx321">Z</i> em <i id="wx322">S</i><sup id="wx323">+</sup></p>
</dd>

<dd id="wx324">
<p id="wx325">(augmentation) se <i id="wx326">X</i>-&gt;<i id="wx327">Y</i> em <i id="wx328">S</i><sup id="wx329">+</sup> e <i id="wx330">Z</i> ⊆ <i id="wx331">H</i> então <i id="wx332">X</i>∪<i id="wx333">Z</i> -&gt; <i id="wx334">Y</i>∪<i id="wx335">Z</i> em <i id="wx336">S</i><sup id="wx337">+</sup></p>
</dd>
</dl>
</dd>
</dl>

<dl id="wx338">
<dd id="wx339"><b id="wx340">Theorem</b>
<p id="wx341">Armstrong's rules are sound and complete, i.e., given a header <i id="wx342">H</i> and a set <i id="wx343">S</i> of FDs that only contain subsets of <i id="wx344">H</i> then the FD <i id="wx345">X</i>-&gt;<i id="wx346">Y</i> is in <i id="wx347">S</i><sup id="wx348">+</sup> iff it holds in all relation universes over <i id="wx349">H</i> in which all FDs in <i id="wx350">S</i> hold.</p>
</dd>
</dl>

<dl id="wx351">
<dd id="wx352"><b id="wx353">Def.</b>
<p id="wx354">If <i id="wx355">X</i> is a finite set of attributes and <i id="wx356">S</i> a finite set of FDs then the <i id="wx357">completion</i> of <i id="wx358">X</i> under <i id="wx359">S</i>, written as <i id="wx360">X</i><sup id="wx361">+</sup>, is the smallest superset of <i id="wx362">X</i> such that:</p>

<dl id="wx363">
<dd id="wx364">
<p id="wx365">if <i id="wx366">Y</i>-&gt;<i id="wx367">Z</i> in <i id="wx368">S</i> and <i id="wx369">Y</i> ⊆ <i id="wx370">X</i><sup id="wx371">+</sup> then <i id="wx372">Z</i> ⊆ <i id="wx373">X</i><sup id="wx374">+</sup></p>
</dd>
</dl>
</dd>
</dl>

<p id="wx375">The completion of an attribute set can be used to compute if a certain dependency is in the closure of a set of FDs.</p>

<dl id="wx376">
<dd id="wx377"><b id="wx378">Theorem</b>
<p id="wx379">Given a header <i id="wx380">H</i> and a set <i id="wx381">S</i> of FDs that only contain subsets of <i id="wx382">H</i> it holds that <i id="wx383">X</i>-&gt;<i id="wx384">Y</i> is in <i id="wx385">S</i><sup id="wx386">+</sup> iff <i id="wx387">Y</i> ⊆ <i id="wx388">X</i><sup id="wx389">+</sup>.</p>
</dd>
</dl>

<dl id="wx390">
<dd id="wx391"><b id="wx392">Algorithm (deriving candidate keys from FDs)</b></dd>
</dl>

<pre id="wx393">
      <b id="wx394">INPUT:</b> a set <i id="wx395">S</i> of FDs that contain only subsets of a header <i id="wx396">H</i>
      <b id="wx397">OUTPUT:</b> the set <i id="wx398">C</i> of superkeys that hold as candidate keys in
              all relation universes over <i id="wx399">H</i> in which all FDs in <i id="wx400">S</i> hold
      <b id="wx401">begin</b>
        <i id="wx402">C</i> := ∅;          // found candidate keys
        <i id="wx403">Q</i> := { <i id="wx404">H</i> };      // superkeys that contain candidate keys
        <b id="wx405">while</b> <i id="wx406">Q</i> &lt;&gt; ∅ <b id="wx407">do</b>
          let <i id="wx408">K</i> be some element from <i id="wx409">Q</i>;
          <i id="wx410">Q</i> := <i id="wx411">Q</i> - { <i id="wx412">K</i> };  
          <i id="wx413">minimal</i> := <b id="wx414">true</b>;
          <b id="wx415">for each</b> <i id="wx416">X-&gt;Y</i> <b id="wx417">in</b> <i id="wx418">S</i> <b id="wx419">do</b> 
            <i id="wx420">K'</i> := (<i id="wx421">K</i> - <i id="wx422">Y</i>) ∪ <i id="wx423">X</i>;   // derive new superkey
            <b id="wx424">if</b> <i id="wx425">K'</i> ⊂ <i id="wx426">K</i>
            <b id="wx427">then</b>
              <i id="wx428">minimal</i> := <b id="wx429">false</b>;
              <i id="wx430">Q</i> := <i id="wx431">Q</i> ∪ { <i id="wx432">K'</i> };
            <b id="wx433">fi</b>
          <b id="wx434">od</b>
          <b id="wx435">if</b> <i id="wx436">minimal</i> <b id="wx437">and</b> there is not a subset of <i id="wx438">K</i> in <i id="wx439">C</i>
          <b id="wx440">then</b>
            remove all supersets of <i id="wx441">K</i> from <i id="wx442">C</i>;
            <i id="wx443">C</i> := <i id="wx444">C</i> ∪ { <i id="wx445">K</i> };
          <b id="wx446">fi</b>
        <b id="wx447">od</b>
      <b id="wx448">end</b>
</pre>

<dl id="wx449">
<dd id="wx450"><b id="wx451">Def.</b>
<p id="wx452">Given a header <i id="wx453">H</i> and a set of FDs <i id="wx454">S</i> that only contain subsets of <i id="wx455">H</i> an <i id="wx456">irreducible cover</i> of <i id="wx457">S</i> is a a set <i id="wx458">T</i> of FDs such that</p>

<ol id="wx459">
<li id="wx460"><i id="wx461">S</i><sup id="wx462">+</sup>
<p id="wx463">= <i id="wx464">T</i><sup id="wx465">+</sup></p>
</li>

<li id="wx466">
<p id="wx467">there is no proper subset <i id="wx468">U</i> of <i id="wx469">T</i> such that <i id="wx470">S</i><sup id="wx471">+</sup> = <i id="wx472">U</i><sup id="wx473">+</sup>,</p>
</li>

<li id="wx474">
<p id="wx475">if <i id="wx476">X</i>-&gt;<i id="wx477">Y</i> in <i id="wx478">T</i> then <i id="wx479">Y</i> is a singleton set and</p>
</li>

<li id="wx480">
<p id="wx481">if <i id="wx482">X</i>-&gt;<i id="wx483">Y</i> in <i id="wx484">T</i> and <i id="wx485">Z</i> a proper subset of <i id="wx486">X</i> then <i id="wx487">Z</i>-&gt;<i id="wx488">Y</i> is not in <i id="wx489">S</i><sup id="wx490">+</sup>.</p>
</li>
</ol>
</dd>
</dl>

<a id="Exemplos" name="Exemplos"/>
</wx:section><wx:section level="2" title="Exemplos" id="wxsec5"><h2 id="wx491">Exemplos</h2>

<a id="Tabela_normalizada" name="Tabela_normalizada"/>
<wx:section level="3" title="Tabela normalizada" id="wxsec6"><h3 id="wx492">Tabela normalizada</h3>

<p id="wx493">Atributos não atômicos ou contém tabelas aninhadas</p>

<p id="wx494">Exemplo: Tabela de alocação de funcionários a projetos</p>

<p id="wx495"><br id="wx496"/>
Código do Projeto: 1</p>

<p id="wx497">Tipo: Desenvolvimento</p>

<p id="wx498">Descrição: Vagas</p>

<table border="1" id="wx499">
<tr id="wx500">
<td id="wx501">
<p id="wx502">CodEmp</p>
</td>
<td id="wx503">
<p id="wx504">Nome</p>
</td>
<td id="wx505">
<p id="wx506">Categ</p>
</td>
<td id="wx507">
<p id="wx508">Salário</p>
</td>
<td id="wx509">
<p id="wx510">DataInício</p>
</td>
<td id="wx511">
<p id="wx512">TempoAloc</p>
</td>
</tr>

<tr id="wx513">
<td id="wx514">
<p id="wx515">1</p>
</td>
<td id="wx516">
<p id="wx517">João</p>
</td>
<td id="wx518">
<p id="wx519">1</p>
</td>
<td id="wx520">
<p id="wx521">700</p>
</td>
<td id="wx522">
<p id="wx523">01/11/95</p>
</td>
<td id="wx524">
<p id="wx525">6</p>
</td>
</tr>

<tr id="wx526">
<td id="wx527">
<p id="wx528">2</p>
</td>
<td id="wx529">
<p id="wx530">Carlos</p>
</td>
<td id="wx531">
<p id="wx532">2</p>
</td>
<td id="wx533">
<p id="wx534">1000</p>
</td>
<td id="wx535">
<p id="wx536">23/11/95</p>
</td>
<td id="wx537">
<p id="wx538">9</p>
</td>
</tr>
</table>

<p id="wx539"><br id="wx540"/>
Código do Projeto: 2</p>

<p id="wx541">Tipo: Administrativo</p>

<p id="wx542">Descrição: Marketing</p>

<table border="1" id="wx543">
<tr id="wx544">
<td id="wx545">
<p id="wx546">CodEmp</p>
</td>
<td id="wx547">
<p id="wx548">Nome</p>
</td>
<td id="wx549">
<p id="wx550">Categ</p>
</td>
<td id="wx551">
<p id="wx552">Salário</p>
</td>
<td id="wx553">
<p id="wx554">DataInício</p>
</td>
<td id="wx555">
<p id="wx556">TempoAloc</p>
</td>
</tr>

<tr id="wx557">
<td id="wx558">
<p id="wx559">2</p>
</td>
<td id="wx560">
<p id="wx561">Carlos</p>
</td>
<td id="wx562">
<p id="wx563">2</p>
</td>
<td id="wx564">
<p id="wx565">1000</p>
</td>
<td id="wx566">
<p id="wx567">23/11/95</p>
</td>
<td id="wx568">
<p id="wx569">9</p>
</td>
</tr>

<tr id="wx570">
<td id="wx571">
<p id="wx572">4</p>
</td>
<td id="wx573">
<p id="wx574">Maria</p>
</td>
<td id="wx575">
<p id="wx576">1</p>
</td>
<td id="wx577">
<p id="wx578">700</p>
</td>
<td id="wx579">
<p id="wx580">15/11/95</p>
</td>
<td id="wx581">
<p id="wx582">12</p>
</td>
</tr>
</table>

<p id="wx583"><br id="wx584"/>
A seguinte tabela descreveria os dados acima apresentados: Projetos(codp, tipo, descrição, empregados(code, nome, categ, salário,data_início, tempo_aloc)).</p>

<p id="wx585">Tabela não normalizada <b id="wx586">empregados</b> é um atributo não atômico.</p>

<a id="Primeira_Forma_Normal" name="Primeira_Forma_Normal"/>
</wx:section><wx:section level="3" title="Primeira Forma Normal" id="wxsec7"><h3 id="wx587">Primeira Forma Normal</h3>

<p id="wx588"><i id="wx589">Definição</i> (note que relacionamentos como são definidos acima são necessariamente na 1NF)</p>

<pre id="wx590">
  "Uma tabela está na 1FN, se e somente se, não possuir atributos multivalor."
</pre>

<p id="wx591"><i id="wx592">Definir relações NFNF</i></p>

<ul id="wx593">
<li id="wx594">
<p id="wx595">como transformar relações NFNF (também chamadas relações UNF) em relações 1NF</p>

<ul id="wx596">
<li id="wx597">
<p id="wx598">como transformar as restrições chave de relações aninhadas</p>
</li>

<li id="wx599">
<p id="wx600">como transformar as dependências funcionais de relações aninhadas</p>
</li>
</ul>
</li>
</ul>

<p id="wx601"><br id="wx602"/>
<i id="wx603">Passagem à 1FN:</i></p>

<ul id="wx604">
<li id="wx605">
<p id="wx606">Gerar uma única tabela com colunas simples</p>
</li>

<li id="wx607">
<p id="wx608">Chave primária : id de cada tabela aninhada</p>
</li>
</ul>

<p id="wx609"><br id="wx610"/>
<i id="wx611">Exemplo:</i> Projetos(codp, tipo, descrição, code, nome, categ, salário, data_início, tempo_aloc)</p>

<p id="wx612"><br id="wx613"/>
<i id="wx614">Problemas:</i></p>

<ul id="wx615">
<li id="wx616">
<p id="wx617">Redundância</p>
</li>

<li id="wx618">
<p id="wx619">Anomalias de Atualização</p>
</li>
</ul>

<a id="Segunda_Forma_Normal" name="Segunda_Forma_Normal"/>
</wx:section><wx:section level="3" title="Segunda Forma Normal" id="wxsec8"><h3 id="wx620">Segunda Forma Normal</h3>

<p id="wx621"><i id="wx622">Definição:</i></p>

<pre id="wx623">
   Uma relação está na 2FN se, e somente se, estiver na 1FN e cada atributo não-chave for dependente<br id="wx624"/>
 da chave primária inteira, isto é, cada atributo não-chave não poderá ser dependente de apenas<br id="wx625"/>
 parte da chave.
</pre>

<p id="wx626">No caso de tabelas com chave primária composta. Se um atributo depende apenas de uma parte da chave primária, então esse atributo deve ser colocado em outra tabela.</p>

<p id="wx627"><i id="wx628">Passagem à 2FN:</i></p>

<ul id="wx629">
<li id="wx630">
<p id="wx631">Geração de novas tabelas com DFs completas</p>
</li>

<li id="wx632">
<p id="wx633">Análise de DFs:</p>
</li>
</ul>

<pre id="wx634">
  * tipo e descrição - DF de codp
  * nome, categ e salário - DF de code
  * data_início e  tempo_aloc - DF de toda a chave
</pre>

<p id="wx635"><i id="wx636">Resultado:</i></p>

<ul id="wx637">
<li id="wx638">
<p id="wx639">Projetos(codp, tipo, descrição)</p>
</li>

<li id="wx640">
<p id="wx641">Empregados(code, nome, categ, salário)</p>
</li>

<li id="wx642">
<p id="wx643">ProjEmp(codp, code, data_início, tempo_aloc)</p>
</li>
</ul>

<p id="wx644"><br id="wx645"/>
<i id="wx646">Conclusões:</i></p>

<ul id="wx647">
<li id="wx648">
<p id="wx649">Maior independência de dados (não há mais repetição de empregados por projeto, por exemplo)</p>
</li>

<li id="wx650">
<p id="wx651">Redundâncias + Anomalias - DF indiretas</p>
</li>
</ul>

<a id="Terceira_Forma_Normal" name="Terceira_Forma_Normal"/>
</wx:section><wx:section level="3" title="Terceira Forma Normal" id="wxsec9"><h3 id="wx652">Terceira Forma Normal</h3>

<ul id="wx653">
<li id="wx654">
<p id="wx655">definição</p>
</li>
</ul>

<pre id="wx656">
“ Uma relação R está na 3NF, se ela estiver na 2NF e cada atributo não chave de R<br id="wx657"/>
 não possui dependência transitiva, para cada chave candidata de R.”
</pre>

<p id="wx658">Passagem à 3FN:</p>

<ul id="wx659">
<li id="wx660">
<p id="wx661">Geração de novas tabelas com DF diretas</p>
</li>
</ul>

<ul id="wx662">
<li id="wx663">
<p id="wx664">Análise de DFs entre atributos não chave:</p>
</li>
</ul>

<pre id="wx665">
  - salário - DF de categ
</pre>

<p id="wx666"><i id="wx667">Resultado:</i></p>

<ul id="wx668">
<li id="wx669">
<p id="wx670">Projetos(codp, tipo, descrição)</p>
</li>
</ul>

<ul id="wx671">
<li id="wx672">
<p id="wx673">Empregados(code, nome, categ)</p>
</li>
</ul>

<ul id="wx674">
<li id="wx675">
<p id="wx676">Categorias(categ, salário)</p>
</li>
</ul>

<ul id="wx677">
<li id="wx678">
<p id="wx679">ProjEmp(codp, code, data_início, tempo_aloc)</p>
</li>
</ul>

<p id="wx680"><br id="wx681"/>
<i id="wx682">Conclusões:</i></p>

<ul id="wx683">
<li id="wx684">
<p id="wx685">Maior independência de dados</p>
</li>
</ul>

<ul id="wx686">
<li id="wx687">
<p id="wx688">3FN gera representações lógicas finais na maioria das vezes</p>
</li>
</ul>

<ul id="wx689">
<li id="wx690">
<p id="wx691">Redundâncias + Anomalias - DF multivaloradas</p>
</li>
</ul>

<a id="Terceira_Forma_Normal_-_Boyce-Codde" name="Terceira_Forma_Normal_-_Boyce-Codde"/>
</wx:section><wx:section level="3" title="Terceira Forma Normal - Boyce-Codde" id="wxsec10"><h3 id="wx692">Terceira Forma Normal - Boyce-Codde</h3>

<ul id="wx693">
<li id="wx694">
<p id="wx695">definição</p>
</li>

<li id="wx696">
<p id="wx697">A forma normal Boyce Codd é a única das formas normais que não requer que sua situação atual esteja na forma normal anterior para ser implementada.</p>
</li>
</ul>

<pre id="wx698">
“Uma tabela está na 3FN, se e somente se, estiver na 2FN e todo atributo não chave depende<br id="wx699"/>
 funcionalmente diretamente da  chave primária, ou seja, não há dependências entre atributos<br id="wx700"/>
 não chave”
</pre>

<p id="wx701"><br id="wx702"/>
</p>

<ul id="wx703">
<li id="wx704">
<p id="wx705">exemplo</p>
</li>

<li id="wx706">
<p id="wx707">Como transformar da 3NF para BCNF</p>
</li>

<li id="wx708">
<p id="wx709">Nem sempre pode ser alcançada preservando a dependência.</p>
</li>
</ul>

<a id="Multi-valued_and_Join_Dependencies" name="Multi-valued_and_Join_Dependencies"/>
</wx:section><wx:section level="3" title="Multi-valued and Join Dependencies" id="wxsec11"><h3 id="wx710">Multi-valued and Join Dependencies</h3>

<ul id="wx711">
<li id="wx712">
<p id="wx713">def multi-value dependencies</p>
</li>

<li id="wx714">
<p id="wx715">exemplo</p>

<ul id="wx716">
<li id="wx717">
<p id="wx718">trivial multi-value dependency (X-&gt;&gt;Y is trivial if X+Y contains all attributes or Y is a subset of X)</p>
</li>
</ul>
</li>

<li id="wx719">
<p id="wx720">reasoning rules for MVDs</p>
</li>
</ul>

<ul id="wx721">
<li id="wx722">
<p id="wx723">def join dependency</p>
</li>

<li id="wx724">
<p id="wx725">example</p>
</li>

<li id="wx726">
<p id="wx727">reasoning rules for JDs</p>
</li>

<li id="wx728">
<p id="wx729">when is join dependency implied by key constraints?</p>
</li>

<li id="wx730">
<p id="wx731">relacionamento entre JDs e MVDs</p>
</li>
</ul>

<a id="Quarta_Forma_Normal" name="Quarta_Forma_Normal"/>
</wx:section><wx:section level="3" title="Quarta Forma Normal" id="wxsec12"><h3 id="wx732">Quarta Forma Normal</h3>

<p id="wx733"><i id="wx734">Definição</i></p>

<pre id="wx735">
   “Uma tabela está na 4FN, se e somente se, estiver na 3FN e não existirem dependências multivaloradas”.
</pre>

<p id="wx736">Exemplo: Dados sobre livros</p>

<p id="wx737">Relação não normalizada: Livros(nrol, (autor), título, (assunto), editora, cid_edit, ano_public)</p>

<pre id="wx738">
1FN:    Livros(nrol, autor, assunto, título, editora, cid_edit, ano_public)
2FN:     Livros(nrol,título, editora, cid-edit, ano_public)
        AutAssLiv(nrol, autor, assunto)
3FN:     Livros(nrol, título, editora, ano_public)
        Editoras(editora, cid-edit)
        AutAssLiv(nrol, autor, assunto)
</pre>

<ul id="wx739">
<li id="wx740">
<p id="wx741">Redundância para representar todas as informações</p>
</li>

<li id="wx742">
<p id="wx743">Evitar todas as combinações: representação não-uniforme (repete alguns elementos ou posições nulas)</p>
</li>
</ul>

<p id="wx744"><br id="wx745"/>
<i id="wx746">Passagem à 4FN:</i></p>

<ul id="wx747">
<li id="wx748">
<p id="wx749">Geração de novas tabelas, eliminando Dependências Multivaloradas</p>
</li>

<li id="wx750">
<p id="wx751">Análise de Dependências Multivaloradas entre atributos:</p>
</li>

<li id="wx752">
<p id="wx753">autor, assunto  Dependência multivalorada de nrol</p>
</li>
</ul>

<p id="wx754"><br id="wx755"/>
<i id="wx756">Resultado:</i></p>

<p id="wx757">4FN: Livros(nrol, título, editora, ano_public)</p>

<pre id="wx758">
       Editoras(editora, cid-edit)
       AutLiv(nrol, autor)
       AssLiv(nrol, assunto)
</pre>

<a id="Quinta_Forma_Normal" name="Quinta_Forma_Normal"/>
</wx:section><wx:section level="3" title="Quinta Forma Normal" id="wxsec13"><h3 id="wx759">Quinta Forma Normal</h3>

<ul id="wx760">
<li id="wx761">
<p id="wx762">definição da 5NF</p>
</li>
</ul>

<p id="wx763">Está ligada a noção de dependência de junção. • Se uma relação é decomposta em várias relações e a reconstrução não é possível pela junção das outras relações, dizemos que existe uma dependência de junção. • Existem tabelas na 4FN que não podem ser divididas em duas relações sem que se altere os dados originais. • Exemplo: Seja as relações R1(CodEmp, CodPrj) e R2(CodEmp, Papel) a decomposição da relação ProjetoRecuro(CodEmp, CodPrj, Papel).</p>

<p id="wx764"><br id="wx765"/>
</p>

<ul id="wx766">
<li id="wx767">
<p id="wx768">exemplo</p>
</li>

<li id="wx769">
<p id="wx770">Da 4FN para a 5NF</p>
</li>

<li id="wx771">
<p id="wx772">Explanação de que a última forma norma pode ser alcançada com projeções</p>
</li>
</ul>

<a id="Forma_Normal_Chave-Dom.C3.ADnio" name="Forma_Normal_Chave-Dom.C3.ADnio"/>
</wx:section><wx:section level="3" title="Forma Normal Chave-Domínio" id="wxsec14"><h3 id="wx773">Forma Normal Chave-Domínio</h3>

<ul id="wx774">
<li id="wx775">
<p id="wx776">def de FNCD</p>
</li>

<li id="wx777">
<p id="wx778">ultimate normal form</p>
</li>

<li id="wx779">
<p id="wx780">degride normal form</p>
</li>
</ul>

<a id="Outras_dependencias" name="Outras_dependencias"/>
</wx:section><wx:section level="3" title="Outras dependencias" id="wxsec15"><h3 id="wx781">Outras dependencias</h3>

<ul id="wx782">
<li id="wx783">
<p id="wx784">dependências encapsuladas</p>
</li>

<li id="wx785">
<p id="wx786">dependencias como blocos em lógica de primeira ordem</p>
</li>
</ul>

<hr id="wx787"/>
<p id="wx788"><i id="wx789">This article was originally based on material from the <a href="/wpt/Free_On-line_Dictionary_of_Computing" title="Free On-line Dictionary of Computing" wx:linktype="known" wx:pagename="Free_On-line_Dictionary_of_Computing" wx:page_id="190959" id="wx790">Free On-line Dictionary of Computing</a>, used with <a href="/wpt/Wikipedia:Foldoc_license" class="new" title="Wikipedia:Foldoc license" wx:linktype="unknown" wx:pagename="Wikipedia:Foldoc_license" id="wx791">permission</a>. Update as needed.</i></p>
</wx:section></wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=Normaliza%C3%A7%C3%A3o_de_dados" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx792">Categorias de páginas</a>: <span dir="ltr" id="wx793"><a href="/wpt/Categoria:%21Artigos_em_tradu%C3%A7%C3%A3o" title="Categoria:!Artigos em tradução" wx:linktype="known" wx:pagename="Categoria:!Artigos_em_tradução" wx:page_id="54457" id="wx794">!Artigos em tradução</a></span> | <span dir="ltr" id="wx795"><a href="/wpt/Categoria:Bancos_de_dados" title="Categoria:Bancos de dados" wx:linktype="known" wx:pagename="Categoria:Bancos_de_dados" wx:page_id="48840" id="wx796">Bancos de dados</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://cs.wikipedia.org/wiki/Normalizace_datab%C3%A1ze" class="external" wx:linktype="interwiki" wx:pagename="cs:Normalizace_databáze" id="wx797">Česky</a> | <a href="http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29" class="external" wx:linktype="interwiki" wx:pagename="de:Normalisierung_(Datenbank)" id="wx798">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Database_normalization" class="external" wx:linktype="interwiki" wx:pagename="en:Database_normalization" id="wx799">English</a> | <a href="http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos" class="external" wx:linktype="interwiki" wx:pagename="es:Normalización_de_bases_de_datos" id="wx800">Español</a> | <a href="http://fi.wikipedia.org/wiki/Tietokannan_normalisointi" class="external" wx:linktype="interwiki" wx:pagename="fi:Tietokannan_normalisointi" id="wx801">Suomi</a> | <a href="http://fr.wikipedia.org/wiki/Forme_normale_%28bases_de_donn%C3%A9es_relationnelles%29" class="external" wx:linktype="interwiki" wx:pagename="fr:Forme_normale_(bases_de_données_relationnelles)" id="wx802">Français</a> | <a href="http://he.wikipedia.org/wiki/%D7%A0%D7%99%D7%A8%D7%9E%D7%95%D7%9C_%D7%91%D7%A1%D7%99%D7%A1_%D7%A0%D7%AA%D7%95%D7%A0%D7%99%D7%9D" class="external" wx:linktype="interwiki" wx:pagename="he:נירמול_בסיס_נתונים" id="wx803">עברית</a> | <a href="http://it.wikipedia.org/wiki/Normalizzazione_del_database" class="external" wx:linktype="interwiki" wx:pagename="it:Normalizzazione_del_database" id="wx804">Italiano</a> | <a href="http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AD%A3%E8%A6%8F%E5%8C%96" class="external" wx:linktype="interwiki" wx:pagename="ja:リレーションの正規化" id="wx805">日本語</a> | <a href="http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94" class="external" wx:linktype="interwiki" wx:pagename="ko:데이터베이스_정규화" id="wx806">한국어</a> | <a href="http://nl.wikipedia.org/wiki/Databasenormalisatie" class="external" wx:linktype="interwiki" wx:pagename="nl:Databasenormalisatie" id="wx807">Nederlands</a> | <a href="http://no.wikipedia.org/wiki/Normalisering" class="external" wx:linktype="interwiki" wx:pagename="no:Normalisering" id="wx808">Norsk (bokmål)</a> | <a href="http://pl.wikipedia.org/wiki/Normalizacja_bazy_danych" class="external" wx:linktype="interwiki" wx:pagename="pl:Normalizacja_bazy_danych" id="wx809">Polski</a> | <a href="http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0" class="external" wx:linktype="interwiki" wx:pagename="ru:Нормальная_форма" id="wx810">Русский</a> | <a href="http://simple.wikipedia.org/wiki/Database_normalisation" class="external" wx:linktype="interwiki" wx:pagename="simple:Database_normalisation" id="wx811">Simple English</a> | <a href="http://sk.wikipedia.org/wiki/Normaliz%C3%A1cia_%28datab%C3%A1zy%29" class="external" wx:linktype="interwiki" wx:pagename="sk:Normalizácia_(databázy)" id="wx812">Slovenčina</a> | <a href="http://sv.wikipedia.org/wiki/Normalform_%28databaser%29" class="external" wx:linktype="interwiki" wx:pagename="sv:Normalform_(databaser)" id="wx813">Svenska</a> | <a href="http://uk.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%B8%D1%85" class="external" wx:linktype="interwiki" wx:pagename="uk:Нормалізація_баз_даних" id="wx814">Українська</a> | <a href="http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%AD%A3%E8%A7%84%E5%8C%96" class="external" wx:linktype="interwiki" wx:pagename="zh:数据库正规化" id="wx815">中文</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name=""/></wx:templatearguments>
<wx:templatearguments for="wx_t2"><wx:argument name=""/></wx:templatearguments>
</html>
