<?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>DaLeeMan &#187; Daleeman</title>
	<atom:link href="http://www.daleeman.com/author/daleeman/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.daleeman.com</link>
	<description>Not just another techblog…well, yeah it is</description>
	<lastBuildDate>Wed, 24 Feb 2010 04:18:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>I&#039;m Back!</title>
		<link>http://www.daleeman.com/103/</link>
		<comments>http://www.daleeman.com/103/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 00:25:42 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=103</guid>
		<description><![CDATA[After a long technical hiatus, Daleeman.com is back! Where&#8217;d I go, well, I&#8217;d rather not say. But&#8230;I will. See if you can follow this: A couple months ago, I decided to upgrade my desktop machine (quad-core Intel, 8GB ram, blah blah). That left my old AMD 5000 black-edition and motherboard free&#8230;so, I decided to upgrade [...]]]></description>
			<content:encoded><![CDATA[<p>After a long technical hiatus, Daleeman.com is back! Where&#8217;d I go, well, I&#8217;d rather not say. But&#8230;I will.</p>
<p>See if you can follow this: A couple months ago, I decided to upgrade my desktop machine (quad-core Intel, 8GB ram, blah blah). That left my old AMD 5000 black-edition and motherboard free&#8230;so, I decided to upgrade my server to the AMD 5000 64-bit Dual core (4GB RAM). Well, since I was doing that, I thought I would go ahead a upgrade my OS from Debian to CentOS a couple months ago (it&#8217;s an upgrade&#8230;cause I don&#8217;t have SSL holes anymore).<span id="more-103"></span></p>
<p>First thing you do &#8211; obvously &#8211; is your backups. So, I backed up all my VHosts, files, configs, etc and replaced all the hardware&#8230; What did forget? To dump my databases! A rookie mistake, to be sure. Long story short, I finally found my external USB HDD case and restored what I needed to.</p>
<p>So here&#8217;s the fun part&#8230; The new specs. Keep in mind this is a server run out of my home closet and only hosting small sites:</p>
<p>- AMD Athlon 64 X2 5000 @ 3.1GHz<br />
- 4GB RAM<br />
- 1.8TB Raid5 Storage<br />
- 1TB Raid1 Storage (System Drives)<br />
- 1TB Backup (for that irreplaceable stuff)</p>
<p>I&#8217;ve noticed a huge increase in speed in all my LAMP apps, which makes sense, but it&#8217;s still quite amazing to me. I also upgraded the Mobo (because I fried the old one&#8230;hush&#8230;) to an AM2+. The next step is an AMD Quad-core when they come down in price (and up in value).</p>
<p>So that&#8217;s my story. A rookie mistake combined with laziness took this site down for just over 2 months.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/103/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wicker Computer</title>
		<link>http://www.daleeman.com/wicker-computer/</link>
		<comments>http://www.daleeman.com/wicker-computer/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 02:37:15 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=61</guid>
		<description><![CDATA[A few years ago I had the opportunity to work with one of the first mini-ITX boards around: a VIA EPIA 800MHz. I was really struck by the size of this thing and it&#8217;s capabilities (yes, I know about nano-ITX). I thought they were SO cool, we bought 9 of them at work and made a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://www.daleeman.com/wp-content/uploads/2008/10/img_0782-150x150.jpg"><img class="alignleft size-full wp-image-120" title="img_0782-150x150" src="http://www.daleeman.com/wp-content/uploads/2008/10/img_0782-150x150.jpg" alt="" width="150" height="150" /></a>A few years ago I had the opportunity to work with one of the first mini-ITX boards around: a VIA EPIA 800MHz. I was really struck by the size of this thing and it&#8217;s capabilities (yes, I know about nano-ITX). I thought they were SO cool, we bought 9 of them at work and made a BEOWULF Cluster&#8230;which performed so terrible&#8230;.but it looked pretty awesome.</p>
<p>Anyways, I ended up buying one for home to play around with and &#8211; sadly &#8211; never really did anything with it. Because, what would I do with it?! I could make a media center PC, but it wouldn&#8217;t handle 1080p&#8230; I could make a desktop PC, but I have one thats much faster&#8230;I could build one for someone else, but the ITX cases were expensive and I don&#8217;t like working on friend&#8217;s computers. Thats when I found <a href="http://mini-itx.com/">http://mini-itx.com/</a>. The idea was: put a computer in something that doesn&#8217;t look like a computer! So, I did!<span id="more-61"></span></p>
<p>I had a wicker basked from&#8230;who knows what&#8230;that ended up working perfectly! I cut the back out, stuffed in the VIA, ram, a hard drive, and viola!</p>
<p style="text-align: center;"><img class="size-medium wp-image-74 aligncenter" title="img_0779" src="http://www.daleeman.com/wp-content/uploads/2008/10/img_0779-300x225.jpg" alt="" width="300" height="225" /><a href="http://www.daleeman.com/wp-content/uploads/2008/10/img_0779-300x225.jpg"><br />
</a></p>
<p style="text-align: left;">Beauty shot with all the crap around it. Without the camera Flash, you really can&#8217;t tell there is anything in there. It looks noce on a bookshelf, and that was sort of the point: Make a computer that looks like furniture.</p>
<p style="text-align: center;"><a href="http://www.daleeman.com/wp-content/uploads/2008/10/img_07801.jpg"><img class="size-medium wp-image-122" title="img_07801" src="http://www.daleeman.com/wp-content/uploads/2008/10/img_07801-225x300.jpg" alt="" width="225" height="300" /></a><a href="http://www.daleeman.com/wp-content/uploads/2008/10/img_0782.jpg"><img class="size-medium wp-image-123" title="img_0782" src="http://www.daleeman.com/wp-content/uploads/2008/10/img_0782-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: left;">The inside got kind of crowded (duh) but everything fit pretty well. I still need to secure the hard drive better and maybe tie-wrap the wires to clean it up. But&#8230;I still dont know what I&#8217;m doing with this thing! I thought about adding a wireless USB adapter, a bluetooth adapter (for keyboard and mouse..and whatever else) and possibly a solid state hard drive, but for a computer that I dont know what to do with, thats pretty pricey!</p>
<p style="text-align: left;">I installed Debian Linux and I plan to try to use this as an Standard Definition media center (With XBox Media Center) for my room or the kids room. Otherwise&#8230;I invested a lot of effort in this thing for a few pictures, a little bit o&#8217; bragging rights, and a blog post&#8230;which makes it ALL worth it!</p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/wicker-computer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux STIG SRR Viewer</title>
		<link>http://www.daleeman.com/linux-stig-srr-viewer/</link>
		<comments>http://www.daleeman.com/linux-stig-srr-viewer/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 23:41:26 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=63</guid>
		<description><![CDATA[A while back I wrote a quick windows app to parse out the results of the DISA Linux STIG Security Readiness Review (SRR). In case you&#8217;re unfamiliar, the Linux STIG (or Security Technical Implementation Guide) is a set of computer security guidelines put out by DISA. These documents are fairly lengthy, so they (or someone) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.daleeman.com/wp-content/uploads/2008/10/srrviewer-150x150.jpg" width=70 height=70 style="float:left; margin:5px"> A while back I wrote a quick windows app to parse out the results of the DISA Linux STIG Security Readiness Review (SRR). In case you&#8217;re unfamiliar, the Linux STIG (or Security Technical Implementation Guide) is a set of computer security guidelines put out by DISA. These documents are fairly lengthy, so they (or someone) created the SRR. So I&#8230;&#8221;fixed the glitch&#8221;<span id="more-63"></span></p>
<p>The SRR scans your computer for STIG compliance. When it finds an area of non-compliance, it gives you an option to comment on it, or mark it as a false hit. When completed, it generates a huge XML file that is even less readable than the STIGS!</p>
<p>So, I created a windows app (yes, a windows app to read Linux logs) which parses the PDI-DB file (Included in the STIG download) as well as your results file and displays everything in a nice readable format including the finding and the regulation details.</p>
<p><a href="http://www.daleeman.com/wp-content/uploads/2008/10/srrviewer.jpg"><img class="size-medium wp-image-64 alignnone" title="SRRViewer Main Screen" src="http://www.daleeman.com/wp-content/uploads/2008/10/srrviewer-300x157.jpg" alt="" width="300" height="157" /></a></p>
<p>Very briefly, when you launch the application you will be prompted to select the PDI-DB file. You can get that file from the SRR script package (it gets updated by DISA). After that, you simply select your server&#8217;s XML results file, and you get something like the above.</p>
<p>Im sure this is not bug-proof, so don&#8217;t come crying to me when it doesn&#8217;t work. Actually, do&#8230;so I can put the fix on my to-do-list. I&#8217;ve tested this under XP and Vista&#8230;both seem to work!</p>
<p><a href="http://consulting.themangolds.com/SRRView/SRRViewer.exe">Download SRRViewer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/linux-stig-srr-viewer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Practical Application of Database Normalization</title>
		<link>http://www.daleeman.com/practical-application-of-database-normalization/</link>
		<comments>http://www.daleeman.com/practical-application-of-database-normalization/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 02:25:08 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=53</guid>
		<description><![CDATA[Database Normalization is the process of reducing or eliminating data redundancy in a database table as well as reducing the likelihood of data insertion anomalies. There are many articles online that talk about, in theory, how to normalize database tables&#8230;This post is intended to serve as a practical application demonstration.   First Thing’s First… Before [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.daleeman.com/wp-content/uploads/2009/05/database_icon.jpg" width=70 height=70 style="float:left; margin:5px">
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Database Normalization is the process of reducing or eliminating data redundancy in a database table as well as reducing the likelihood of data insertion anomalies. There are many articles online that talk about, in theory, how to normalize database tables&#8230;This post is intended to serve as a practical application demonstration.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> <span id="more-53"></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">First Thing’s First…</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Before we really get started, you need to understand what we are going to be accomplishing here. We will be taking a table of data and putting it into Third Normal Form (3NF). However, before we can get to that 3NF mark, we need to go through first and second normal forms (1NF, 2NF respectively). So what are these forms?</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">1NF –1NF means your table exist with no duplicative columns (e.g. the table is atomic). </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">2NF – First, you must have met 1NF, then we go about identifying and separating subsets of data that can be reused (we’ll see more of this later).</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">3NF – First, 1NF and 2NF must have been met, then you’ll remove all data that is not directly related to the primary key.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">The Sample Data</span></span></strong></p>
<div>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 0.7in; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="67" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Last Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">First Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 74.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="99" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Address</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 48.1pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">City</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 48.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">State</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.7pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="61" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.75pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Credits Attempted</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 39.15pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="52" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Points Earned</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 30.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="41" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">GPA</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 0.7in; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="67" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Smith</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Joe</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 74.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="99" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">123 Main St</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 48.1pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">Orlando</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 48.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">FL</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.7pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="61" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.75pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">36</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 39.15pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="52" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">126</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 30.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="41" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">3.5</span></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">1NF</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">This is the easy one! You’ll notice from this table that there are no duplicative data columns.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">What’s a duplicative (non-atomic) column? Well, suppose we put in the table values “4.0, 3.8, 3.5” because we were tracking Joe’s GPA over time. The problem here is that adding a GPA to the table requires text parsing to add a value. This may not be much for a small data set, but what happens when a semester ends and 5000 students update 5000 GPAs based on 1-50+ GPA’s. Bad things…that’s what…</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">OR, let’s suppose that we decide to get around that issue, and we create a fixed number of rows for the number of semesters a student SHOULD be in class. What happens if a student exceeds that threshold by 1 semester? The entire database structure would need to be updated in order to fix the problem.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Anyways, this sample is in 1NF form because the table is atomic (has no duplicative columns). Each row describes a single person, event, object, whatever. </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">One last thing…We need to create a primary key to keep track of unique data rows, so we’re going to modify the table like so:</span></p>
<div>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 34.05pt; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="45" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Student ID (P)</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 43.9pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Last Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 40.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">First Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 61.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="82" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Address</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 46.1pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="61" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">City</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 41.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">State</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 41.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 58.8pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="78" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Credits Attempted</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Points Earned</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 31.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="43" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">GPA</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 34.05pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="45" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">1234</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 43.9pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Smith</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 40.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Joe</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 61.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="82" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">123 Main St</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 46.1pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="61" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">Orlando</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 41.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">FL</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 41.35pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="55" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 58.8pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="78" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">36</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">126</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 31.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="43" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">3.5</span></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">2NF</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">In 2NF, we start looking for subsets of data that we can pull out. In this example, there is one pretty obvious set of data that could be removed: the City, State, Zip. While this seems small, think about the context of this table. If 3000 of the 5000 students are in Orlando, FL 32810…that’s a ton of duplicated data and wasted space. So, lets fix the problem by removing that subset.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Student Table</span></p>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 49.6pt; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Student ID (P)</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Last Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 44.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">First Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 73.05pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="97" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Address</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Credits Attempted</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Points Earned</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 31.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="43" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">GPA</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">1234</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Smith</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 44.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Joe</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 73.05pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="97" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">123 Main St</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">36</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">126</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 31.95pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="43" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">3.5</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Zipcode Table</span></p>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 47.85pt; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 47.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="63" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">City</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">State</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 47.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 47.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="63" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">Orlando</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">FL</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">In this case, we created a second table called “Zipcode Table”. The Zip field acts as a foreign key to relate the Student record to a Zip code.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">This is a very simple example, but it’s not uncommon to find several smaller subsets inside a data table. Pull them all out, and relate them to the primary key with a foreign key, just like we did here.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"> </p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">3NF</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">We are now at the 3NF step! What we want to do here is ensure that all data in the table is fully dependant on the primary key. In the student table, we have a Primary Key (Student ID). The Student ID relates to a specific student, with a specific address, zip, credit count, and point count&#8230;right? Right! </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">But what about the GPA column? The GPA column is simply a calculation of (Points Earned)/(Credits Attempted). It’s not directly related to the key, it’s related to other values in the row. So, let’s get rid of it!</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Student Table</span></p>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 49.6pt; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt; text-align: center;" align="center"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Student ID (P)</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Last Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 44.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">First Name</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 73.05pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="97" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Address</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Credits Attempted</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Points Earned</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">1234</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 49.6pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="66" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Smith</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 44.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="59" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Joe</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 73.05pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="97" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">123 Main St</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 60.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="81" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">36</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 42.5pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="57" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">126</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Zipcode Table</span></p>
<table class="MsoTableGrid" style="border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 47.85pt; padding-top: 0in; background-color: transparent; mso-border-alt: solid windowtext .5pt; border: windowtext 1pt solid;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">Zip</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 47.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="63" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">City</span></span></strong></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">State</span></span></strong></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;">
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: windowtext 1pt solid; width: 47.85pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="64" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">32810</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 47.55pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="63" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman;"><span style="font-size: 10pt;">Orlando</span></span></p>
</td>
<td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #f0f0f0; padding-left: 5.4pt; padding-bottom: 0in; border-left: #f0f0f0; width: 45.2pt; padding-top: 0in; border-bottom: windowtext 1pt solid; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;" width="60" valign="top">
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: 10pt;"><span style="font-family: Times New Roman;">FL</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">BUT WAIT! How do we get our GPA, now!? EASY! When we do our SQL select query, we’ll simply do the following:</span></p>
<p class="MsoNormal" style="padding-left: 60px;"><span style="font-size: 10pt; font-family: &quot;Square721 BT&quot;; mso-bidi-font-family: 'Courier New';">Select Student ID, LastName, FirstName, Address, Zip, CreditsAttempted, PointsEarned, <strong style="mso-bidi-font-weight: normal;">PointsEarned / CreditsAttempted AS GPA</strong> FROM Students table;</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><em style="mso-bidi-font-style: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">(it should also be noted that in a real situation, all the grade information would be in another separate table(s), related by the StudentID)</span></span></em></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times New Roman;">Conclusion</span></span></strong></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">So what did we accomplish here, other than ensuring that we can say “Yep! It’s Normalized!” We designed a database that saves on storage space, is broken down to ensure that data anomalies are less likely (e.g. you can’t have two cities for the same zip…we designed that!), and we removed data that didn’t need to be stored in the first place!</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">If you take some time to analyze all your database requirements like this, the world will be a better place… Well, maybe not…</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/practical-application-of-database-normalization/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Learning SCORM</title>
		<link>http://www.daleeman.com/learning-scorm/</link>
		<comments>http://www.daleeman.com/learning-scorm/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 00:23:44 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[General Stuff]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=30</guid>
		<description><![CDATA[A few weeks back I decided to finally learn about the Sharable Content Object Reference Model (SCORM). Most of what I was able to find was either a high-level overview or some program that creates scorm code for you. That&#8217;s great, but I wanted to learn how to REALLY write a SCORM object (SCO)&#8230;meaning, by [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">A few weeks back I decided to finally learn about the Sharable Content Object Reference Model (SCORM). Most of what I was able to find was either a high-level overview or some program that creates scorm code for you. That&#8217;s great, but I wanted to learn how to REALLY write a SCORM object (SCO)&#8230;meaning, by hand! <span id="more-30"></span></p>
<p>What is SCORM? SCORM is &#8211; simply put &#8211; a browser-based API for communicating between 1) course content and an LMS and 2) LMS and the end-user. This allows for content sharing between LMSs without regard for the ACTUAL system&#8230;meaning, we&#8217;re SCORM dependant, not LMS dependant.</p>
<p>I decided that since I was writing a tutorial (of sorts) about SCORM, I should probably do my tutorial as a SCORM compliant package. And thats what I did.</p>
<p>Before you do anything, be sure to take the <a href="http://www.academiccolab.org/Initiatives/scormschool.html">SCORM 101 course</a>. Otherwise, this will be pretty useless for you!</p>
<p>(Not sure why this is not displaying under Firefox&#8230;)</p>
<p><iframe SRC="http://consulting.themangolds.com/SCORM/Creating%20a%20Simple%20SCO%20by%20Hand/" TITLE="SCORM Tutorial" width=500 height=400></iframe></p>
<p><a href="http://consulting.themangolds.com/SCORM/Creating%20a%20Simple%20SCO%20by%20Hand.zip">Download Source</a></p>
<p>You can see that this is a very simple no-frills SCO. And that was the point! I dont do objective tracking, I just display and navigate content. On a final note, it&#8217;s important to understand one final thing about SCORM&#8230;It is just a Javascript API that you add to your normal web content. Anything you can do with a normal webpage, you can do in SCORM&#8230;only in SCORM, the API lets you track your users/students and provides for a level of reusability (when implemented to do so).</p>
<p>Hopefully this has been helpful!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/learning-scorm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Drupal Permissions</title>
		<link>http://www.daleeman.com/understanding-drupal-permissions/</link>
		<comments>http://www.daleeman.com/understanding-drupal-permissions/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 21:15:33 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=28</guid>
		<description><![CDATA[For some reason, many of my customers and many of those on the Drupal site have trouble understanding the Drupal permissions system. It&#8217;s actually extremely simplistic&#8230;and in some cases, too much so&#8230; The Basics Drupal is set up to do role-based permissions. This means that every user (logged in or not) is assigned to a [...]]]></description>
			<content:encoded><![CDATA[<p>For some reason, many of my customers and many of those on the Drupal site have trouble understanding the Drupal permissions system. It&#8217;s actually extremely simplistic&#8230;and in some cases, too much so&#8230;<span id="more-28"></span></p>
<p><strong>The Basics</strong><br />
Drupal is set up to do role-based permissions. This means that every user (logged in or not) is assigned to a role. If you take a look at your Access Control settings, you&#8217;ll see that you can add new roles and set module permissions on each role. For example, if you set the &#8220;Authenticated user&#8221; role to &#8220;create page content&#8221;, every user in the &#8220;authenticated user&#8221; role can create page nodes anywhere on the site. Again, this is MODULE LEVEL.</p>
<p><strong>The Problem</strong><br />
I get this question all the time: &#8220;Can I make this page secured so that only myself and 3 others can see it?&#8221; The short answer is NO! The problem here lies in the Module-level roles. If you can view &#8220;Page&#8221; nodes, you can view ALL page nodes! This can be very problematic.</p>
<p><strong>A Solution</strong><br />
One possible solution is to install <a href="http://drupal.org/project/og">Organic Groups (OG)</a>. OG allows you to place pages in a group that only group members can access. The obvious problem is that in order to secure ONE page in a different way than all other content, you would need to create a group, create a page assigned to the group, and add users to the group. That can be a pain.</p>
<p>Another little caveat: If a user has a Role which allows for &#8220;create page content&#8221;, they will be able to create pages in ANY group they are a member of. If you need to restrict THAT, you&#8217;ll need yet another module: <a href="http://drupal.org/project/og_user_roles">og_user_roles</a>. This allows the group manager/admin to set user roles per group. However, if the user has a site-wide role permission (as defined in the Users-&gt;Access Control), they will have that role in your group no matter what. Meaning that you must remove them from the global role as well.</p>
<p><strong>Conclusion</strong><br />
While the Drupal authentication scheme probably works for 80% of the users, it is limited at the functional level, not the node level. There are quite a few access control modules that attempt to correct this (like OG) but they are all additional modules. A couple others to look at are <a href="http://drupal.org/project/taxonomy_access">Taxonomy Access Control (TAC)</a>, <a href="http://drupal.org/project/simple_access">Simple Access</a>, and any of the other <a href="http://drupal.org/project/Modules/category/74">174 Options</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/understanding-drupal-permissions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ugly PHP Code Tips</title>
		<link>http://www.daleeman.com/ugly-php-code-tips/</link>
		<comments>http://www.daleeman.com/ugly-php-code-tips/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 03:27:33 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=20</guid>
		<description><![CDATA[I suppose this part is just a rant, but if I see one more piece of undocumented, poorly spaced, procedural lump of PHP code, I&#8217;m going to scream. I realize that much of the PHP code out there was written for free by people who were writing code just to &#8220;get the job done&#8221;&#8230;I understand [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">I suppose this part is just a rant, but if I see one more piece of undocumented, poorly spaced, procedural lump of PHP code, I&#8217;m going to scream. I realize that much of the PHP code out there was written for free by people who were writing code just to &#8220;get the job done&#8221;&#8230;I understand that. Unfortunatley, when that code is published, others rely on that same code for thier job. Sure it&#8217;s free and you have a disclaimer and&#8230;whatever. There are 1000 excuses, but only one cause: Poor software engineering practices.<span id="more-20"></span></p>
<p>Perhaps due to the ubiquity of PHP among web developers, actual engineering skills may be&#8230;well&#8230;lacking. I see this a lot with many of the Drupal modules I end up having to fix to get MY job done, and I think it&#8217;s time that if you are going to call yourself a web developer, you need to flex some software engineering skills!</p>
<p style="padding-left: 30px; text-align: left;"><strong>Document Your Code</strong> - No one likes to dig through code all day and guess what they are looking at. When I say document, I dont mean write a formal SRS or SDD. I mean document EACH class, function, and major block of code in a consistent manner. Take a look at <a href="http://phpdoc.org/">phpDocumentor</a>. This package is a lot like JavaDoc, Doxygen&#8230;It makes you adhear to a certian standard, and in return you get a really nice API reference page/site.</p>
<p style="padding-left: 30px; text-align: left;"><strong>Adopt a Coding Standard/Style</strong> &#8211; A good place to start for this is the <a href="http://www.gnu.org/prep/standards/">GNU Coding Standards</a> site. While each project, group, or company will likely have thier own standards, at least this is a start.</p>
<p style="padding-left: 30px; text-align: left;"><strong>Name Things Appropriatley </strong>- This has become a huge pet-peave of mine lately: A php page with variables $a-$z. These variables mean NOTHING! For example, if I say pass in the $a variable to a function, what does that mean? How about when I call it the $StudentsArray? THAT tells you something!</p>
<p style="padding-left: 30px; text-align: left;"><strong>Start Using OOP</strong> - Object Oriented Programming (OOP) is essential in creating readable and sustainable code. While I may take some heat on this, no one can deny that PROPERLY ENGINEERED OOP code is generally much cleaner, more reusable, and much more maintainable than the comparable procedural lines.</p>
<p style="padding-left: 30px; text-align: left;"><strong>Break Your Code Up</strong> - As the author of a number of one-page scripts in the past, I can tell you that this style of coding is not the way to go. Try reading &#8211; nonetheless fixing &#8211; a huge monolithic heap of code. A great start is to simply begin grouping common functions together. Even if they are not reused, it&#8217;s MUCH easier to unit test code when it&#8217;s in small pieces.</p>
<p>It really comes down to this&#8230;If you&#8217;re going to publish code under the guise of being completely usable, be proud of what you publish! Take the time to make it right. Sure, when you&#8217;re working for free, who has the time to make things 100%? At least make the code you have readable enough so someone else can try!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/ugly-php-code-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using PHP to Optimize MySQL Tables</title>
		<link>http://www.daleeman.com/using-php-to-optimize-mysql-tables/</link>
		<comments>http://www.daleeman.com/using-php-to-optimize-mysql-tables/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 02:39:36 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=8</guid>
		<description><![CDATA[Optimizing your database tables is an essential task and the performance results might amaze you. Optimization is essentially the process of defragmenting your database tables. Then you use variable-length database fields such as VARCHAR, BLOB, TEXT, or VARBINARY, defragmentation can occur when rows are deleted.  Unfortunatley, there is no &#8220;OPTIMIZE DATABASE XYZ&#8221;, instead you need to go [...]]]></description>
			<content:encoded><![CDATA[<p>Optimizing your database tables is an essential task and the performance results might amaze you. Optimization is essentially the process of defragmenting your database tables. Then you use variable-length database fields such as VARCHAR, BLOB, TEXT, or VARBINARY, defragmentation can occur when rows are deleted. <span id="more-8"></span></p>
<p>Unfortunatley, there is no &#8220;OPTIMIZE DATABASE XYZ&#8221;, instead you need to go through your tables one-by-one and optimize them using an &#8220;OPTIMIZE TABLE XYZ&#8221;.</p>
<pre lang="php" line="1">
/* optimizeTables function
*
* Input: MySQL handle, database name
*/
function optimizeTables($conn, $database) {
mysql_select_db($database, $conn);

//Get a Table List
$TableQuery = "SHOW TABLES";
$rs = mysql_query($TableQuery);

//Optimize each table in the list
while($table = mysql_fetch_array($rs)) {
$OptimizationSQL = "OPTIMIZE TABLE " . $table[0];
$rs2 = mysql_query($OptimizationSQL);
$results = mysql_fetch_row($rs2);
echo $results[0] . "   " . $results[3] . PHP_EOL;
}

//Flush table cache and close the connection
mysql_query("FLUSH TABLES");
mysql_close($conn);
}
</pre>
<p>You can also execute `myisamchk` with appropriate options from the command like for each table. In my case, I wanted to be able to integrate this into another package which has its own crontab. One more caveat: If you are using InnoDB, this process will actually increase disk useage while freeing unused space. Not sure what to do about that one&#8230;but I dont use InnoDB&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/using-php-to-optimize-mysql-tables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress and Drupal</title>
		<link>http://www.daleeman.com/wordpress-and-drupal/</link>
		<comments>http://www.daleeman.com/wordpress-and-drupal/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 02:15:44 +0000</pubDate>
		<dc:creator>Daleeman</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://www.daleeman.com/?p=5</guid>
		<description><![CDATA[Anyone who has worked with me can testify &#8211; somewhat to my dismay &#8211; that my CMS of choice is Drupal, not WordPress. So why am I using wordpress when I could blog in Drupal&#8230;? Ever hear the phrase, &#8220;right tool for the job?&#8221; Well, this is it for blogging. Drupal is great at what it [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone who has worked with me can testify &#8211; somewhat to my dismay &#8211; that my CMS of choice is Drupal, not WordPress. So why am I using wordpress when I could blog in Drupal&#8230;? Ever hear the phrase, &#8220;right tool for the job?&#8221; Well, this is it for blogging.<span id="more-5"></span></p>
<p>Drupal is great at what it does&#8230;I suppose. The problem is that you can never really define what Drupal actually does without both short-changing and overstating its capabilities. The concept behind a fully generic CMS is GREAT! This means that I can arbitrarily add data, create different types of data, and so on&#8230;and Drupal allows for this! So what, then, is the problem?</p>
<p>The problem is &#8230; who wants to mess with code just to set up a blog? Who wants to download 38 different access control modules to find the one you&#8217;re comfortable with? Who wants partially implemented and partially working modules? No one! As a self-proclaimed Drupal Ninja, I can tell you the shortcomming: A lack of a strong identity with a robust integrated featureset. That&#8217;s not to say that Drupal core isnt stable and robust&#8230;but for WHAT PURPOSE?</p>
<p>So we go back to the previous question&#8230;what is Drupal? Is it a Weblog? No. Is it a Program management/Groupware suite? No. Is it a tool for document management? No. Could it be ALL THE ABOVE AND MORE? CERTIANLY! But that costs time and money&#8230;</p>
<p>Long story short&#8230;I make a living off of developing and &#8220;selling&#8221; Drupal sites&#8230;and when I wanted a Blog, I chose a Blog package: WordPress.  Some food for thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.daleeman.com/wordpress-and-drupal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

