> Basically, I'm trying to design a system which can cope with storing > a fairly arbitrary set of key:value pairs, but which can quickly > retrieve subsets of them based on complex queries as in any RDBMS. be very careful, this is a slippery slope and you will end up frustrated and in tears, because retrieval is very complicated and anything but quick see: Dave's guide to the EAV http://weblogs.sqlteam.com/davidm/articles/12117.aspx OTLT and EAV: the two big design mistakes all beginners make http://tonyandrews.blogspot.com/2004/10/otlt-and-eav-two-big-design-mistakes.html One True Lookup Table (by Joe Celko) http://www.dbazine.com/ofinterest/oi-articles/celko22 Lookup Table Madness http://www.sqlservercentral.com/columnists/dpeterson/lookuptablemadness.asp Do not use Generic Data Models http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056 ;o)