<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Louis Davidson : Database Design, Design, Best Practices, Requirements</title><link>http://sqlblog.com/blogs/louis_davidson/archive/tags/Database+Design/Design/Best+Practices/Requirements/default.aspx</link><description>Tags: Database Design, Design, Best Practices, Requirements</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>What is a physical database?</title><link>http://sqlblog.com/blogs/louis_davidson/archive/2009/06/11/what-is-a-physical-database.aspx</link><pubDate>Thu, 11 Jun 2009 22:26:36 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:14601</guid><dc:creator>drsql</dc:creator><slash:comments>4</slash:comments><comments>http://sqlblog.com/blogs/louis_davidson/comments/14601.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/louis_davidson/commentrss.aspx?PostID=14601</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/louis_davidson/rsscomments.aspx?PostID=14601</wfw:comment><description>&lt;p&gt;A bit of terminology that gets beaten to death is that of the “physical” database.&amp;#160; I would think most every DBA uses this term (I do), but…to mean what?&amp;#160; I think there are two common utilizations:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The layer of tables, constraints, indexes, etc used to store data &lt;/li&gt;    &lt;li&gt;The actual on-disk structures. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Frankly, until 3 years ago, I used the first interpretation.&amp;#160; However, I was beaten up pretty badly by a few people whom I don’t really remember (I think &lt;a href="http://www.simple-talk.com/author/anith-sen/" target="_blank"&gt;Anith Sen&lt;/a&gt; was one of them.)&amp;#160; The problem is, I was scolded, &lt;strong&gt;“physical”&lt;/strong&gt; already had a meaning, given it by the “founder” himself, EF Codd. &lt;/p&gt;  &lt;p&gt;So, checking his 12 Rules, Codd stated the following two things:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Rule 8:&lt;/b&gt; &lt;i&gt;Physical data independence&lt;/i&gt;: &lt;/p&gt; Changes to the physical level (how the data is stored, whether in arrays or linked lists etc.) must not require a change to an application based on the structure.   &lt;p&gt;&lt;b&gt;Rule 9:&lt;/b&gt; &lt;i&gt;Logical data independence&lt;/i&gt;: &lt;/p&gt; Changes to the logical level (tables, columns, rows, and so on) must not require a change to an application based on the structure. Logical data independence is more difficult to achieve than physical data independence.   &lt;p&gt;And actually, the implementation layer really is the logical model if you follow his terminology since his rules were pertaining to the relational model and not the entire design process.&amp;#160; This article says it better than I can in a long blog, but I am not sure about that URL (mac.com?): &lt;/p&gt;  &lt;p&gt;&lt;a href="http://homepage.mac.com/s_lott/iblog/architecture/C465799452/E20080301143528/"&gt;http://homepage.mac.com/s_lott/iblog/architecture/C465799452/E20080301143528/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The physical layer of a relational database occurs down at the file system level.&amp;#160; Codd's &amp;quot;Rule 8&amp;quot; (Physical Data Independence) says that the things we're designing in ERwin (and similar tools) are the things our application depends on.&amp;#160; These are not physical in nature, but are the relational implementation.&amp;#160; &lt;/p&gt;  &lt;p&gt;So the thing I am trying to say is that physical means that a little 5 volt charge is sitting there representing a bit of data in the physical world.&amp;#160; I like the term logical to mean implementation platform non-specific.. The thing in the middle is the SQL Server/Relational&amp;#160; implementation specific model.&amp;#160; It may take liberties to optimize for SQL Server, but it is not physical. That is were partitioning. indexing, filegroups, etc come in. Changes to this layer ought never be noticable by the application.&amp;#160; &lt;/p&gt;  &lt;p&gt;I guess in the comments, I ought to expect a good number of replies that might start to answer the question.&amp;#160; Does it matter? Is it only semantics? Hey if you don’t think semantics matter, I hope that when you find yourself drowning that the person who has the choice of tossing you a life preserver or a sack of door knobs interprets the meaning of your cry for help in the way you intended. You would hate to find yourself at the bottom of a lake thinking “hmm, I wonder why they did that? Did they hate me, of just mis-interpret the meaning of my sentence?&amp;quot; &lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=14601" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Database+Design/default.aspx">Database Design</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Development/default.aspx">Development</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Requirements/default.aspx">Requirements</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Terminology/default.aspx">Terminology</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Writing/default.aspx">Writing</category></item><item><title>Requirements vs Architecture</title><link>http://sqlblog.com/blogs/louis_davidson/archive/2009/04/12/requirements-vs-architecture.aspx</link><pubDate>Mon, 13 Apr 2009 01:30:12 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:13256</guid><dc:creator>drsql</dc:creator><slash:comments>2</slash:comments><comments>http://sqlblog.com/blogs/louis_davidson/comments/13256.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/louis_davidson/commentrss.aspx?PostID=13256</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/louis_davidson/rsscomments.aspx?PostID=13256</wfw:comment><description>&lt;p&gt;Okay, so on the first look this sounds like the most boring Japanese action movie ever. Requirements is tearing through the village, and Architecture is in the city.&amp;#160; Developers by the horde are trying to code both of these into oblivion…Maybe not.&amp;#160; Clearly I am talking about something a little more exciting…the battle between the forces of business and computing, or more precisely, the forces trying to keep them apart. Back in 2000, C J Date produced a book (which I clearly haven’t read) called “What, Not How”.&amp;#160; I haven’t read it because as a person who does implementation, my primary care is about the opposite. “How, Not What”&amp;#160; I would like to think that if the “what” was perfectly defined, all we as implementers would have to do would be to translate from business language to machine language, but all to often I find myself involved in the business analysis, either because it is thought that I would be, or because the requirements come to me in terms of how the software will be created (which isn’t usually the way I want it done, which usually does matter, since it is my responsibility to actually design and often do the implementation.)&lt;/p&gt;  &lt;p&gt;The thing I tend to find is that one of the most difficult parts of the software implementation process is getting people in the proper roles. As an architect, I find that a lot of times it is expected that I know a lot about the subject matter of the system I have created.&amp;#160; Even worse, when it comes to the creating a new system, it is supposed that I would be able to pick a lot about the system that is being designed (often without it being formally communicated.) There is some truth there, but let’s be honest.&amp;#160; I got a degree in Computer Science, not chemical processes, accounting, or food service/logistics. Every new system that I might work on is a crash course in learning a new industry.&amp;#160; And to be honest, not always one that I really want to fill my brain with permanently.&lt;/p&gt;  &lt;p&gt;However, the person whose role is entitled Business Analyst does in fact have that role to learn enough about a problem in an industry and turn it into a specification. This document is what will be used to create a future piece of software and/or manual processes (that is for us to decide once the scope of the system has been decided upon.&amp;#160; Their job is to, well, this might sound silly if you think about it, but to analyze the business and “figure it out”.&amp;#160; This role is one that I feel is essential to the health of a project because they are cleanly divorced from the implementation whereas I as an architect are not.&lt;/p&gt;  &lt;p&gt;Put it this way, consider the role of the architect for a building.&amp;#160; Does the architect determine what the house is for? No, for if they did every house would be 100 stories with artsy windows in every room.&amp;#160; I saw a good example of this on the TV Show “How I Met Your Mother” the other night. Ted (the architect) was told to design a bleak room for the clients new “firing room” (this was to be a copy of the existing one, just on a different floor of the building).&amp;#160; He wanted a horrible place to can people because he was completely sadistic.&amp;#160; Ted wanted to put his touch, and designed a whole system for nicely letting someone go, including a sympathy room with councilors, and such.&amp;#160; Needless to say he was fired from his job.&lt;/p&gt;  &lt;p&gt;As an architect, it is my role to take the business requirements and negotiate a solution that closely resembles what is desired, bending mostly for cases where the desired system, if built in the exact manner of the requirements, would extinguish life on Earth or cost too much (sometimes just the latter.)&amp;#160; Keeping out the influence of implementation during the requirements gathering phase of a project eliminates the “this is how you do it in this technology” creep. I am a relational designer, and as such I feel I can do anything in SQL (I want someday implement a compiler, much like I used VB to implement one in a college class once. Not my best grade, but it did work.)&amp;#160; I constantly find myself steering requirements toward what &lt;strong&gt;*I* &lt;/strong&gt;know how to do, and as such find that I tend to miss a few points because I have started designing/coding mentally even before all of the requirements have been gathered. Of course, in the implementation it is okay to steer towards what you know, as this is how things get done.&amp;#160; Having multiple strong minded people on a team, however, is how great things get done.&lt;/p&gt;  &lt;p&gt;A classic example of this for me was when I was architecting the db for a chemical plant product testing system. Materials had to be within a given range or they were considered not shippable. Cool, makes sense, keep getting requirements…must…get…coding. Well, a person who had really thought about their business would have probably realized that “not shippable” might not always mean “not shippable” when you are talking about materials that are not medical nor edible. So in the first week of production they go, “okay, so how do I override these requirements to ship this lot of product to client X?” Oops. Maybe if I had spent more time considering the entire process rather than trying to finish up my diagram to generate code…&lt;/p&gt;  &lt;p&gt;What do you think?&amp;#160; Can you turn off the “Get ‘er done” part of your mind when you are doing requirements, or do you find that you really really want to start building software well before you really understand the entire problem?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Now, before you get all “but in Agile we don’t gather ALL requirements…” understand that I don’t mean ALL requirement for an entire project.&amp;#160; What I &lt;strong&gt;do &lt;/strong&gt;mean is as many requirements as possible about the area you plan to implement, and I still mean that if you are the coder that steering requirements toward your expertise is not a great service to anyone but you…well, unless you are really good, then maybe it is okay.&amp;#160; In my example, if we had said “We aren’t going to implement overriding in this sprint,” the system would have still been unusable.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=13256" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Database+Design/default.aspx">Database Design</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/louis_davidson/archive/tags/Requirements/default.aspx">Requirements</category></item></channel></rss>