imho (and a lot of people won't like me saying this) relational TECHNOLOGY is broken.
I use Pick - a system that's built on "key, value". PROVIDED that value is a normalised array, the resulting system is a SUPERSET of an RDBMS, with the added advantage that I can prove that successful optimisation is not possible :-)
(By that I mean that unoptimised queries are so efficient that there is no "headroom" available for an optimiser to make gains, not that optimisation can't be done. Just that even for a perfect optimiser, the cost is likely to outweigh the benefits.)
The downside, of course, is where I used the word "provided". Pick is like C - it doesn't enforce good practice. otoh, I liken relational to Pascal - when implemented strictly it gets horribly in the way of actually doing any work :-)