<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www2.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>Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx</link><description>These days, relational database management systems (RDBMSs) like Microsoft SQL Server and Oracle are the primary engines of information systems everywhere, particularly for enterprise computing systems and web applications. Though RDBMSs are now common</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45045</link><pubDate>Thu, 06 Sep 2012 11:43:25 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45045</guid><dc:creator>Marc Shapiro</dc:creator><description>&lt;p&gt;When you write &amp;quot;Tables of independent data can be linked, or related, to one another if they each have columns of data that represent the same data value, called keys.&amp;quot; you make it sound like the word &amp;quot;relation&amp;quot; in &amp;quot;Relational Databases&amp;quot; has to do with foreign keys and joins between multiple tables. &amp;nbsp;But it doesn't. &amp;nbsp;It has to do with the relationship between the columns of a single table. &amp;nbsp;Each table represents a relation. &amp;nbsp;Many useful relations are actually functions (in the mathematical sense of both), which are represented by table with a primary key. &amp;nbsp;The domain (input) of the function is the primary key columns; the range (output) is the other columns. &amp;nbsp;Joins are like composition of functions (or of relations).&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45046</link><pubDate>Thu, 06 Sep 2012 12:36:27 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45046</guid><dc:creator>KKline</dc:creator><description>&lt;p&gt;Fantastic point to make, Marc. I may have over emphasized the aspect of relationships between tables and under emphasized the aspect of the relationship between columns within a table.&lt;/p&gt;
&lt;p&gt;The columns within the table must indeed be directly related to the primary key. &amp;nbsp;As the old saying goes &amp;quot;Every column in the table must depend upon the key, the whole key, and nothing but the key. So help me Codd&amp;quot;. &amp;nbsp;;^)&lt;/p&gt;
&lt;p&gt;-Kev&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45049</link><pubDate>Thu, 06 Sep 2012 14:07:55 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45049</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;So here's the $10,000,000 question: Is SQL Server a &amp;quot;relational&amp;quot; database product?&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45050</link><pubDate>Thu, 06 Sep 2012 14:24:12 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45050</guid><dc:creator>mjswart</dc:creator><description>&lt;p&gt;It looks like one, it smells like one. I think for any reason that matters, yes. &lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45055</link><pubDate>Thu, 06 Sep 2012 17:40:04 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45055</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;But does it TASTE like a relational DBMS??&lt;/p&gt;
&lt;p&gt;I am not so sure it looks or smells like one. And maybe that doesn't matter when it comes down to it; not like I don't live and breathe in the product every day, and usually get lots of work done with it. But it is interesting to think about at any rate.&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45060</link><pubDate>Thu, 06 Sep 2012 18:39:02 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45060</guid><dc:creator>KKline</dc:creator><description>&lt;p&gt;Look, smell, and taste?!? Ewww - too many senses involved in what should be a non-sensual experience!&lt;/p&gt;
&lt;p&gt;But it's a great question. &amp;nbsp;Certainly, all of the major RDBMSes support the 12 Principles by degrees. &amp;nbsp;Access, for example, probably does an even poorer job than SQL Server does. &amp;nbsp;Otoh, I believe that SQL Server passes muster reasonably well, say an A-, if not a perfect score of 100%.&lt;/p&gt;
&lt;p&gt;And, ironically, most all of the core database engine enhancements that have come out in the past few releases are decidedly NOT relational. &amp;nbsp;I'd point to SSAS, SSIS, ColumnStore, etc as features that go way outside of the domain of relational databases. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;That's another reason why it's much harder to know everything about SQL Server than in the good ol' days. &amp;nbsp;Many parts of the platform are governed by entirely different principles than those of the relatoinal approach. &amp;nbsp;Star or snowflake schema? &amp;nbsp;Sorry - not something in my experience. &amp;nbsp;Know what I mean?&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45065</link><pubDate>Thu, 06 Sep 2012 23:18:22 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45065</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;Hi Kevin,&lt;/p&gt;
&lt;p&gt;Which &amp;quot;major&amp;quot; RDBMSs are you referring to? I can't think of any.&lt;/p&gt;
&lt;p&gt;As far as I'm concerned SQL Server -- and every other SQL DBMS -- gets an F when it comes to being relational. As alluded to by Marc, the Relational Model is so named because it deals with relations. A relation is a set, and SQL is not set-based; it's bag-based. So simply put no SQL DBMS is, or can be, a Relational DBMS.&lt;/p&gt;
&lt;p&gt;In a truly relational DBMS the following table could not be created:&lt;/p&gt;
&lt;p&gt;CREATE TABLE xyz (a INT NOT NULL, b INT NOT NULL);&lt;/p&gt;
&lt;p&gt;Why? Because of the Guaranteed Access Rule (rule #2): All data must be accessible via a primary key. But in this case we have no primary key, so that rule is 100% violated.&lt;/p&gt;
&lt;p&gt;Another important aspect of the Relational Model is the idea of closure. Basically, any operation on a relation must produces another relation. But in SQL we can easily violate that. Consider the following table, which has a primary key (so it can at least be called a relation):&lt;/p&gt;
&lt;p&gt;CREATE TABLE xyz (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b));&lt;/p&gt;
&lt;p&gt;Now let's insert some rows...&lt;/p&gt;
&lt;p&gt;INSERT xyz&lt;/p&gt;
&lt;p&gt;SELECT 1, 2&lt;/p&gt;
&lt;p&gt;UNION ALL&lt;/p&gt;
&lt;p&gt;SELECT 1, 3;&lt;/p&gt;
&lt;p&gt;... and now we run the following query:&lt;/p&gt;
&lt;p&gt;SELECT&lt;/p&gt;
&lt;p&gt; &amp;nbsp;a&lt;/p&gt;
&lt;p&gt;FROM xyz;&lt;/p&gt;
&lt;p&gt;... And we've just violated relational closure, because the result of our operation is a bag and is therefore not a relation. Oops.&lt;/p&gt;
&lt;p&gt;Back to Codd's rules, SQL DBMSs do a decent job with most of the rest of the rules, although it can be argued that they don't tend to do very well when it comes to logical or physical data independence. But a full discussion on that topic is a bit beyond what I feel like typing into this comment box.&lt;/p&gt;
&lt;p&gt;Finally back to Michael's point, yet again: Does any of this matter? Perhaps not. We all make our living working with SQL DBMSs. Whether or not these products are actually relational databases -- or something else entirely -- is essentially an academic question and won't change any of our lives. But it does make for an interesting conversation.&lt;/p&gt;
&lt;p&gt;--Adam&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45089</link><pubDate>Sat, 08 Sep 2012 13:13:12 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45089</guid><dc:creator>Robert Young</dc:creator><description>&lt;p&gt;For reasons known (ultimately) to the Scions of Armonk, Codd was removed from the development of the Data Access Language (first called SEQUEL, for Structured English QUEry Language, thence SQL for murky reasons). &amp;nbsp;Chamberlin, an IMS cowboy and no language or math theorist, got control. &amp;nbsp;That's why SQL is the bastard language that it is.&lt;/p&gt;
&lt;p&gt;Codd rarely, if ever, used the column/table metaphor. &amp;nbsp;It's about relations. &amp;nbsp;Read Date's Eighth Edition for the closest thing to pure Codd. &amp;nbsp;Date disagrees with Codd on some points.&lt;/p&gt;
&lt;p&gt;As a smart person once said (and I've long since lost the cite): &amp;nbsp;&amp;quot;there are more hierarchies in code than in the real world&amp;quot;. &amp;nbsp;The xml zealots managed to convince the feeble minded that hierarchy is somehow the &amp;quot;natural&amp;quot; data structure of the world. &amp;nbsp;Not even org charts are hierarchies. &amp;nbsp;Yes, they are simple to create, but a devil to modify. &amp;nbsp;Once you make it, the &amp;quot;relations&amp;quot; are hard coded. &amp;nbsp;Talk to an IMS DBA about that. &amp;nbsp;A RM structure is more work to specify, but if primary keys are true, then adding non-key data to a table or a new related table is trivial.&lt;/p&gt;
&lt;p&gt;As to PK enforcement: &amp;nbsp;a legacy of COBOL/IMS at the time. &amp;nbsp;It is not a big deal to write an engine which requires PKs on all tables. &amp;nbsp;Coders didn't, and don't, like the restriction. &amp;nbsp;So RDBMSs don't implement it.&lt;/p&gt;
&lt;p&gt;With the rise of multi-processor/core/thread/SSD machines that cost about as much as a Starbucks Latte, [de|un]normalized schemas will soon disappear, at least for new development. &amp;nbsp;The smaller footprint of a 5NF database is so much smaller and robust, that even the COBava coders will be brought to heal. &amp;nbsp;Coupled with The Cloud meme (just a New Age version of The Glass House mainframe central computer), where client side transaction control makes even less sense, we'll see the return to the client being just a 3270/VT-220. &amp;nbsp;A dumb terminal. &amp;nbsp;Ah the irony of it all.&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45099</link><pubDate>Mon, 10 Sep 2012 00:08:49 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45099</guid><dc:creator>Davos</dc:creator><description>&lt;p&gt;Pure Codd, sounds tasty.&lt;/p&gt;
&lt;p&gt;Adam, I agree with the first violation about a table created with a Primary Key, but not the second example.&lt;/p&gt;
&lt;p&gt;&amp;quot;And we've just violated relational closure, because the result of our operation is a bag and is therefore not a relation.&amp;quot;&lt;/p&gt;
&lt;p&gt;The returned results are a bag but the stored data structure is not and a select is not an 'operation' that changes that. I do get the point though, the rules have certainly been relaxed in practice, but that's just about being pragmatic as opposed to dogmatic. &lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45100</link><pubDate>Mon, 10 Sep 2012 04:18:17 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45100</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;Davos:&lt;/p&gt;
&lt;p&gt;You seem to be missing the point of closure: all operations take as their input a relation, and in turn output a relation, thereby allowing operations to be stacked or composed in any possible form.&lt;/p&gt;
&lt;p&gt;SELECT *&lt;/p&gt;
&lt;p&gt;FROM Table&lt;/p&gt;
&lt;p&gt;--&amp;gt;&lt;/p&gt;
&lt;p&gt;SELECT *&lt;/p&gt;
&lt;p&gt;FROM &lt;/p&gt;
&lt;p&gt;(&lt;/p&gt;
&lt;p&gt; &amp;nbsp;SELECT *&lt;/p&gt;
&lt;p&gt; &amp;nbsp;FROM SomeOtherTable&lt;/p&gt;
&lt;p&gt;) AS x&lt;/p&gt;
&lt;p&gt;Assuming that SQL were in fact relational, if the inner table expression in this example failed to return a valid relation the entire system would break down. (Guaranteed Access applies and means that any tuple in [x] should be able to be referenced via a primary key.) It doesn't matter whether or not the results are "stored."&lt;/p&gt;
&lt;p&gt;Relaxing these restrictions for SQL was not in the least bit pragmatic. I can't count the number of occasions over the course of my career on which I've found serious data integrity problems or code bugs due to duplicate key scenarios. I shudder to think of the amount of money and time that has been wasted due to this decision.&lt;/p&gt;
&lt;p&gt;--Adam&lt;/p&gt;</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45115</link><pubDate>Mon, 10 Sep 2012 17:05:42 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45115</guid><dc:creator>Luke Jian</dc:creator><description>&lt;p&gt;I agree with Adam here.&lt;/p&gt;
&lt;p&gt;SQL Server does not comply with all 13 rules stated by by Codd to check if an DBMS is truly relational. But then again none of the major DBMSs are &amp;nbsp;compliant either because the rules are too strict now and id does not give the flexibility that the market needs. I would grade SQL server a C- on the Codd Rule.&lt;/p&gt;
&lt;p&gt;AFAIK the only true RDBMS that would pass the rules with A would be Dataphor according to Wikipedia: &lt;a rel="nofollow" target="_new" href="http://en.wikipedia.org/wiki/Codd%27s_12_rules"&gt;http://en.wikipedia.org/wiki/Codd%27s_12_rules&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45116</link><pubDate>Mon, 10 Sep 2012 17:57:02 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45116</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;Luke,&lt;/p&gt;
&lt;p&gt;Why would complying with the rules make the systems any less flexible? &lt;/p&gt;
&lt;p&gt;Put another way: What benefit do you get from duplicate rows that you couldn't get from, e.g., storing a single copy of the row and an integer (&amp;quot;count&amp;quot; or similar)? &lt;/p&gt;
&lt;p&gt;Consider: If you go to the grocery store and buy 15 apples do you want 15 lines on your receipt, or a single line that indicates that you purchased 15 apples?&lt;/p&gt;
&lt;p&gt;A system built around constraints that force people to make better design decisions sounds restrictive in theory but I can think of no reasonable design that it would hinder. (Unreasonable designs, like &amp;quot;we need to store all 15 apples separately for audit purposes that I think we might have, maybe, sometime in the future&amp;quot; do not count.)&lt;/p&gt;
&lt;p&gt;--Adam&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45120</link><pubDate>Mon, 10 Sep 2012 19:57:37 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45120</guid><dc:creator>Bret Lowery</dc:creator><description>&lt;p&gt;I work with SQL Server... at Yahoo! I also work with columnar stores like ParAccel, appliances like Netezza, and NoSQL environs like Aerospike (formerly Citrusleaf). The right tool for the right job.&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45121</link><pubDate>Mon, 10 Sep 2012 20:02:19 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45121</guid><dc:creator>Andy Irving</dc:creator><description>&lt;p&gt;Any RDBMS that supports SQL isn't relational - no NULLs in the the relational model! And as Adam points out, you can create a table with no PK.&lt;/p&gt;
&lt;p&gt;What's interesting though is that there's no readon why you couldn't stick a proper relation interface (something like Date &amp;amp; Darwin's tutorial D, or even something like LINQ) on top of the storage engine and query optimiser.&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45123</link><pubDate>Mon, 10 Sep 2012 21:12:34 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45123</guid><dc:creator>Luke Jian</dc:creator><description>&lt;p&gt;I agree with your points. &lt;/p&gt;
&lt;p&gt;Actually the storage engine can do what you are saying (uniquely identify a row internally), its just not exposed to the users (like ROWID in Oracle). &lt;/p&gt;
&lt;p&gt;When I was talking about flexibility I didn't have this rule in mind (e.g. system must use its relational facilities (exclusively) to manage the database). &lt;/p&gt;
&lt;p&gt;There are a few others that would not make sense today,but overall I understand and share your pains! &lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45132</link><pubDate>Tue, 11 Sep 2012 02:17:58 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45132</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;Andy: SQL's implementation of NULL has been the subject of a lot of criticism due to 3VL, but the idea of a missing-value token is definitely required in order to support semijoins, even if the schema doesn't use them anywhere. I don't think you can divorce it from the relational model unless you force everything to be normalized all the way to DKNF (at which point you could create domain-specific missing-value tokens). And then, again, you'd have the issue of closure and you'd have to force any intermediate or output relations to be in DKNF. Probably not especially feasible.&lt;/p&gt;
&lt;p&gt;Luke: The storage engine can do that, but exposing it would violate the rule about physical independence. &lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45135</link><pubDate>Tue, 11 Sep 2012 12:06:46 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45135</guid><dc:creator>dvraggs</dc:creator><description>&lt;p&gt;Should the tool be the whole system? The tool used to be a means to create a RDBMS. Using these tools and following the rules you create a RDBMS, not incompetent people being protected by a tool. You can create a RDBMS (key word System) using SQL Server, but it will not hold your hand. People + tool(s) create a RDBMS.&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45138</link><pubDate>Tue, 11 Sep 2012 13:48:33 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45138</guid><dc:creator>Adam Machanic</dc:creator><description>&lt;p&gt;dvraggs: &lt;/p&gt;
&lt;p&gt;A DBMS is a tool used to create a database. A SQL DBMS does not create an RDBMS, no matter which people are involved. At the end of the day you have a database on a nonrelational platform and there's no way that's going to become relational. The platform itself simply does not support the required base set of rules.&lt;/p&gt;
&lt;p&gt;Anyway, arguing that people should write everything themselves is a very slippery slope. Taking your logic one step further we should eliminate all constraints and DRI. People can hand-code that stuff. Oh, and we should eliminate tables too. People can write data structures in a 4GL pretty easily can't they? Don't need a query optimizer, because it's all just algorithms and people can learn those. And I guess I don't need a storage engine, because I am pretty good with ISAM. And I'll stop working in C#, because I can write my own garbage collection logic and libraries in C++...&lt;/p&gt;
&lt;p&gt;You get the point, I hope. We create high level abstractions and rules to protect ourselves from reinventing problems and so that we can focus on more interesting tasks.&lt;/p&gt;
&lt;p&gt;--Adam&lt;/p&gt;</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45144</link><pubDate>Tue, 11 Sep 2012 18:55:25 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45144</guid><dc:creator>KKline</dc:creator><description>&lt;p&gt;Adam, When you cite that no SQL dbms supports rule #2, &amp;quot;Data must be logically accessible by table, primary key, and column.&amp;quot; you provide an &amp;nbsp;example in which you can break rule #2.&lt;/p&gt;
&lt;p&gt;But are these rules, like the famous line from Pirates of the Caribbean, rigid rules or general guidelines? &amp;nbsp;Imo, when a SQL database is able to enforce #2, even though it doesn't specifically require #2 in any and every situation, it passes the test. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;It's a semantic nuance, certainly. &amp;nbsp;And I should go back to the original language to see if it's more clear in dispelling any leeway. &amp;nbsp;But it's enough for me, when a dbms CAN support the rules (even if it allows those self-same rules to be broken under specific conditions), to say that it is indeed a relational database.&lt;/p&gt;
&lt;p&gt;But I'm also a pragmatist and don't really care that much about the purity of the observation of the rules. &amp;nbsp;I'm more interesting in learning about the duplicate key scenarios you mentioned and how to thwart them.&lt;/p&gt;
&lt;p&gt;Luke, great tip on Dataphor! I'm going to check it out just out of curiousity. &amp;nbsp;=^) &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Very interesting comments, everyone!&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45195</link><pubDate>Thu, 13 Sep 2012 19:44:06 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45195</guid><dc:creator>dbdebunker</dc:creator><description>&lt;p&gt;Kevin,&lt;/p&gt;
&lt;p&gt;Your heart is in the right place, but I don't think you identified properly the CORE issues and practical implications of the RM.&lt;/p&gt;
&lt;p&gt;The comments do provide some good clarifications, but still miss some important points.&lt;/p&gt;
&lt;p&gt;I guess this post and its comments is a good target for debunking, for educational purposes.&lt;/p&gt;
&lt;p&gt;FP&lt;/p&gt;
&lt;p&gt;www.dbdebunk.blogspot.com&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45261</link><pubDate>Tue, 18 Sep 2012 15:08:34 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45261</guid><dc:creator>Andy Irving</dc:creator><description>&lt;p&gt;Adam: Yeah. Date &amp;amp; Darwin go further though, with 6NF. some ideas in this paper: &lt;a rel="nofollow" target="_new" href="http://www.dcs.warwick.ac.uk/~hugh/TTM/Missing-info-without-nulls.pdf"&gt;http://www.dcs.warwick.ac.uk/~hugh/TTM/Missing-info-without-nulls.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;personally i'd love a fully relational future, but then i also love functional programming :)&lt;/p&gt;
</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45628</link><pubDate>Wed, 17 Oct 2012 15:39:07 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45628</guid><dc:creator>Erwin Smout</dc:creator><description>&lt;p&gt;Well, I sincerely believe that Oracle and SQL Server and DB2 and Sybase and ... should indeed go the way of punched cards. &amp;nbsp;The sooner the better. &amp;nbsp;Just so long as they are replaced by relational systems.&lt;/p&gt;
&lt;p&gt;And it might have been better if those twelve rules were quoted, instead of paraphrased as heavily as they were.&lt;/p&gt;</description></item><item><title>re: Timewarp: What Is a Relational Database?</title><link>http://www2.sqlblog.com/blogs/kevin_kline/archive/2012/09/05/timewarp-what-is-a-relational-database.aspx#45635</link><pubDate>Wed, 17 Oct 2012 21:26:39 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:45635</guid><dc:creator>Erwin Smout</dc:creator><description>&lt;p&gt;@KKline : I think the only reasonable way to interpret rule 2 is that the DBMS should be such that **IN ALL POSSIBLE CIRCUMSTANCES**, the access is guaranteed. &amp;nbsp;If there exists any circumstance in which this is not the case, then the engine by itself doesn't satisfy the rule.&lt;/p&gt;
&lt;p&gt;Your interpretation of &amp;quot;satisfies the rule if it is possible for the user to set things up such that the rule happens to be satisfied&amp;quot;, makes even for a combination of COBOL+ISAM to satisfy the rule.&lt;/p&gt;</description></item></channel></rss>