<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-33280257</id><updated>2012-01-30T04:00:15.190-08:00</updated><title type='text'>The complete Technical Programming Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33280257.post-115702244667546561</id><published>2006-08-31T04:07:00.000-07:00</published><updated>2006-08-31T04:07:26.746-07:00</updated><title type='text'>The Enterprise Bean Component</title><content type='html'>&lt;p class="docText"&gt;&lt;a name="entjbeans4-CHP-2-ITERM-2452"&gt;&lt;/a&gt;Enterprise &lt;a name="entjbeans4-CHP-2-ITERM-2453"&gt;&lt;/a&gt;JavaBeans server-side components come in three fundamentally different types: &lt;span class="docEmphasis"&gt;entity, session&lt;/span&gt;, and &lt;span class="docEmphasis"&gt;message-driven beans&lt;/span&gt;. Both session and entity beans are RMI-based server-side components that are accessed using distributed object protocols. Message-driven beans process messages from non-RMI systems like Java Message Service, legacy systems, and web services. All EJB servers must at least support a JMS-based message driven bean, but they may also support other types of message-driven bean.&lt;/p&gt;&lt;p class="docText"&gt;A good rule of thumb is that entity beans model business concepts that can be expressed as nouns. For example, an entity bean might represent a customer, a piece of equipment, an item in inventory, or even a place. In other words, entity beans model real-world objects; these objects are usually persistent records in some kind of database. Our hypothetical cruise line will need entity beans that represent cabins, customers, ships, etc.&lt;/p&gt;&lt;p class="docText"&gt;&lt;a name="entjbeans4-CHP-2-ITERM-2454"&gt;&lt;/a&gt;&lt;a name="entjbeans4-CHP-2-ITERM-2455"&gt;&lt;/a&gt;Session beans are extensions of the client application that manage processes or tasks. A Ship bean provides methods for doing things directly to a ship, but doesn't say anything about the context under which those actions are taken. Booking passengers on the ship requires that we use a Ship bean, but it also requires a lot of things that have nothing to do with the ship itself: we'll need to know about passengers, ticket rates, schedules, and so on. A session bean is responsible for this kind of coordination. Session beans tend to manage particular kinds of activities, such as the act of making a reservation. They have a lot to do with the relationships between different entity beans. A TravelAgent session bean, for example, might make use of a Cruise, a Cabin, and a Customer&amp;mdash;all entity beans&amp;mdash;to make a reservation.&lt;/p&gt;&lt;p class="docText"&gt;Similarly, &lt;a name="entjbeans4-CHP-2-ITERM-2456"&gt;&lt;/a&gt;&lt;a name="entjbeans4-CHP-2-ITERM-2457"&gt;&lt;/a&gt;message-driven beans coordinate tasks involving other session and entity beans. Message-driven beans and session beans differ primarily in how they are accessed. While a session bean provides a remote interface that defines which methods can be invoked, a message-driven bean subscribes to or listens for messages. It responds by processing the message and managing the actions that other beans take. For example, a ReservationProcessor message-driven bean would receive asynchronous messages&amp;mdash;perhaps from a legacy reservation system&amp;mdash;from which it would coordinate the interactions of the Cruise, Cabin, and Customer beans to make a reservation.&lt;/p&gt;&lt;p class="docText"&gt;The activity that a session or message-driven bean represents is fundamentally transient: you start making a reservation, you do a bunch of work, and then it's finished. The session and message-driven beans do not represent things in the database. Obviously, session and message-driven beans have lots of side effects on the database; in the process of making a reservation, you might create a new Reservation by assigning a Customer to a particular Cabin on a particular Ship. All of these changes would be reflected in the database by actions on the respective entity beans. Session and message-driven beans like TravelAgent and ReservationProcessor, which are responsible for making a reservation on a cruise, can even access a database directly and perform reads, updates, and deletes to data. But there's no TravelAgent or ReservationProcessor record in the database&amp;mdash;once the bean has made the reservation, it waits to process another.&lt;/p&gt;&lt;p class="docText"&gt;What makes the distinction between the different types of beans difficult to understand is that it's extremely flexible. &lt;a name="entjbeans4-CHP-2-ITERM-2458"&gt;&lt;/a&gt;The relevant distinction for Enterprise JavaBeans is that an entity bean has persistent state; session and message-driven beans model interactions but do not have persistent state.&lt;/p&gt;&lt;p class="docText"&gt;Tags: &lt;a href="http://technorati.com/tag/EJB" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;EJB&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/enterprise+bean" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;enterprise bean&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/component" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;component&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/java+beans" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;java beans&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/entity" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;entity&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/session" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;session&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/message-driven" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;message-driven&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/RMI" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;RMI&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/EJB+server" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;EJB server&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/persistent+state" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;persistent state&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/interactions" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;interactions&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33280257-115702244667546561?l=beaprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/115702244667546561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33280257&amp;postID=115702244667546561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115702244667546561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115702244667546561'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/2006/08/enterprise-bean-component.html' title='The Enterprise Bean Component'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33280257.post-115700921295062931</id><published>2006-08-31T00:26:00.000-07:00</published><updated>2006-08-31T00:26:52.953-07:00</updated><title type='text'>Reducing the Size of .NET Applications</title><content type='html'>&lt;p&gt;Executable files for the .NET Framework currently cannot be packed by binary file compressors such as UPX (http://upx.sourceforge.net/) because .NET uses customized sections in the Portable Executable (PE) file (which is used by all Windows executable files). The .NET Execution Engine expects Common Language Infrastructure (CLI) data to be in the proper sections of the PE file. However, CLI data is placed in the PE sections uncompressed by default.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ddj.com/184406005" target="_blank"&gt;This article &lt;/a&gt;presents a technique for reducing the size of .NET executables without using native code or otherwise modifying the PE format. Instead uses reflection, which is supported by the .NET Framework, and pack the applications at a higher level.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Reducing the size of applications has several benefits:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The disk space required is smaller. While disk space is usually not a problem in desktop computers, it can be in portable devices that run .NET Framework.&lt;/li&gt;&lt;li&gt;Smaller executables load faster because of fewer disk accesses. Even if you uncompress the data in memory, RAM access is very fast and compressed executables still load faster than the original uncompressed ones.&lt;/li&gt;&lt;li&gt;Using compression combined with, say, in-memory encryption/decryption makes it harder to disassemble .NET applications. This helps protect intellectual property.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The technique does not affect the usual development of .NET applications. The application EXE file and DLL files are built and compiled as usual. The technique can be applied as an additional step after you build the release version. Because of the generality of the solution, it is possible to generalize the technique to work with generic EXE and DLL files written in any .NET front-end language. I have created a tool called .NETZ, which is based on this technique (source code and binaries are available at http://www.st.informatik .tu-darmstadt.de/static/staff/Cepa/tools/netz/index.html and from &lt;i&gt;DDJ&lt;/i&gt;; see "Resource Center," page 5). &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ddj.com/184406005" target="_blank"&gt;Read Reduce the size of .NET applications&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/executable+files" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;executable files&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;.NET&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/file+compressors" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;file compressors&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/PE+file" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;PE file&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/CLI" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;CLI&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET+framework" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;.NET framework&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33280257-115700921295062931?l=beaprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/115700921295062931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33280257&amp;postID=115700921295062931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700921295062931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700921295062931'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/2006/08/reducing-size-of-net-applications.html' title='Reducing the Size of .NET Applications'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33280257.post-115700895497216627</id><published>2006-08-31T00:22:00.000-07:00</published><updated>2006-08-31T00:22:34.976-07:00</updated><title type='text'>Write a Simple Web Service .NET</title><content type='html'>You can write a simple XML Web service in a few minutes using any text editor. The service you will create in this section, MathService, exposes methods for adding, subtracting, dividing, and multiplying two numbers. At the top of the page, the following directive identifies the file as a XML Web service in addition to specifying the language for the service (C#, in this case). &lt;div class="code"&gt;&lt;pre&gt;&lt;font color="#ff7f00"&gt;&amp;lt;%@ WebService Language="C#" Class="MathService" %&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this same file, you define a class that encapsulates the functionality of your service. This class should be public, and can optionally inherit from the &lt;b&gt;WebService&lt;/b&gt; base class. Each method that will be exposed from the service is flagged with a &lt;b&gt;[WebMethod]&lt;/b&gt; attribute in front of it. Without this attribute, the method will not be exposed from the service. This is sometimes useful for hiding implementation details called by public &lt;b&gt;Web Service&lt;/b&gt; methods, or in the case where the &lt;b&gt;WebService&lt;/b&gt; class is also used in local applications (a local application can use any public class, but only &lt;b&gt;WebMethod&lt;/b&gt; classes are remotely accessible as XML Web services). &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;font color="#ff7f00"&gt;Imports SystemImports System.Web.ServicesPublic Class MathService : Inherits WebService   &amp;lt;WebMethod()&amp;gt; Public Function Add(a As Integer, b As Integer) As Integer       Return(a + b)   End FunctionEnd Class&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;b&gt;VB&lt;/b&gt; &lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;XML Web service files are saved under the .asmx file extension. Like .aspx files, these are automatically compiled by the ASP.NET runtime when a request to the service is made (subsequent requests are serviced by a cached precompiled type object). In the case of MathService, you have defined the &lt;b&gt;WebService&lt;/b&gt; class in the .asmx file itself. Note that if an .asmx file is requested by a browser, the ASP.NET runtime returns a XML Web service Help page that describes the Web Service. &lt;/p&gt;&lt;h5&gt;Precompiled XML Web services&lt;/h5&gt;&lt;p&gt;If you have a precompiled class that you want to expose as a XML Web service (and this class exposes methods marked with the &lt;b&gt;[WebMethod]&lt;/b&gt; attribute), you can create an .asmx file with only the following line. &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;font color="#ff7f00"&gt;&amp;lt;%@ WebService Class="MyWebApplication.MyWebService" %&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;&lt;font color="#ff7f00"&gt;MyWebApplication.MyWebService&lt;/font&gt;&lt;/code&gt; defines the &lt;b&gt;WebService&lt;/b&gt; class, and is contained in the \bin subdirectory of the ASP.NET application. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h5&gt;Consuming a XML Web service from a Client Application&lt;/h5&gt;&lt;p&gt;To consume this service, you need to use the Web Services Description Language command-line tool (WSDL.exe) included in the SDK to create a proxy class that is similar to the class defined in the .asmx file. (It will contain only the &lt;b&gt;WebMethod&lt;/b&gt; methods.) Then, you compile your code with this proxy class included. &lt;/p&gt;&lt;p&gt;WSDL.exe accepts a variety of command-line options, however to create a proxy only one option is required: the URI to the WSDL. In this example, we are passing a few extra options that specify the preferred language, namespace, and output location for the proxy. We are also compiling against a previously saved WSDL file instead of the URI to the service itself: &lt;/p&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;font color="#ff7f00"&gt;wsdl.exe /l:CS /n:MathService /out:MathService.cs MathService.wsdl&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the proxy class exists, you can create objects based on it. Each method call made with the object then goes out to the URI of the XML Web service (usually as a SOAP request). &lt;/p&gt;&lt;p&gt;&lt;a href="http://samples.gotdotnet.com/quickstart/aspplus/doc/writingservices.aspx" target="_blank"&gt;For more information click here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/web+services" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;web services&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;.NET&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/deploy" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;deploy&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/xml" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;xml&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/expose+methods" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;expose methods&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/c#" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;c#&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/webservice" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;webservice&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/precompiled" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;precompiled&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/proxy+class" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;proxy class&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/uri" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;uri&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/soap+request" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;soap request&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33280257-115700895497216627?l=beaprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/115700895497216627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33280257&amp;postID=115700895497216627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700895497216627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700895497216627'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/2006/08/write-simple-web-service-net.html' title='Write a Simple Web Service .NET'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33280257.post-115700495809442339</id><published>2006-08-30T23:15:00.000-07:00</published><updated>2006-08-30T23:15:58.116-07:00</updated><title type='text'>Introduction to Database Normalization</title><content type='html'>&lt;p&gt;&lt;span class="txt"&gt;Database normalization can essentially be defined as the practice of optimizing table structures. Optimization is accomplished as a result of a thorough investigation of the various pieces of data that will be stored within the database, in particular concentrating upon how this data is interrelated. An analysis of this data and its corresponding relationships is advantageous because it can result both in a substantial improvement in the speed in which the tables are queried, and in decreasing the chance that the database integrity could be compromised due to tedious maintenance procedures.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="txt"&gt;&lt;span class="txt"&gt;Database normalization&amp;nbsp;provides table optimization through the investigation of entity relationships. But why is this necessary? In this section, I&amp;rsquo;ll elaborate a bit upon why normalization is necessary when creating commercial database applications.&lt;br /&gt;Essentially, table optimization is accomplished through the elimination of all instances of data redundancy and unforeseen scaleability issues.&lt;/p&gt;&lt;h3&gt;Redundancy&lt;/h3&gt;&lt;p&gt;Data redundancy is exactly what you think it is; the repetition of data. One obvious drawback of data repetition is that it consumes more space and resources than is necessary. Consider the following table:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Table 1-1: Poorly defined table&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/b&gt;&lt;p align="center"&gt;&lt;b&gt;&lt;font size="1"&gt;student_id&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/b&gt;&lt;p align="center"&gt;&lt;b&gt;&lt;font size="1"&gt;class_name&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/b&gt;&lt;p align="center"&gt;&lt;b&gt;&lt;font size="1"&gt;time&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/b&gt;&lt;p align="center"&gt;&lt;b&gt;&lt;font size="1"&gt;location&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/b&gt;&lt;p align="center"&gt;&lt;b&gt;&lt;font size="1"&gt;professor_id&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;999-40-9876&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Math 148&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;MWF 11:30&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Rm. 432&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;prof145&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;999-43-0987&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Physics 113&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;TR 1:30&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Rm. 12&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;prof143&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;999-42-9842&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Botany 42&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;F 12:45&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Rm. 9&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;prof167&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;999-41-9832&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Matj 148&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;MWF 11:30&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;Rm. 432&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&lt;font size="1"&gt;&lt;p align="center"&gt;prof145&lt;/p&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Basically this table is a mapping of various students to the classes found within their schedule. Seems logical enough, right? Actually, there are some serious issues with the choice to &lt;a class="iAs" style="PADDING-BOTTOM: 1px; COLOR: blue; BORDER-BOTTOM: blue 0.07em solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.devshed.com/#" target="_blank" itxtdid="2184581"&gt;store data&lt;/a&gt; in this format. First of all, assuming that the only intention of this table is to create student-class mappings, then there really is no need to repeatedly store the class time and professor ID. Just think that if there are 30 students to a class, then the class information would be repeated 30 times over!&lt;br /&gt;&lt;br /&gt;Moreover, redundancy introduces the possibility for error. You might have noticed the name of the class found in the final row in the table (Matj 148). Given the name of the class found in the first row, chances are that Matj 148 should actually be Math 148! While this error is easily identifiable when just four rows are present in the table, imagine finding this error within the rows representing the 60,000 enrolled students at my alma mater, The Ohio State University. Chances that you&amp;rsquo;ll find these errors are unlikely, at best. And the cost of even attempting to find them will always be high.&lt;/p&gt;&lt;h3&gt;Unforeseen Scaleability Issues&lt;/h3&gt;&lt;p&gt;Unforeseen scaleability issues generally arise due to lack of forethought pertaining to just how large a database might grow. Of course, as a database grows in size, initial design decisions will continue to play a greater role in the speed of and resources allocated to this database. For example, it is typically a very bad idea to limit the potential for expansion of the information that is to be held within the db, &lt;i&gt;even if&lt;/i&gt; there are currently no plans to expand. For example, structurally limiting the database to allot space for only three classes per student could prove deadly if next year the school board decides to permit all students to schedule three classes. This also works in the opposite direction; What if the school board subsequently decides to only allow students to schedule two classes? Have you allowed for adequate flexibility in the design so as to easily adapt to these new policies?&lt;br /&gt;&lt;br /&gt;The remedy to these problems is through the use of a process known as database normalization. A subject of continued research and debate over the years, several general rules have been formulated that layout the process one should follow in the quest to normalize a database. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/3/" target="_blank"&gt;Find more&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/database+normalization" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;database normalization&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/tables" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;tables&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/structure" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;structure&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/optimization" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;optimization&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/database" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;database&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/query" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;query&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/redundancy" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;redundancy&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mapping" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;mapping&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/key" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;key&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/normalize" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;normalize&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/design" target="_blank" rel="tag"&gt;&lt;font size="1"&gt;design&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33280257-115700495809442339?l=beaprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/115700495809442339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33280257&amp;postID=115700495809442339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700495809442339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115700495809442339'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/2006/08/introduction-to-database-normalization.html' title='Introduction to Database Normalization'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33280257.post-115642860349031391</id><published>2006-08-24T07:08:00.000-07:00</published><updated>2006-08-24T07:10:03.500-07:00</updated><title type='text'>My first post</title><content type='html'>main()&lt;br /&gt;{&lt;br /&gt;    printf("Hello World");&lt;br /&gt;    printf("\n My First Post");&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33280257-115642860349031391?l=beaprogrammer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beaprogrammer.blogspot.com/feeds/115642860349031391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33280257&amp;postID=115642860349031391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115642860349031391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33280257/posts/default/115642860349031391'/><link rel='alternate' type='text/html' href='http://beaprogrammer.blogspot.com/2006/08/my-first-post.html' title='My first post'/><author><name>eshwar</name><uri>http://www.blogger.com/profile/00372561741462677869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
