From dbddac0fe91072b402ccb3801c952e3159f0cba4 Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <e.dolstra@tudelft.nl>
Date: Thu, 18 Feb 2010 13:40:46 +0000
Subject: * Assign an integer id to every row in the ValidPaths table in order 
  to make the Refs table more space-efficient.  For instance, this   reduces
 the size of the database on my laptop from 93 MiB to 18   MiB.  (It was 72
 MiB with the old schema on an ext3 disk with a 1   KiB block size.)

---
 src/libstore/schema.sql | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

(limited to 'src/libstore/schema.sql')

diff --git a/src/libstore/schema.sql b/src/libstore/schema.sql
index e241329430..3c07978fc9 100644
--- a/src/libstore/schema.sql
+++ b/src/libstore/schema.sql
@@ -1,27 +1,24 @@
 pragma foreign_keys = on;
 
 create table if not exists ValidPaths (
-    path             text primary key not null,
+    id               integer primary key autoincrement not null,
+    path             text unique not null,
     hash             text not null,
     registrationTime integer not null
 );
 
 create table if not exists Refs (
-    referrer  text not null,
-    reference text not null,
+    referrer  integer not null,
+    reference integer not null,
     primary key (referrer, reference),
-    foreign key (referrer) references ValidPaths(path)
-      on delete cascade
-      deferrable initially deferred,
-    foreign key (reference) references ValidPaths(path)
-      on delete restrict
-      deferrable initially deferred
+    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 FailedDerivations (
     path text primary key not null,
     time integer not null
 );
-
-create index IndexReferrer on Refs(referrer);
-create index IndexReference on Refs(reference);
-- 
cgit 1.4.1

