<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Meaningless Keys</title>
	<atom:link href="http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/</link>
	<description>Just another Oracle weblog</description>
	<lastBuildDate>Mon, 20 May 2013 17:10:14 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Primary, Composite, and Surrogate Keys &#124; David Hogue&#039;s Blog</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-42203</link>
		<dc:creator><![CDATA[Primary, Composite, and Surrogate Keys &#124; David Hogue&#039;s Blog]]></dc:creator>
		<pubDate>Thu, 27 Oct 2011 23:52:56 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-42203</guid>
		<description><![CDATA[[...] Meaningless Keys keys, more keys and nothing but keys&#8230; Primary Keyvil, Part I (checkout parts 2 and 3 also) Composite keys are evil Surrogate Key != Primary Key [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Meaningless Keys keys, more keys and nothing but keys&#8230; Primary Keyvil, Part I (checkout parts 2 and 3 also) Composite keys are evil Surrogate Key != Primary Key [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rudi Kristanto</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-32844</link>
		<dc:creator><![CDATA[Rudi Kristanto]]></dc:creator>
		<pubDate>Mon, 27 Apr 2009 00:39:53 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-32844</guid>
		<description><![CDATA[And the solution of changing clustering factor (describe above as alternative pragmatic solution) become useless therefore overridden by setting optimizer_index_cost_adj parameter.]]></description>
		<content:encoded><![CDATA[<p>And the solution of changing clustering factor (describe above as alternative pragmatic solution) become useless therefore overridden by setting optimizer_index_cost_adj parameter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe Coffey</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-25565</link>
		<dc:creator><![CDATA[Joe Coffey]]></dc:creator>
		<pubDate>Thu, 29 Nov 2007 00:23:14 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-25565</guid>
		<description><![CDATA[Pierre / All - 

That is something that I have been wondering about recently - how other packages handle this.  My context is Siebel.  Although it has a concept of user keys - and generally enforces uniqueness with unique indexes - it uses a field called row_id on every table.  row_id is used for all foreign keys on other tables and has its uniqueness enforced with unique indexes as well.   (If you&#039;re following along in a data model, you will actually see a second field here - conflict_id - that only comes into play with remote database synchronization - ignore it for this discussion.)

I believe that this is generally because what the package designer may have assumed to be unique is not necessarily the case for all customers that will use the software.  Even the user key columns frequently are populated with what I would consider a meaningless key - such as a customer identifier.

Indeed - I offer that much of what folks may believe is meaningful data is in fact no different than the &quot;meaningless keys&quot; that Jonathan was referring to.  When we want to identify a computer monitor or other expensive piece of equipment, we have to have some way to describe it - so we invent something called a serial number.  I suppose that we could also identify it by it&#039;s model #, product plant, production line, production date, and a number representing that it was the N&#039;th one of that model produced at that plant on that line on that date - but no one does that do they?  Everyone assigns a serial number and puts it on a sticker on the back.  How is that really any different from from the meaningless keys being discussed here?  The only difference is that we tell people about it and use it in business processes.  Same thing for customer ids...  

So - with regards to SAP and other packages (this is not to be argumentative - I genuinely want to know):
1.  Are you saying that they don&#039;t use an artificial thing like row_id in Siebel?
2.  Do they use things like serial #&#039;s and customer id&#039;s that I suggest are really &quot;meaningless&quot;
3.  How do they handle data that does not have a generally accepted id - but a very extensive (or possibly non existent!) key otherwise - such as address?  

Siebel handles the user key for address in an &quot;interesting&quot; manner that sometimes leads to issues - it concatenates several fields, truncates to 100 characters, never updates that field and hopes for the best...  Larger implementations have had to address this issue.  It is common for billing and other type of applications of a national scale to generate a &quot;house ID&quot; or something similar - again something that I liken to a meaningless key.

By the way - Jonathan&#039;s condemnation of having to traverse levels in the data model doesn&#039;t apply in very many cases in practice with Siebel.  Where it does, they have usually already denormalized the data.]]></description>
		<content:encoded><![CDATA[<p>Pierre / All &#8211; </p>
<p>That is something that I have been wondering about recently &#8211; how other packages handle this.  My context is Siebel.  Although it has a concept of user keys &#8211; and generally enforces uniqueness with unique indexes &#8211; it uses a field called row_id on every table.  row_id is used for all foreign keys on other tables and has its uniqueness enforced with unique indexes as well.   (If you&#8217;re following along in a data model, you will actually see a second field here &#8211; conflict_id &#8211; that only comes into play with remote database synchronization &#8211; ignore it for this discussion.)</p>
<p>I believe that this is generally because what the package designer may have assumed to be unique is not necessarily the case for all customers that will use the software.  Even the user key columns frequently are populated with what I would consider a meaningless key &#8211; such as a customer identifier.</p>
<p>Indeed &#8211; I offer that much of what folks may believe is meaningful data is in fact no different than the &#8220;meaningless keys&#8221; that Jonathan was referring to.  When we want to identify a computer monitor or other expensive piece of equipment, we have to have some way to describe it &#8211; so we invent something called a serial number.  I suppose that we could also identify it by it&#8217;s model #, product plant, production line, production date, and a number representing that it was the N&#8217;th one of that model produced at that plant on that line on that date &#8211; but no one does that do they?  Everyone assigns a serial number and puts it on a sticker on the back.  How is that really any different from from the meaningless keys being discussed here?  The only difference is that we tell people about it and use it in business processes.  Same thing for customer ids&#8230;  </p>
<p>So &#8211; with regards to SAP and other packages (this is not to be argumentative &#8211; I genuinely want to know):<br />
1.  Are you saying that they don&#8217;t use an artificial thing like row_id in Siebel?<br />
2.  Do they use things like serial #&#8217;s and customer id&#8217;s that I suggest are really &#8220;meaningless&#8221;<br />
3.  How do they handle data that does not have a generally accepted id &#8211; but a very extensive (or possibly non existent!) key otherwise &#8211; such as address?  </p>
<p>Siebel handles the user key for address in an &#8220;interesting&#8221; manner that sometimes leads to issues &#8211; it concatenates several fields, truncates to 100 characters, never updates that field and hopes for the best&#8230;  Larger implementations have had to address this issue.  It is common for billing and other type of applications of a national scale to generate a &#8220;house ID&#8221; or something similar &#8211; again something that I liken to a meaningless key.</p>
<p>By the way &#8211; Jonathan&#8217;s condemnation of having to traverse levels in the data model doesn&#8217;t apply in very many cases in practice with Siebel.  Where it does, they have usually already denormalized the data.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pierre Cote</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-25536</link>
		<dc:creator><![CDATA[Pierre Cote]]></dc:creator>
		<pubDate>Wed, 28 Nov 2007 15:33:10 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-25536</guid>
		<description><![CDATA[Noons, you&#039;re wrong by saying :
Fact is: there is not a SINGLE successful commercial application design in the market that has made use of meaningful keys. Not one! They all, without exception, use the other kind. And for a very good reason.
SAP uses meningful keys and I THINK that they are successful.]]></description>
		<content:encoded><![CDATA[<p>Noons, you&#8217;re wrong by saying :<br />
Fact is: there is not a SINGLE successful commercial application design in the market that has made use of meaningful keys. Not one! They all, without exception, use the other kind. And for a very good reason.<br />
SAP uses meningful keys and I THINK that they are successful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tharg</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-22586</link>
		<dc:creator><![CDATA[Tharg]]></dc:creator>
		<pubDate>Tue, 16 Oct 2007 19:25:45 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-22586</guid>
		<description><![CDATA[I can&#039;t resist throwing in my three hap&#039;orth.

I resolutely come down on the side of meaningless keys generated by sequences, but not for technical reasons.

Having inherited a total disaster of a db, which was a migration from an equally disastrous sql server db, I had to deal with the beast.  Documentation was non-existent, and so I arbitrarily added an &#039;_ID&#039; PK to every table, across the board.  Because I knew that I didn&#039;t know, what this achieved was to definitively eliminate uncertainty about keys, forever.  Time and again, this has paid dividends, when we have unearthed information which shows that the supposedly &#039;natural&#039; keys were based on flawed assumptions and designs.  If you&#039;re in uncertain undocumented hell, always go for surrogacy.

Second, our users have just decided that they must be able to split the db into six, work on each section, and then bolt it back together again.  Using the standard trick of juggling sequence starts and increments to avoid pk/fk collisions, means that I can do this easily.  I&#039;d love to see someone code that up with natural keys.

Once again, the best protection against uncertainty and lunatic user requirements is meaningless drivel pk&#039;s.  Since I&#039;ve never ever seen a fully documented database, can anyone tell me what it&#039;s like to work on one?]]></description>
		<content:encoded><![CDATA[<p>I can&#8217;t resist throwing in my three hap&#8217;orth.</p>
<p>I resolutely come down on the side of meaningless keys generated by sequences, but not for technical reasons.</p>
<p>Having inherited a total disaster of a db, which was a migration from an equally disastrous sql server db, I had to deal with the beast.  Documentation was non-existent, and so I arbitrarily added an &#8216;_ID&#8217; PK to every table, across the board.  Because I knew that I didn&#8217;t know, what this achieved was to definitively eliminate uncertainty about keys, forever.  Time and again, this has paid dividends, when we have unearthed information which shows that the supposedly &#8216;natural&#8217; keys were based on flawed assumptions and designs.  If you&#8217;re in uncertain undocumented hell, always go for surrogacy.</p>
<p>Second, our users have just decided that they must be able to split the db into six, work on each section, and then bolt it back together again.  Using the standard trick of juggling sequence starts and increments to avoid pk/fk collisions, means that I can do this easily.  I&#8217;d love to see someone code that up with natural keys.</p>
<p>Once again, the best protection against uncertainty and lunatic user requirements is meaningless drivel pk&#8217;s.  Since I&#8217;ve never ever seen a fully documented database, can anyone tell me what it&#8217;s like to work on one?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Meaningless Foreign Keys &#171; I&#8217;m just a simple DBA on a complex production system</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-20229</link>
		<dc:creator><![CDATA[Meaningless Foreign Keys &#171; I&#8217;m just a simple DBA on a complex production system]]></dc:creator>
		<pubDate>Wed, 05 Sep 2007 01:36:13 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-20229</guid>
		<description><![CDATA[[...] 5th, 2007   Jonathan Lewis wrote an article about Meaningless Keys. It&#8217;s an old article, but I just read it today and I found it very inspiring. So immediately I [...]]]></description>
		<content:encoded><![CDATA[<p>[...] 5th, 2007   Jonathan Lewis wrote an article about Meaningless Keys. It&#8217;s an old article, but I just read it today and I found it very inspiring. So immediately I [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: vorpal.cc/blog &#187; Primary, Composite, and Surrogate Keys</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-4051</link>
		<dc:creator><![CDATA[vorpal.cc/blog &#187; Primary, Composite, and Surrogate Keys]]></dc:creator>
		<pubDate>Sun, 25 Mar 2007 01:05:54 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-4051</guid>
		<description><![CDATA[[...] Meaningless Keys keys, more keys and nothing but keys&#8230; Primary Keyvil, Part I (checkout parts 2 and 3 also) Composite keys are evil Surrogate Key != Primary Key [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Meaningless Keys keys, more keys and nothing but keys&#8230; Primary Keyvil, Part I (checkout parts 2 and 3 also) Composite keys are evil Surrogate Key != Primary Key [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Maarten Vinkhuyzen</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1068</link>
		<dc:creator><![CDATA[Maarten Vinkhuyzen]]></dc:creator>
		<pubDate>Wed, 03 Jan 2007 12:25:56 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1068</guid>
		<description><![CDATA[Everything has its place. 
For fully normalized oltp datamodels i like meaningfull keys. But when I was forced to use them in a datamart where my joints where best performed with star-transformation, I had a problem. Linking the dimensions with multicolumn meaningfull keys just did not work.]]></description>
		<content:encoded><![CDATA[<p>Everything has its place.<br />
For fully normalized oltp datamodels i like meaningfull keys. But when I was forced to use them in a datamart where my joints where best performed with star-transformation, I had a problem. Linking the dimensions with multicolumn meaningfull keys just did not work.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1037</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Tue, 02 Jan 2007 08:55:18 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1037</guid>
		<description><![CDATA[Noons, 
RI means &quot;for every B there must be an A&quot;.  Why should that dictate the &lt;b&gt;access method&lt;/b&gt; used by the optimizer to find the appropriate &quot;a&quot; for each of several million examples of &quot;b&quot; ? It doesn&#039;t; it is necessary to examine (a.o.) the data scatter to decide whether to use a high-precision method millions of times, or a brute-force method once.

I&#039;m not inclined to believe your &quot;Fact is:&quot; statement, having seen a few applications that work reasonably well and don&#039;t follow the &quot;meaningless key&quot; strategy - but it could, of course, depend on you definition of &quot;successful&quot; and &quot;commercial&quot;. I recall a conversation I had with the head of marketing of the world&#039;s most popular application in field X (name withheld to avoid easy idenfitication of product). It went like this:

	&lt;i&gt;   &quot;How come this is the most succesful application in the business, the design is appalling and the performance is abysmal&quot;.&lt;/i&gt;
&lt;i&gt;   &quot;Yes, but you should see the opposition&quot;.&lt;/i&gt;

But even if your statement were true, it would still be based on a logical error.  Even if every currently successful commercial application used meaningless keys that wouldn&#039;t mean they were successful &lt;b&gt;because&lt;/b&gt; they used meaningless keys - think Betamax; and being &lt;em&gt;&quot;commercially successful&quot;&lt;/em&gt; doesn&#039;t mean they should be taken as role-models for an in-house development.

The &quot;disk is cheap&quot; mantra is, I agree, almost invariably a hand-waving exercise designed to distract attention from bad design and worse progamming. But in my experience it&#039;s not usually the use of real keys that creates the demand for more space.
]]></description>
		<content:encoded><![CDATA[<p>Noons,<br />
RI means &#8220;for every B there must be an A&#8221;.  Why should that dictate the <b>access method</b> used by the optimizer to find the appropriate &#8220;a&#8221; for each of several million examples of &#8220;b&#8221; ? It doesn&#8217;t; it is necessary to examine (a.o.) the data scatter to decide whether to use a high-precision method millions of times, or a brute-force method once.</p>
<p>I&#8217;m not inclined to believe your &#8220;Fact is:&#8221; statement, having seen a few applications that work reasonably well and don&#8217;t follow the &#8220;meaningless key&#8221; strategy &#8211; but it could, of course, depend on you definition of &#8220;successful&#8221; and &#8220;commercial&#8221;. I recall a conversation I had with the head of marketing of the world&#8217;s most popular application in field X (name withheld to avoid easy idenfitication of product). It went like this:</p>
<p>	<i>   &#8220;How come this is the most succesful application in the business, the design is appalling and the performance is abysmal&#8221;.</i><br />
<i>   &#8220;Yes, but you should see the opposition&#8221;.</i></p>
<p>But even if your statement were true, it would still be based on a logical error.  Even if every currently successful commercial application used meaningless keys that wouldn&#8217;t mean they were successful <b>because</b> they used meaningless keys &#8211; think Betamax; and being <em>&#8220;commercially successful&#8221;</em> doesn&#8217;t mean they should be taken as role-models for an in-house development.</p>
<p>The &#8220;disk is cheap&#8221; mantra is, I agree, almost invariably a hand-waving exercise designed to distract attention from bad design and worse progamming. But in my experience it&#8217;s not usually the use of real keys that creates the demand for more space.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noons</title>
		<link>http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1025</link>
		<dc:creator><![CDATA[Noons]]></dc:creator>
		<pubDate>Mon, 01 Jan 2007 23:54:13 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/2006/12/29/meaningless-keys/#comment-1025</guid>
		<description><![CDATA[The problem is really with the optimizer, not the meaningful keys.
If it did a complete job it would recognize the fact that there is a RI relationship between the tables and optimize for that instead of faffing around on the nature of indexes and their clustering factors.

Meaningful keys are very nice in theory but cause incredible space overhead in any practical application with any data volumes beyond a few thousand and any keys longer than a coupla bytes.  And as previously noted, better never have to modify a value in a key: the cascading is atrocious...

Before anyone mentions the ubiquitous &quot;disk is cheap&quot; mantra: oh no, it most definitely is not.

Fact is: there is not a SINGLE successful commercial application design in the market that has made use of meaningful keys.  Not one! They all, without exception, use the other kind.  And for a very good reason.]]></description>
		<content:encoded><![CDATA[<p>The problem is really with the optimizer, not the meaningful keys.<br />
If it did a complete job it would recognize the fact that there is a RI relationship between the tables and optimize for that instead of faffing around on the nature of indexes and their clustering factors.</p>
<p>Meaningful keys are very nice in theory but cause incredible space overhead in any practical application with any data volumes beyond a few thousand and any keys longer than a coupla bytes.  And as previously noted, better never have to modify a value in a key: the cascading is atrocious&#8230;</p>
<p>Before anyone mentions the ubiquitous &#8220;disk is cheap&#8221; mantra: oh no, it most definitely is not.</p>
<p>Fact is: there is not a SINGLE successful commercial application design in the market that has made use of meaningful keys.  Not one! They all, without exception, use the other kind.  And for a very good reason.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
