But there are other concerns to be raised on using a denormalized schema.
KiokuDB doesn't so much use a denormalized schema as it uses no schema at all. Using the DBI backend for Kioku your schema basically looks like this:
sqlite> .tables
entries gin_index
sqlite> .schema entries
CREATE TABLE entries (
id varchar NOT NULL,
data blob NOT NULL,
class varchar,
root boolean NOT NULL,
tied char(1),
PRIMARY KEY (id)
);
sqlite> .schema gin_index
CREATE TABLE gin_index (
id varchar NOT NULL,
value varchar NOT NULL
);
CREATE INDEX gin_index_ids_gin_index ON gin_index (id);
CREATE INDEX gin_index_values_gin_index ON gin_index (value);
I suspect (but I don't know for sure) that with this we can still take advantage of the concurrency inherent in the RDBMS we use.