<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:s="http://www.techrepublic.com/search" xmlns:dc="http://purl.org/dc/elements/1.1/"  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
    <title><![CDATA[Discussion on 10  ways to screw up your database design ]]></title>
    <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750]]></link>
    <atom:link rel="hub" type="application/rss+xml" href="http://pubsubhubbub.appspot.com/" />
    <atom:link rel="self" type="application/rss+xml" href="http://www.techrepublic.com/forum/discussions/102-336750/rss" />

    <description><![CDATA[]]></description>
    <language>en-us</language>
    <lastBuildDate>2013-05-24T13:51:45-07:00</lastBuildDate>
             

    <item>
        <title><![CDATA[Business needed a strong DB engine.]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378794]]></link>
        <description><![CDATA[The decision support that was de-normalised was just along for the ride. The application got quite complicated with all the business requirements. We needed long lists of things for the calculation (Budget, Actual, etc.). The Decision Support tables would summarise the long lists for reporting and analysis. I have to say that the application was quite fun except for the 2-hour meetings that ended up with 'ingore all that we discussed here, we'll have to try again'.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378794]]></guid>
        <dc:creator><![CDATA[mattohare@...]]></dc:creator>
        <pubDate>Sun, 31 Oct 2010 06:08:03 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[I've no problem with ending up with a denormalised]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378693]]></link>
        <description><![CDATA[design, starting with one, well that's an issue. If that's what you want or need, why in Cthulu's name are you using a relational database in the first place?]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378693]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Sat, 30 Oct 2010 12:23:10 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Normalise OLTP, Denormalise Decision Support]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378656]]></link>
        <description><![CDATA[That's been my approach. In a large environment, there would be different systems for production and decision support. Smaller environments (like a department/division of a bank in my case) it may seem that separate systems would be overkill. So, where there was a need for complex links that would bog down the system, I put in some stored procedures that would keep a separate set of decision support tables up to date. That kept the production system fast (the stored procedure to update the DSS table acted very fast) and the decision support system fast (use two or three tables instead of a dozen). My philosophy was to make a normalisation strategy that suited the purpose.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3378656]]></guid>
        <dc:creator><![CDATA[mattohare@...]]></dc:creator>
        <pubDate>Sat, 30 Oct 2010 04:58:45 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Have both natual and surrogate keys.]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3375325]]></link>
        <description><![CDATA[There is reason for both surrogate and natural keys. A primary example is if you are implementing a type 6 hybrid slowing changing dimension structure to the database.I believe that a database can exist with both natural and surrogate keys. If the key is simple, primarily belongs to a static reference table then leave it natural. Why complicate things? On the other hand if there is the slightest chance the natural key will change over time, or if you have 10s of 1000s of keys, then create a numeric surrogate key. The join performance will be more optimal on the numeric key over some cryptic alpha key.Just my 2c.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3375325]]></guid>
        <dc:creator><![CDATA[kerryjn]]></dc:creator>
        <pubDate>Fri, 22 Oct 2010 08:31:21 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[RE: 10  ways to screw up your database design]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3375324]]></link>
        <description><![CDATA[There is reason for both surrogate and natural keys.  A primary example is if you are implementing a type 6 hybrid slowing changing dimension structure to the database.I believe that a database can exist with both natural and surrogate keys.  If the key is simple, primarily belongs to a static reference table then leave it natural.  Why complicate things?  On the other hand if there is the slightest chance the natural key will change over time, or if you have 10s of 1000s of keys, then create a numeric surrogate key.  The join performance will be more optimal on the numeric key over some cryptic alpha key.Just my 2c.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3375324]]></guid>
        <dc:creator><![CDATA[kerryjn]]></dc:creator>
        <pubDate>Fri, 22 Oct 2010 08:30:24 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[I like surrogates when I use Access...]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3373776]]></link>
        <description><![CDATA[...but since I code in large-scale, heterogenous, multi-locational RDBs, I reckon I will continue to use what works where it works. Massive updates? Better use a surrogate unless you just love page splits and long I/O for reordering pages. Lots of queries against target (i.e. all or part of natural) key? Best use natural key.Sorry, there ain't no one right answer, as Heinlein might not have said. Better learn how the damn thing works before you stick your key in and start 'er up.Most seem to forget that the point of a database is ONLY to get stuff OUT. The only reason you put stuff in, of course, being that you wanna get it back out again. Or is your database write only? The answer to your key question then will be: how will I be fetching the data? Is it beneficial to slow the insert process to speed the retrieval? Most cases youbetcha. The number of retrievals per insert is phenomenally high (and a big ole honkin hint on where your design effort should go).If you are joining on a dozen tables to get a regular query, YOUR DATABASE SUCKS. This does not mean you are a bad person unless you never fix it.If you follow some arcane rule or another and it does not work for you, just F*CKING break the rule (even normalization). I guess I will repeat it just to be obnoxious: The point of a database is ONLY to get stuff OUT. Focus on that and forget what anyone tells you: if you get out of the database the right data everytime, you will get the money and everyone else will be blogging for free.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3373776]]></guid>
        <dc:creator><![CDATA[verelse]]></dc:creator>
        <pubDate>Tue, 19 Oct 2010 11:47:51 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Anticipating anything..I agree 100%]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3371621]]></link>
        <description><![CDATA[I agree with you 100%. And I really  didnt have a choice. I had to anticipate because of working with people who didn't know what they wanted, needed or not needed in a database.  Your example about a student with SSN issues. That would be something that wouldn't come up. The reason why is that a student who plans on majoring in Education, once they are fully admitted into the program, they have to get a mandatory background check through the state's law enforcement division or SLED for short *lol*. It's a very through check, because the students will be in the schools doing practical learning and directed learning as a student teacher. And if it were to come up that the student had no SSN, it would  not be a problem. The reason why is that there the database is one part of an etire syste, that tracks the student form the first time they say they want to major in Education until the end when they have graduated and are teaching in a school. There are checkpoints built-in within the system to check the student's information through the 5 areas of progression through the Education program. The system as a whole is designed to catch errors (among other things). That is one of the main guidelines and requirements of the accrediation.  I'm by no means sayng that the system as a whole (not just the database) is perfect. But being as error-free as possible is one of the major goals.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3371621]]></guid>
        <dc:creator><![CDATA[RayJeff]]></dc:creator>
        <pubDate>Wed, 13 Oct 2010 23:32:09 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[The point I was making was]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370885]]></link>
        <description><![CDATA[Access is horrible tool to teach relational database theory with.It's also an awful tool to teach SQL with.The 'reverse' would be command line Osql would be a horrible power user tool for an MBA....And of course, completely and totally irrelevant.Unfortunately, or fortunately depending on how you look at it, there are a lot of devs doing database design and sql (well sort of). A horrifying percentage of them quite obviously don't get either, I should know I get paid to tidy up after them.I don't expect a dev to know 6NF (I don't), I don't expect them to be able to tune a partitioned databasde over a raid (I can't), or set up  a cluster (woudln't no where to start)I do expect them to know up to 3NF, and that you don't do select * from Table, suck everything on to a clients and then iterate through with next to find the one called Bill and set his surname to Gates.I suppose I might be expecting too much, I mean a lot of them can't program either....]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370885]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Tue, 12 Oct 2010 09:07:53 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Not what you said? Perhaps but its what you typed]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370789]]></link>
        <description><![CDATA[In your rpely your very last line reads and I am quoting from your own reply, &quot;Everytime someone recommends learning relational databases with access, I cringe&quot;.So perhpas you did not say it but you included it in your post and if it was a quote from someone else and not yoru own then it was not clear in your reply.S0 NO, we will not label that an OOPs. I think you also may have misunderstood my point which wasn't to be critcial of you but to merely point out the revrse scenario.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370789]]></guid>
        <dc:creator><![CDATA[BlueCollarCritic]]></dc:creator>
        <pubDate>Tue, 12 Oct 2010 07:44:42 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[A key is a key]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370689]]></link>
        <description><![CDATA[If the database implements any kind of constraint that prevents duplicate values in a table then that is by definition an implementation of a key. Whether an index is involved or not is just an implementation detail.A primary key is just a candidate key and does not mean anything different from any other candidate key. If the author really means &quot;minimise the use of business data in foreign key references&quot; then it would be better to say that instead of making vague and arbitrary generalisations about keys.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370689]]></guid>
        <dc:creator><![CDATA[dportas]]></dc:creator>
        <pubDate>Tue, 12 Oct 2010 05:36:57 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Not what I said was it? Also I'm competent at both.]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370443]]></link>
        <description><![CDATA[Shall we mark that down as an oops?]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370443]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 14:25:36 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[You cringe at the thought of learning SQL?]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370308]]></link>
        <description><![CDATA[Well then thats the problem.  Look at it this way what if DBA types had to do develpment work and an experienced OOP developer posted the comment that the SQL people should take the time to learn how to use/do OOP properly and the comments from the SQL people were &quot;I cringe whenever some one says to learn OOP&quot;?]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370308]]></guid>
        <dc:creator><![CDATA[BlueCollarCritic]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 09:16:14 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Yep numptie]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370300]]></link>
        <description><![CDATA[defined as someone who erroneously believes they know what they are doing.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370300]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 08:30:12 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[True, but]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370289]]></link>
        <description><![CDATA[If half way through the year, having collected loads of data, said student says , that's not my SSN, it's ...Another simple change  your design could have struggled with, is wanting to enter some about a student before they had an SSN.How likely such possibilities are is certainly a consideration, but I like to work on the basis that any change I can anticipate is likely to happen, mainly because I was caught flatfooted last time. ]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370289]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 08:27:21 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[The key itself]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370253]]></link>
        <description><![CDATA[Well, you can call a unique index a natural key if you like, but unless you use it as one, I can't see how it matters.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370253]]></guid>
        <dc:creator><![CDATA[ssharkins@...]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 06:37:47 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Tony- &quot;Cheap numpties with delusions ..&quot;]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370236]]></link>
        <description><![CDATA[...competence.  Very ironic you say that. That cheap numptie..well, they were (and still is) the MIS director for the college. And as he had told me, because he was in his current position, he was a system analysis. Ummm...yea.    ]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370236]]></guid>
        <dc:creator><![CDATA[RayJeff]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 06:30:05 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Primary/natural keys depend on situation...]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370235]]></link>
        <description><![CDATA[I tend to think that depending on the situation, for lack of a better word...depending on what the natural value in that specific table, then using a natural key/value as a primary may work. For the database I developed, even though I used the Autonumber as a primary key in some tables, I used the SSN/Social Security Numbers for mainly all of the tables. The reason why is because of the users of the database. The database held data on students who were planning working on an Education degree, students who were formally admitted into the Education degree program and the teachers who graduated from the Education program and are teachers in the field.  Because the college is a very small liberal arts college, the faculty take on the hands-on approach. They make their business to know each student. With the students being known on a first name basis, any kind of information searching would be based on knowing the name. And with me working in the division and also conducted various training sessions with potential students going into the program, I knew them by name as well.  Now, using a student's name as a natural key would obviously work in on table, but can't be used in other tables that are referencing other sets of data. Hence, using the only type of data that uniquely references a student-their SSN. In the case of this database, the Autonumber was a meaningless  value/key. it was just used to number each record.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370235]]></guid>
        <dc:creator><![CDATA[RayJeff]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 06:26:13 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[That would be my take too]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370169]]></link>
        <description><![CDATA[It's one of the crosses we have to bear. Cheap numpties with delusions of competence.You'd think after a while, businesses would learn a lesson and stop employing numpties to design it wrong and then professionals for the horrendous bodges to make it work. But what do we know we are just propeller heads.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370169]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Mon, 11 Oct 2010 02:39:08 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[The answer to your question is...]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370039]]></link>
        <description><![CDATA[BOTH. He neither understood the data nor (and) understood its purpose. And I'm not saying this because of the fact that I hated working with him anyway   And I'm sure he didn't test the queries before giving them to me. I know because the database was on one of the college's servers. The only time I did any work with it (the 2nd database) was when I updated the data from the 1st database (the one I designed) nightly before leaving work. I would check the timestamping to see for the tables and queries and usually the last timestamp would be from me from the night before or if I did something that day.The only time the IT guy had anytime of contact with the data or the faculty was through me when we had our &quot;weekly meetings&quot;. I did all of the work...correction; I DID all the work. All of the system analysis; all of the interviews with the faculty, of not just within my division, but with the 4 other divisions as well, since the database needed the data of the other academic programs  outside of Education. I did all of the grunt work. Already had a working database for him to use to create  his version. Mind you, because of developing a database of that size and importance was something I never done before, I always was working with consultants that was provided by my supervisor. Consultants who either had experience working with schools goi9ng through the accreditation process and actual database specialists who developed similar databases for the schools they are employed with for the accreditation. Plus, I was getting the databases (mine and the other one) peer reviewed by other database specialists.  And without fail, when the first database was compared to the second, everyone said that the second was very poorly designed. And not to say that the one I designed was perfect, but under the circumstance (me not having enough time to before the accreditation date), the database was fine. All and all, it all comes down to me being able to pull off designing a working database that got the job done within a very short period of time, when the IT guy had 3 years before I was hired for my job to do all of the analysis; to get an understanding of the data that was needed to go into the database.]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3370039]]></guid>
        <dc:creator><![CDATA[RayJeff]]></dc:creator>
        <pubDate>Sun, 10 Oct 2010 16:37:50 -0700</pubDate>
    </item>
             

    <item>
        <title><![CDATA[Did he misunderstand the data]]></title>
        <link><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3369844]]></link>
        <description><![CDATA[or it's purpose?If a query takes hours to develop, (as opposed to run, which might the result of other more necessary design compromises), someone forgot why the database existed in the first place.To use...]]></description>
        <guid><![CDATA[http://www.techrepublic.com/forum/discussions/102-336750-3369844]]></guid>
        <dc:creator><![CDATA[Tony Hopkinson]]></dc:creator>
        <pubDate>Sat, 09 Oct 2010 05:04:20 -0700</pubDate>
    </item>
    </channel>
</rss>

