CREATE DOMAIN sha1 AS bytea CHECK (length(value) = 20); CREATE TABLE content ( id sha1 PRIMARY KEY, -- SHA1 checksum length integer ); CREATE TABLE chunk ( id sha1 PRIMARY KEY, -- SHA1 checksum length integer ); CREATE TYPE chunking_hash as enum ('rabin', 'buzhash'); CREATE TABLE chunking_method ( id serial PRIMARY KEY, hash chunking_hash, min_block_size bigint, average_block_size bigint, hash_window_size bigint, ); CREATE TABLE chunked_content ( content_id sha1 REFERENCES content(id), chunk_id sha1 REFERENCES chunk(id), method_id integer REFERENCES chunking_method(id), position integer ); CREATE INDEX ON chunked_content (content_id); CREATE INDEX ON chunked_content (content_id); CREATE UNIQUE INDEX ON chunked_content (content_id, chunk_id, position);