<?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>IT sviestapika &#187; normālforma</title>
	<atom:link href="http://dll.lv/tag/normalforma/feed" rel="self" type="application/rss+xml" />
	<link>http://dll.lv</link>
	<description>Par IT un ne tikai</description>
	<lastBuildDate>Sat, 28 Apr 2012 07:53:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Datubāzes normālformas vai kā projektēt pareizi(papildināts)</title>
		<link>http://dll.lv/datubazes-normalformas-vai-ka-projektet-pareizi?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=datubazes-normalformas-vai-ka-projektet-pareizi</link>
		<comments>http://dll.lv/datubazes-normalformas-vai-ka-projektet-pareizi#comments</comments>
		<pubDate>Sat, 18 Oct 2008 10:10:34 +0000</pubDate>
		<dc:creator>Kaspars</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Interesanti]]></category>
		<category><![CDATA[Kopums]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[datubāzes]]></category>
		<category><![CDATA[normālforma]]></category>

		<guid isPermaLink="false">http://dll.lv/?p=125</guid>
		<description><![CDATA[Kam tas vispar ir vajadzīgs? Izveidojot datubāzi, kura atbilstu vismaz pirmajām trijām normālformā, mēs atrisinām problēmas, kuras ir saistītas ar informācijas dublēšanos, kā arī ar iespējamām loģiskām un strukturālām uzbūves problēmām, kuras mēdz dēvēt arī par datubāžu anomālijām. Mīnus normalizācijai &#8230; <a href="http://dll.lv/datubazes-normalformas-vai-ka-projektet-pareizi">Continue reading <span class="meta-nav">&#8594;</span></a>
Related posts:<ol>
<li><a href='http://dll.lv/ka-darbinat-linux-aplikacijas-windows-vide-andlinux' rel='bookmark' title='Kā darbināt linux aplikācijas Windows vidē-andLinux'>Kā darbināt linux aplikācijas Windows vidē-andLinux</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Kam tas vispar ir vajadzīgs?</p>
<p>Izveidojot datubāzi, kura atbilstu vismaz pirmajām trijām normālformā, mēs atrisinām problēmas, kuras ir saistītas ar informācijas dublēšanos, kā arī ar iespējamām loģiskām un strukturālām uzbūves problēmām, kuras mēdz dēvēt arī par datubāžu anomālijām.<span id="more-125"></span></p>
<p>Mīnus normalizācijai ir tāds, ka, tas prasa tabulu sadalīšanu vairākās citās tabulās. Tādēļ, lai pēc tam izgūtu datus no tās ir vajadzīgi vairāku tabulu apvienojumi ar vaicājumiem, kas var samazināt jautājumu izpildes ātrumu. </p>
<p> </p>
<p><strong>Anomālijas( problēmas) datubāzēs var būt šādas:</strong></p>
<ul>
<li>atjauninājuma anomālija</li>
<li>ievietošanas anomālija</li>
<li>dzēšanas anomālija</li>
</ul>
<div><strong>Atjauninājuma anomālijas piemērs:</strong></div>
<div>Piemēram ir tabula, ar Lietotaja ID, Adresi un Auto. Gadījumā ja lietotājam ir divas vai vairāk automašīnas rodas problēmas:</div>
<table border="0">
<tbody>
<tr>
<td style="text-align: right;">Lietotaja ID</td>
<td style="text-align: right;">Adrese</td>
<td style="text-align: right;">Auto</td>
</tr>
<tr>
<td>1</td>
<td>Rīga, Brīvības 5</td>
<td>Audi</td>
</tr>
<tr>
<td>2</td>
<td>Rīga, Brīvības 55</td>
<td>BMW</td>
</tr>
<tr>
<td>2</td>
<td>Rīga, Brīvības 55</td>
<td>Audi</td>
</tr>
<tr>
<td>3</td>
<td>Dobele, kautkas</td>
<td>VW</td>
</tr>
</tbody>
</table>
<div>
<ul>
<li>veicot labošanu lietotāja adresē ir jāatjauno uzreiz divi ieraksti</li>
<li>ja labošanas rezultātā notiek kļūme un nomainās adrese tikai vienā ierakstā un otrā paliks vecā informācija, nebūs iespējams patteikt, kura adrese īsti ir: pirmajā vai otrajā rindiņā</li>
</ul>
</div>
<div style="text-align: left;">Iespējamais kļūdainās tabulas izskats:</div>
<div style="text-align: left;">
<table border="0">
<tbody>
<tr>
<td style="text-align: right;">Lietotaja ID</td>
<td style="text-align: right;">Adrese</td>
<td style="text-align: right;">Auto</td>
</tr>
<tr>
<td>1</td>
<td>Rīga, Brīvības 5</td>
<td>Audi</td>
</tr>
<tr>
<td>2</td>
<td>Rīga, Brīvības 55</td>
<td>BMW</td>
</tr>
<tr>
<td>2</td>
<td>Rīga, Brīvības 40</td>
<td>Audi</td>
</tr>
<tr>
<td>3</td>
<td>Dobele, kautkas</td>
<td>VW</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;"><strong>Ievietošanas anomālija:</strong></div>
<div style="text-align: left;">Tā rodas gadījumos, kad kādu informāciju nevar vispār ievietot,</div>
<div style="text-align: left;">piemēram, tabula, kura satur datus par reģistrētiem auto(pieņemot, ka katram auto ir jābūt valsts nr. &#8211; visi lauki ir obligāti):</div>
<div style="text-align: left;">
<table border="0">
<tbody>
<tr>
<td>ID</td>
<td>Marka</td>
<td>Sasijas num</td>
<td>Valsts nummurzīme</td>
</tr>
<tr>
<td>1</td>
<td>Audi</td>
<td>12345</td>
<td>LV-1111</td>
</tr>
<tr>
<td>2</td>
<td>BMW</td>
<td>23456</td>
<td>LV-1112</td>
</tr>
<tr>
<td>3</td>
<td>VW</td>
<td>34567</td>
<td>LV-1113</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;">Ievietošanas anomālija rodas, tad, kad ir jāievieto dati par vēl neriģestrētu auto, jo tam vēl nav piešķirts valsts nummurs, piemēram, pievienot:</div>
<div style="text-align: left;">
<table border="0">
<tbody>
<tr>
<td>ID</td>
<td>Marka</td>
<td>Sasijas num</td>
</tr>
<tr>
<td>4</td>
<td>VW</td>
<td>45678</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;">Tādēļ šādā struktūrā, šādu irakstu ievietot nevar.</div>
<div style="text-align: left;"><strong>Dzēšanas anomālija:</strong></div>
<div style="text-align: left;">Šāda veida nomālija rodas gadījumā, kad viena fakta dzēšanas rezultātā tiek pazaudēta informācija pa visma par citu faktu, piemēram, ja tiek dzēsta valsts numurzīme LV-1111no datubāzes(iepriekšējais piemērs)(delete from table where vn=lv-1111), tad automātiskie tik dzēsta informācija arī par reģistrēto pašu auto, kas nedrīkstētu notikt.</div>
<div style="text-align: left;"><strong>Normālformas :</strong></div>
<div style="text-align: left;"><strong>1 NF</strong></div>
<div style="text-align: left;">Tabula atbilst pirmajai normālformai tad un tikai tad, kad visi tās kolonas(domēni) satur atomāras(nedalāmas vērtības)</div>
<div style="text-align: left;">Ja vērtību var sadalī vairākās daļās un tai nezūd jēga tad vērtība ir neatomāra.</div>
<div style="text-align: left;">Bieži jebkura vērtība var būt gan atomāra, gan neatomāra, pimēram skaitlis: 1234 ir:</div>
<div style="text-align: left;">
<ul>
<li>atomāra vērtība, ja ar to sparot pin kodu</li>
<li>neatomāra vērtība, ja ar to saprot atsevišķu skaitļu rindu no 1 līdz 4</li>
</ul>
</div>
<div style="text-align: left;">Skaitļu rinda var būt gan 12 un 34, kā arī samainīta vietām 43 un 21, un skaitļu jēga no tā nemainīsies. Tur pretīm jā samainīs pinkoda skaitļus vietām jēga skaitļiem vairs nav.</div>
<div style="text-align: left;">Neatomāras bieži pielietojamas vērtības piemērs ir adrese, kuru glabā vienā laukā, piem,</div>
<div style="text-align: left;">Pilsēta, Iela, Māja</div>
<div style="text-align: left;"><strong>2NF:</strong></div>
<div style="text-align: left;">tabulai jāatbilst 1 NF</div>
<p>Tabula atbilst otrajai normālformai, ja katrs neprimārais atslēgas lauks ir atkarīgs no visas primārās atslēgas. (Nevis no primārās atslēgas kādas daļās).</p>
<p>Otrajai normālformai nozīme ir tikai realitātēs, kurās ir sarežģīta primārā atslēga(piem, sastāv no diviem laukiem), ja tabulai ir viena konkrēta primārā atslēga, tad tāda tabula jau autmātiski atbilst 2. normālformai, vai vienkāršiem vārdiem- tabulā nedrīkstētu būt divi atribūti, kas varētu būt kā primārie lauki.</p>
<p> </p>
<table border="0">
<tbody>
<tr>
<th>*EmployeeID</th>
<th>LastName</th>
<th>FirstName</th>
<th>*ProjectNumber</th>
<th>ProjectTitle</th>
</tr>
<tr>
<td>EN1-26</td>
<td>O&#8217;Brien</td>
<td>Sean</td>
<td>30-452-T3</td>
<td>STAR manual</td>
</tr>
<tr>
<td>EN1-26</td>
<td>O&#8217;Brien</td>
<td>Sean</td>
<td>30-457-T3</td>
<td>ISO procedures</td>
</tr>
<tr>
<td>EN1-26</td>
<td>O&#8217;Brien</td>
<td>Sean</td>
<td>31-124-T3</td>
<td>Employee handbook</td>
</tr>
<tr>
<td>EN1-33</td>
<td>Guya</td>
<td>Amy</td>
<td>30-452-T3</td>
<td>STAR manual</td>
</tr>
<tr>
<td>EN1-33</td>
<td>Guya</td>
<td>Amy</td>
<td>30-482-TC</td>
<td>Web Site</td>
</tr>
<tr>
<td>EN1-33</td>
<td>Guya</td>
<td>Amy</td>
<td>31-241-TC</td>
<td>New catalog</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Lai atrisinātu šo problēmu ir jārīkojas sekojoši:</p>
<p> </p>
<ul>
<li>Identificēt atribūtus, kuri ir atkarīgi tikai no primārās atslēgas daļas </li>
<li>Izveidot jaunu realitāti</li>
<li>Ievietot identificētos atribūtus jaunajā realitātē</li>
<li>Izveidot sasaisti starp veco un jauno realitāti</li>
</ul>
<p> </p>
<p>Šinī gadījumā, pirmārā atslēga varētu būt EmployeelID un ProjectNumber, tādēļ tie ir jāsadala:</p>
<p> </p>
<p>EMPLOYEES</p>
<table border="0">
<tbody>
<tr>
<th>*EmployeeID</th>
<th>Last Name</th>
<th>First Name</th>
</tr>
<tr>
<td>EN1-26</td>
<td>O&#8217;Brien</td>
<td>Sean</td>
</tr>
<tr>
<td>EN1-33</td>
<td>Guya</td>
<td>Amy</td>
</tr>
<tr>
<td>EN1-35</td>
<td>Baranco</td>
<td>Steven</td>
</tr>
<tr>
<td>EN1-36</td>
<td>Roslyn</td>
<td>Elizabeth</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Un</p>
<p> </p>
<p>EMPLOYEES_PROJECTS</p>
<table border="0">
<tbody>
<tr>
<th>*EmployeeID</th>
<th>*ProjectNum</th>
</tr>
<tr>
<td>EN1-26</td>
<td>30-452-T3</td>
</tr>
<tr>
<td>EN1-26</td>
<td>30-457-T3</td>
</tr>
<tr>
<td>EN1-26</td>
<td>31-124-T3</td>
</tr>
<tr>
<td>EN1-33</td>
<td>30-328-TC</td>
</tr>
<tr>
<td>EN1-33</td>
<td>30-452-T3</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Un</p>
<p> </p>
<p>PROJECTS</p>
<table border="0">
<tbody>
<tr>
<th>*ProjectNum</th>
<th>ProjectTitle</th>
</tr>
<tr>
<td>30-452-T3</td>
<td>STAR manual</td>
</tr>
<tr>
<td>30-457-T3</td>
<td>ISO procedures</td>
</tr>
<tr>
<td>30-482-TC</td>
<td>Web site</td>
</tr>
<tr>
<td>31-124-T3</td>
<td>Employee handbook</td>
</tr>
<tr>
<td>31-238-TC</td>
<td>STAR prototype</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p><strong>3NF</strong></p>
<p>Tabula apmierina trešo normālformu, ja tā apmierina otro NF un katrs ne primārais atslēgas lauks ir ne tranzistīvi atkarīgs no primārās atslēgas.</p>
<p>No matemātikas viedokļa nedrīkstētu sanākt, ka  x-&gt;x un z-&gt;x, jo sanāk ka z-&gt;y, jo z-&gt;x-&gt;y.</p>
<p>(Nedrīkst būt situācija, kad ir saikne(attiecības) starp diviem vai vairākiem neprimāriem laukiem)</p>
<p>Piemēram:</p>
<table border="0">
<tbody>
<tr>
<td>id</td>
<td>Vārds</td>
<td>Kabinets</td>
<td>Telefons</td>
</tr>
<tr>
<td>1</td>
<td>Kaspars</td>
<td>101</td>
<td>02</td>
</tr>
<tr>
<td>2</td>
<td>Jānis</td>
<td>102</td>
<td>03</td>
</tr>
<tr>
<td>3</td>
<td>Kaspars</td>
<td>102</td>
<td>03</td>
</tr>
</tbody>
</table>
<p>Šinī situācijā, pieņem, ka:</p>
<ul>
<li>viens telefona nummurs(nav primārā atslēga) var būt pieslēgts vienā kabinetā(nav primārā atslēga)</li>
<li>un viens cilvēks var atrasties vairākos kabinetos</li>
</ul>
<p>Rezultātā sanāk, ka telefons ir atkarīgs ne tikai no primārās atslēgas, bet arī no kabineta, kas nav primārā atslēga</p>
<p>Lai atrisinātu šādas problēmas ir jārīkojas šādi:</p>
<p> </p>
<ol>
<li>Jāpārnes savā starpā saistītos noprimāros atribūtus uz jaunu realitāti(tabulu) saglabājot saikni viņu starpā</li>
<li>Izmantot lauku, kurš noteica atkarību kā primāro lauku</li>
<li>Izveidot sasaisti starp veco un jauno realitāti</li>
</ol>
<p> </p>
<p>Tādēļ, lai apmierinātu 3 NF vajadzētu sadaīt šādi</p>
<table border="0">
<tbody>
<tr>
<td>Vārds</td>
<td>Kabinets</td>
</tr>
<tr>
<td>Kaspars</td>
<td>101</td>
</tr>
<tr>
<td>Jānis</td>
<td>102</td>
</tr>
<tr>
<td>Kaspars</td>
<td>102</td>
</tr>
</tbody>
</table>
<p>un</p>
<table border="0">
<tbody>
<tr>
<td>Kabinets</td>
<td>Telefons</td>
</tr>
<tr>
<td>101</td>
<td>02</td>
</tr>
<tr>
<td>102</td>
<td>03</td>
</tr>
</tbody>
</table>
<p>Šinī tabulā kabineta nummurs, jau var būt par primāro atslēgu</p>
<p>Related posts:<ol>
<li><a href='http://dll.lv/ka-darbinat-linux-aplikacijas-windows-vide-andlinux' rel='bookmark' title='Kā darbināt linux aplikācijas Windows vidē-andLinux'>Kā darbināt linux aplikācijas Windows vidē-andLinux</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://dll.lv/datubazes-normalformas-vai-ka-projektet-pareizi/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

