create table if not exists ValidPaths ( id integer primary key autoincrement not null, path text unique not null, hash text not null, registrationTime integer not null, deriver text ); create table if not exists Refs ( referrer integer not null, reference integer not null, primary key (referrer, reference), foreign key (referrer) references ValidPaths(id) on delete cascade, foreign key (reference) references ValidPaths(id) on delete restrict ); create index if not exists IndexReferrer on Refs(referrer); create index if not exists IndexReference on Refs(reference); create table if not exists DerivationOutputs ( drv integer not null, id text not null, -- symbolic output id, usually "out" path text not null, primary key (drv, id), foreign key (drv) references ValidPaths(id) on delete cascade ); create index if not exists IndexDerivationOutputs on DerivationOutputs(path); create table if not exists FailedPaths ( path text primary key not null, time integer not null );