Slashdot Mirror


An Alternative to SQL?

Golygydd Max writes "Dave Voorhis from the University of Derbyshire has developed a program incorporating Tutorial D, a language designed to overcome of the shortcomings of SQL, and developed some years ago by Hugh Darwen and Chris Date. Until now, no-one had done anything with it but Voorhis is hoping for wider adoption; although we think it would be like pushing water uphill though." Update: 10/13 12:43 GMT by T : An anonymous reader writes "It's being picky I know, but the university in question is in fact called The University Of Derby, not Derbyshire."

42 of 505 comments (clear)

  1. shortcomings to sql? by Suppafly · · Score: 3, Insightful

    What are the shortcomings to sql? it seems to be able to handle anything you'd need it to do.

    1. Re:shortcomings to sql? by gl4ss · · Score: 3, Insightful

      well.. assembly "seems to handle anything you'd need it to do" so why the need for higher level programming languages?

      probably something along those lines, that it would be easier to do some things and easier to avoid problems.

      --
      world was created 5 seconds before this post as it is.
    2. Re:shortcomings to sql? by lottameez · · Score: 3, Insightful

      SQL sucks. If you need to do anything much beyond a simple query you find yourself buried in the details of that particular db's implementation. (think date handling for example). I don't want, or feel I should need, to be a DBA to get some data out of a data store.

      Joins are a big pain in the butt, and the case statements get so convoluted I feel like I'm writing LISP.

      --
      Yeah? Well I think you're overrated too.
    3. Re:shortcomings to sql? by Fred+IV · · Score: 4, Insightful

      You only need to learn about null comparisons once, and nulls are extremely valuable when you get into eliminating rows from a result sets based on matches from data in other tables.

      Combining a left outer join with a search condition where a primary key is null from the joined table is a quick and dirty way to scrub records where there's a match in the joined table, and would be impossible without the concept of nulls.

    4. Re:shortcomings to sql? by Gilk180 · · Score: 3, Insightful
      If you think joins suck (I don't personally agree, but that's all just opinion), you should be using some other database model. After "data is stored in a table", joins are THE feature of relational databases.

      Maybe try an object-oriented database (I hear ObjectStore is good), or an associative database (BerkeleyDB), or an XML database (Sleepycat has one).

      Relational databases aren't the only game in town, they are just the most popular and therefore:
      • have had the most development time thrown at the DBMSs
      • have the most developers who are proficient.
    5. Re:shortcomings to sql? by gfody · · Score: 3, Insightful

      comparing assembly language to sql?!
      sql doesn't cut it because it's too high level. trying to do anything somewhat complicated in sql leads to headache and turmoil. the big problem is that there is no lower level interface to communicate to your database server with.. all you can do is hand it sql statements and get your results.

      why bother writing a better sql? how about a low level object based api. use whatever language your client is already written in (so long as its oo). fuck learning another busted ass super high level language.. give me objects, methods, exceptions, etc.

      --

      bite my glorious golden ass.
  2. Lotus Domino... by Kenja · · Score: 4, Insightful

    Try using Lotus Domino for a week. You'll be begging to go back to SQL.

    --

    "Have you ever thought about just turning off the TV, sitting down with your kids, and hitting them?"
  3. What's the use? by generalpf · · Score: 4, Insightful

    Is there anything that SQL can't do? I've been using various RDBMS for years and it hasn't come up yet.

    1. Re:What's the use? by treat · · Score: 5, Insightful
      Is there anything that SQL can't do? I've been using various RDBMS for years and it hasn't come up yet.

      Is the sole issue what it can and can't do? what if there was an easier way to express joins? Most queries I write have more joins than actual query. Even though the database already knows the relationships between the tables.

    2. Re:What's the use? by Anonymous Coward · · Score: 3, Insightful
      Have you ever seen a 25 way join or a 30 way UNION?

      Call me crazy, but if you have a 25-way join, don't you think you have bigger problems than your querying language? Maybe the person that is asking for the join needs to change their business processes.

    3. Re:What's the use? by cdc179 · · Score: 3, Insightful

      It's called created views. This way you just access the view in your code.

      Most people lack the suficient skills to program good DB applications. And they don't find anybody with the DB skills to help on the backend.

      This is where most of the issues come into play. Get a DBA that knows what they are doing.

  4. SQL has shortcomings...is this news? by Ars-Fartsica · · Score: 2, Insightful

    SQL also has decades of optimizations in reliable code...no one will be dropping their Oracle license over this.

    1. Re:SQL has shortcomings...is this news? by antifoidulus · · Score: 2, Insightful

      You are right, initially anyway. Anyone who can afford an Oracle license will not drop it, but my bet is that it will be picked up by hobbyists. If it's any good, then it will probably make it into small scale, relatively free standing commercial projects(so as not to disrupt anything that you already have built), if it's still good, then it may get adopted.
      Keep in mind, the definition of "good" will vary from group to group. Hobbyists may want something that is interesting to play with, that will allow them to easily to powerful things, whereas commercial users will be more interested in scalability and reliability.
      This is how ideas are supposed to evolve, unfortunately the "bandwagon" mentality grips a lot of our culture, and people will just jump on whatever the bandwagon of the day is(.com, outsourcing etc) with little regard to whether or not it is beneficial for their organization.

  5. The shortcomings of SQL by mistersooreams · · Score: 5, Insightful

    I use SQL a lot and I agree that has failings. The clumsiness inherent in, say, nested joins is quite amazing when you consider how important databases are in modern industry. This is a consequence of the "near-English"ness that SQL strives for, but that property is also what causes people to adopt SQL in the first place. We'll probably look back at SQL in five years and laugh... but weren't people saying that five years ago?

    1. Re:The shortcomings of SQL by Unordained · · Score: 3, Insightful

      COBOL was(is) also english-like. People liked it. Then they liked it less. But enough had been written in COBOL that the damn thing just won't die, even if you can do the same thing faster in new languages. Learning a language is trouble, converting old programs is trouble, and you don't want to let people forget old languages for fear nobody will be around to maintain those old, unconverted programs...

      SQL will be around for a while still, because it's "good enough" and "already known" and there are lots of "legacy apps using it" and the new stuff is immature. I have trouble convincing people that transactions are important, that joins really should be done in the server, that they shouldn't create attributes named "value1" and "value2" just because they currently only have two, ... convincing them that the language they use is (to be nice) underkill is just not going to happen.

      Sure, I want a new language, I wouldn't mind learning it, heck, I wouldn't mind writing it. But the problem is convincing enough people that what they have isn't good enough.

    2. Re:The shortcomings of SQL by Unordained · · Score: 3, Insightful

      In the case of the owner of my ISP, there's no firing I can do; besides, I like the guy. And yes, web devs as well ... all about simple selects and then post-processing everything in the script ... after all, it works, right?

      In the hacker world, it's not about pretty/good solutions, it's about making a problem go away quickly so you can move on to the next problem. It's all about writing one-time scripts in whatever language you know, not learning another language unless you're bored or can't solve your problem with what you already know ... It's not the environment I'm in, but it's one I run into now and then. It's hard to give these people better tools because nothing is "good" to them, but everything's "good enough". Sure, a drill would be perfect for this, but I only have a hammer -- but I've made do a thousand times before, and I can do it again, I don't need a drill. These are people who do, in fact, get problems solved. They're terribly useful/valuable -- they would just be more valuable if you could give them tools with which they could do the job even faster; but you have to get past that initial annoyance and even having to look at a new tool -- a new tool to add to their already long list of unix commands, scripts in random directories, knowledge of several languages, etc. Firing such a person doesn't get the job done.

  6. dont think so by Anubis350 · · Score: 5, Insightful

    so to overcome the (not really all that many) shortcomings of sql we will all learn how to use something completely new. Yeah, adoption going to be quik and complete........

    --
    "goodbye and hello, as always" ~Prince Corwin, from Zelazny's Amber series
  7. I gotta say ... by Daniel+Dvorkin · · Score: 5, Insightful

    "SQL is sloppy and unpredictable; Tutorial D is a correct relational database language."

    sounds a lot like

    "C is sloppy and unpredictable; Pascal is a correct programming language."

    --
    The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    1. Re:I gotta say ... by Anonymous Coward · · Score: 1, Insightful
      "C is sloppy and unpredictable; Pascal is a correct programming language."

      How about, "A bug in C is almost always a security hole. A bug in Pascal (or most other languages) is only sometimes a security hole."

    2. Re:I gotta say ... by Anonymous Coward · · Score: 1, Insightful

      Too bad one statement is based on relational theory, and the other is just a programming language opinion.

      Too bad programmers decide to talk about DBMSs, when they only know programming.

      Too bad ignorant people mod up posts that have no real content because they are too ignorant to understand the technical content.

    3. Re:I gotta say ... by jcr · · Score: 3, Insightful

      Umm... What's your point?

      C is sloppy and unpredictable, mostly due to the fact that it has neither arrays nor strings, but fools people into believing that it does by presenting pointers as if they were arrays. That flaw alone is responsibile for nearly every buffer-overflow crasher or security exploit I've ever seen. Add dangling pointers and C's non-existent memory management, and you've probably accounted for well over 90% of the flaws in C programs.

      If we wrote networking code in Pascal, Ada, FORTRAN, LISP, Smalltalk, Python, Perl, Java, Ruby, or even most variants of BASIC, we'd never see another buffer-overflow exploit again.

      We use C primarily because we like it, but let's not pretend that it's a well-designed language, please.

      As for SQL, I don't know anyone who actually likes it, we put up with it because that's what the DBMS's we need to use can understand. If Tutorial D can improve my quality of life when I have to deal with a DBMS, I'll give it a good hard look, at least.

      -jcr

      --
      The only title of honor that a tyrant can grant is "Enemy of the State."
  8. I was about to ask the same thing. by Mustang+Matt · · Score: 4, Insightful

    Seems like it can handle just about everything but maybe I'm not thinking outside the box. The biggest limitation is my lack of knowledge about how to do the things I want to do.

    --
    The man who trades freedom for security does not deserve nor will he ever receive either. - Benjamin Franklin
    1. Re:I was about to ask the same thing. by BoomerSooner · · Score: 4, Insightful

      The authors said when you do a query where your float field is null you dont get the instances of null. They say this is a problem but I say bullshit. It's the fault of whatever allowed null to be the value of that field instead of 0.00 or whatever. The data with null didn't magically appear there.

      I agree sql could be better but the more complexity you add the more bullshit code I'll have to figure out what programmers were doing when I'm hired to fix their code. The company I currently work for has stored procedures that are over 4,000,000 lines (total) for report generation. Amazing how difficult it is to debug and work with. Especially since it was done in Transact SQL. I'm probably biased toward PL/SQL because I learned it first but it is so much easier to code in than Transact. (I have about 5-6 years of working in TSQL and about 7-8 in PL/SQL)

    2. Re:I was about to ask the same thing. by Kell_pt · · Score: 2, Insightful

      I think you kinda misunderstood the problem.

      The fact that there CAN be nulls is a showstopper when attempting to think in terms of relational algebra. It's so much simpler when you have a sound foundation of maths underneath - SQL has been so distorted over time that there is AMPLE room for improvement.

      By not allowing nulls you are in fact working in a simpler world, as you do not have "undefined" operations in your query.

      You are right though, in that it's the designers fault if NULLs get there, that's true. But just the fact that it exists forces a whole pletora of mechanisms and distorted concepts to deal with it. It's a poor man's attempt for an "incomplete-data" solution. A real incomplete-data solution must allow for the 3 boolean tests:


      Known - true Known - false Unknown


      Seeing as all comparisons in SQL are just boolean, they "trick" the third state into behaving within boolean parameters. And that's a source for trouble that could be avoided and made a hell of a lot simpler.

      --
      "I don't mind God, it's his fan club I can't stand!" E8
    3. Re:I was about to ask the same thing. by a_ghostwheel · · Score: 3, Insightful

      Pretty much the only reason NULLs so widely used is due to performance implications. Any nullable field can be easily normalized by moving data to separate table with NULL value being represented by absence of the record in the new table. But you will pay significant performance price.

    4. Re:I was about to ask the same thing. by BlackHawk-666 · · Score: 2, Insightful

      How do you represent the missing fields in a LEFT OUTER JOIN, you know, the ones that were implied to be NULL by their abscence. You need something to represent the abscence of data, and if you don't use NULL or other metadata you need to use a program assigned value...and that's even more hassle.

      --
      All those moments will be lost in time, like tears in rain.
    5. Re:I was about to ask the same thing. by EastCoastSurfer · · Score: 5, Insightful

      0.00 != null

      Zero is implying that there is a value there and that it is in fact the number zero. Null would imply that no value ever existed, zero or otherwise.

      In all of my db designs I try to avoid nulls unless absolutely neccessary. A typical situation where nulls are unavoidable would be in an end date field( no end date as of yet). You also usually get nulls back when doing outer joins.

      Remember though that null != 0 != ''. Null is the complete absence of a value.

  9. Worth ditching SQL? by jack's+wasted+liver · · Score: 2, Insightful

    Any language is going to have quirks and inconsistencies between dialects.
    SQL has worked so far but if Tutorial D really is better then bring it on.

    I've gotten over SQL the "short commings" though

  10. Not a replacement language... by ryanmfw · · Score: 5, Insightful

    If you read the article, this isn't about replacing SQL, but more about testing new ideas and languages that could replace SQL. This is better than just saying, "We have a better language. Switch now or be assimilated.", and I'm glad someone's finally taking this approach. Unfortunately, the article only mentions one specific problem with SQL, but I'm sure there are others that these people might eventually solve.

    --
    Hurricane Ivan: A 17th century prison collapsed. All of the inmates escaped.
  11. SQL is good for some things, but not for others by Rand+Huck · · Score: 2, Insightful

    One big thing I think a database could use is a hierarchy key instead of using parentid's as "foreign keys", is just one of the shortcomings. If I wanted to make a threaded thing for my forums, for example, I'd have to make a big PHP script just to sort it properly. I would have loved to have MySQL do it automatically. SQL has a very limited syntax, as well, and is inconsistent. "INSERT INTO table VALUES ('', '', '');" That's one of the only times you see the parenthasis used in that way. You don't see it here: "SELECT * FROM table WHERE id = '';" or "UPDATE table SET id = '';" I would like to have the ability to easily use my own functions just as you do with any language. It's especially important in database software.

  12. Benefits of alternative languages by jesterzog · · Score: 3, Insightful

    For those interested, the paper describing this language (linked to from the article) is available here. There's a link to the grammar of the language at the end of that paper.

    I use SQL quite a lot. It's certainly great for a lot of things, but it does have some limitations here and there. For instance, trying to deal with things like hierarchical structures, or joining on having identical/similar children, is a nightmare in SQL. Even if the query doesn't need to be efficient to run, it can still be extremely complicated to write and test. SQL simply wasn't designed or intended to deal with those sorts of structures.

    Unfortunately, short of using external code outside the database, it's so often a choice between using SQL or nothing else for writing a query in a particular database rather than an option between SQL and another language. In some ways it's like being forced to write every program in C or every program in Java or every program in Lisp, where realistically one or another might be better suited to a particular task.

    I suppose one of the reasons for only supporting SQL is that a predictible query language makes it easier to arrange data structures so they can be queried most efficiently. Still, it'd be nice to see an alternative front-end language or two supported in one or more of the major databases. Not every query needs to be ultra-efficient, and there have been many times where I would've liked to trade an efficient query execution for a language where what I wanted was more writeable.

  13. Null is not Zero in SQL by Magickcat · · Score: 4, Insightful

    The article criticises SQL but the author has little familiarity with SQL for example:

    "but the syntax is often inconsistent and unless you use one of the many vendor-specific supersets of SQL it can be tricky to express complex series of operations in a concise manner."

    But in fact, SQL is so popular because complex expressions need little changing from specific vendor offerings. If people choose to program using the subsets, then well and good, but the ANSI standard is generally thought to be sufficient. This is like arguing for the abolishment of HTML and XHTML because Microsoft make a flawed browser - hopefully the database language is better than the reasoning here.

    It then goes on to say "The idea is that there should be no arbitrary restrictions on the syntax of the query language, but at a lower level the database shouldn't run up against idiotic limitations. The limitation in existing implementations that generates the most comment from the various parties in the debate is the problem with "null" values in relational databases. Put simply, a database field has a type (50 characters, for instance, or a floating point number to two decimal places, or an 8-bit integer), but when you don't fill the field in (i.e. it's "null") it loses all its meaning. Even the ANSI standards state that if a field is null it's said not to exist - so if you ask a database for "all entries where field X is not equal to 47" it won't return any of those where field X is null because instead of saying "Null doesn't equal 47", the value "null" is deemed not to be comparable with any non-null field."

    Well, for starters, null is not numeric zero, null is the absence of any data whatsoever, and every SQL doc in the world tells you to not mistake it for zero. Any arithmetic expression containing a null always evaluates to null. For example, null added to 7 is null. All operators (except concatenation) return null when given a null operand. That's exactly why it's the ANSI standard.

    If you want to find "all entries where field X is not equal to 47" then pass your attribute a value like "0".

    SQL is neither clunky nor obsolete. Tutorial D may actually be a better database modelling method, but the article's criticisms aren't sufficient to exault Tutorial D whatsoever. The "Project D" syntax and model may possibly be better, but these criticisms aren't a convincing reason to scrap SQL.

    --

    Si tacuisses philosophus mansisses. If you had kept quiet, you would have remained a philosopher.

  14. Perhaps it is interesting. by abulafia · · Score: 2, Insightful

    And if it were actually relational, then it might be interesting in the current discussion. But it ain't. That it comes up is funny, in context, because mistaking things like XML for relational is something that Date regularly has massive heart failure over.

    --
    I forget what 8 was for.
  15. Re:I think he's trying to say: by Gilk180 · · Score: 2, Insightful

    That may be, but I haven found few operations easier to express in relational algebra than in SQL.

    for example:

    I want the name field from a if it's id is in b.

    In relational algebra,
    PROJECT[A.name](THETA_JOIN[A.id=B.id](A, B))
    or
    p[A.name](A |X|[A.id=B.id] B)
    Sorry, ascii sucks.

    In SQL
    SELECT DISTINCT A.name FROM A,B WHERE A.id=B.id;

    I find the SQL version to be more readable, etc. The same functionality is provided by both and is easily transferable.

    cartesian production becomes SELECT * FROM A,B

    natural join becomes (A NATURAL JOIN B)

    theta join becomes SELECT DISTINCT * FROM A,B WHERE

    selection becomes SELECT * FROM A,B WHERE ...

    projection becomes SELECT columnA, columnB FROM A,B

    With nested queries, everything is easily translatable from relational algebra to SQL (Technically, all SELECTS should be SELECT DISTINCT, but whatever). Otherwise, temporary tables can be used.

    The real reason relational algebra seems easier to deal with is because you can use symbols to represent things and there are no data types. It is an abstract language that cannot be implemented because it is under-defined.

    If you try expressing a hairy SQL query with relational algebra syntax, you will end up with a hairy relational expression.

  16. you were born too late by kpharmer · · Score: 2, Insightful

    see, if you were born around 1940 you could have been using IMS/DB, VSAM, ISAM, IDMS, etc back in the 70s.

    Tons of opportunities there for low-level access to your data. Of course, there's a reason that all those database management systems were abandoned for a 'busted ass super high level language'. It's because they sucked to maintain, they didn't evolve well as business requirements changed over time, and if you had the *most* basic of business questions - you'd never get an answer without a month of writing code.

    But don't despair - pick up a little more SQL and you may find it isn't that tough.

  17. Re:Ever heard of TSQL? by ajs · · Score: 2, Insightful

    The cost is not in learning. People learn new languages every day. The problem is in compatibility.

    Let's say that tomorrow MySQL adopts Tutorial D. Ok, so you are going to write code that talks to MySQL and you think about Tutorial D.... well, MySQL still talks SQL, and it turns out that so does everything else. Someday you may want to switch databases because suddenly DB2 is all the rage. If you use Tutorial D, you can't switch.

    Any move away from SQL would have to be a broad industry move or would have to come from an effort that is so divorced from the current uses of databases that compatibility simply is not an issue.

  18. No new languages needed. by Doc+Ruby · · Score: 4, Insightful

    By creating a new language, "Tutorial D", developers are excluding the other languages as much as they're including new features in the new language. Why not just add a Java package that includes the new syntax? To get anywhere in software development, even Tutorial D code will have to interoperate with existing systems and programmers with existing skills. Someone will have to code a "Tutorial D" JDBC driver, and ODBC, and all kinds of middleware that eats performance, developer time, and introduces the maintenance pitfalls of complexity. And by adding a package to an existing language, they can skip reimplementing the features of the existing language that they include in this new one, like loops, branches and character output. The effort seems as vain as the endless 19th Century conceits of inventing complete philosophical systems from scratch, to serve the reputations of egomaniacs dominating university debates. Why can't everyone just speak Object, with procedural slang and set-theoretical poetry?

    --

    --
    make install -not war

  19. Re:NULL is problematic. by slamb · · Score: 5, Insightful
    Yes, for this reason, if I were designing an SQL replacement, NULL would not remain as it is. I would probably replace it with two values, UNKNOWN and INAPPLICABLE, corresponding to the two cases you described. In fact, Dr. Codd, the father of relational algebra, suggested having multiple types of NULL. (There might even have been more than two. I don't remember what the others were.)

    I might also introduce keywords POSSIBLY and CERTAINLY that collapse tri-state logic (true, false, maybe) into boolean logic. Thus, POSSIBLY(a = 5) would be true when a is UNKNOWN but CERTAINLY(a = 5) would be false.

    Date advocates a different approach - no NULL at all. Instead, he has some sort of parallel table structure; a row in one table for the value being present and in another for the value being absent. With some more complex way of constraining it so there would be no contradictory information in the tables. I don't like this approach - having no NULLs seems simpler than having two, but not once you add in the weirdness of contraints. And not once you realize many tables have multiple nullable columns. Joining so many tables together would get ridiculous quickly.

    In practice NULL seems to not be a huge problem for me. Occasionally a field can either unknown or inapplicable, and I need to distinguish between the two; I have to do a kludgy thing with another field and a CHECK constraint. But for the most part, it's just an extra half second of thought when writing the logic, which isn't too bad. But it does trip newcomers. It would be worth fixing if you were designing a new relational query language from scratch.

  20. Re:Don't forget microsoft's X-Query by SoupIsGoodFood_42 · · Score: 2, Insightful

    Yeah, yeah. We all know that hardly anything the W3C do are true, bona fide, ISO standards, but they are still standards as far as most people are concerned. No need to be so pedantic.

  21. SQL is easy by Anonymous Coward · · Score: 1, Insightful

    You just have to expand your mind a teensy bit. You can do with a single line of SQL what may take several pages to do with an object-oriented language. I can understand how someone who isn't used to that much power may find SQL a bit confusing at first, but with a little effort and experimentation, it starts to become second nature.

    Not that it really matters to ME. I took a test for my current job that included a few very basic SQL queries. Not only did I ace it, but I was later told that most of the other candidates who claimed to know SQL wound up handing the test back blank. So, your refusal to adapt to a new and powerful tool is giving me a distinct competitive advantage. Perhaps I should just say "thank you."

    --A/C

  22. Re:So... by Tablizer · · Score: 2, Insightful

    Why don't you participate in the development in one of the OSS database systems (like Postgres) to [add temporary views] Bingo, there is your 'variable' functionality without inventing a whole new language.

    1. It is not that likely that I will get a chance to use it at work.

    2. SQL stinks in other ways that I would like to see fixed. In other words, I think it is time to explore a complete overhaul. Why be stuck with a "good enough" language forever? We are finally getting away from COBOL as the dominent biz language, so how about we work to get away from its relational cousin known as SQL?

    They keep tacking stuff onto COBOL to try to modernize it, but the result is a language only a mother can love. They are even adding OOP to it.

  23. Re:Vendor Lock-in is a myth for me by kpharmer · · Score: 2, Insightful

    > Basically, if you have to mentally add an implicit "AND X IS NOT NULL" to every condition, wouldn't it be better to make everything explicit and clear instead?

    The wacky part is using NULLs as a primary excuse to develop another language. First off - NULLs are optional in relational databases. Don't like them? Fine, don't use them. declare your columns 'NOT NULL'. It's that easy.

    Secondly, most work-arounds for unknown data suck:

    * The easy ones involve keeping an 'unknown' value row in most of your tables. That works great - except for high cardinality columns that aren't lookups - like monetary fields, etc.

    * the more common easy work-around is to reserve some value as NULL (2000/01/01 for a date, -1 for an integer column, 'n/a' for a varchar, etc). This really sucks - not only do you have to exclude this from your queries, but you need to know exactly what value to check for, and it's very likely that you'll need a variety of values for each type.

    * the approach I've seen most often by the more skilled of the anti-null crowd involves the creation of more tables - in order to isolate the nullable columns onto other tables that have condition rows. That's ok - but it involves an *explosion* in the size & complexity of the data model. There are some benefits - like it may do a better job of explicitely describing the subject process. But the downside - is that we already *denormalize* (prejoin) many tables together for better performance - primarily for reporting & analysis. Of course, the anti-null crowd also believes that denormalization is a sin - and that database vendors could theoretically provide great performance without denormalization. Unfortunately, their supporting analysis is based upon transactional rather than analytic systems. Ultimately, this approach looks like something that was baked up by people who might work on database software, but don't actually build real-world systems using it.