sascha@38: -- sascha@38: -- schema to store artifacts in PostgreSQL databases. sascha@38: -- sascha@38: sascha@38: BEGIN; sascha@38: sascha@38: -- not using AUTO_INCREMENT to be more compatible with sascha@38: -- other dbms. sascha@38: CREATE SEQUENCE ARTIFACTS_ID_SEQ; sascha@38: sascha@38: CREATE TABLE artifacts ( sascha@38: id int PRIMARY KEY NOT NULL, sascha@38: gid uuid NOT NULL UNIQUE, sascha@38: creation timestamp NOT NULL, sascha@38: last_access timestamp NOT NULL, sascha@38: ttl bigint, -- NULL means eternal sascha@41: factory VARCHAR(256) NOT NULL, sascha@38: data bytea sascha@38: ); sascha@38: sascha@121: CREATE SEQUENCE USERS_ID_SEQ; sascha@121: sascha@121: CREATE TABLE users ( sascha@121: id int PRIMARY KEY NOT NULL, sascha@124: gid uuid NOT NULL UNIQUE, sascha@121: name VARCHAR(256) NOT NULL UNIQUE, sascha@199: role bytea sascha@121: ); sascha@121: sascha@121: CREATE SEQUENCE COLLECTIONS_ID_SEQ; sascha@121: sascha@121: CREATE TABLE collections ( sascha@121: id int PRIMARY KEY NOT NULL, sascha@124: gid uuid NOT NULL UNIQUE, sascha@121: name VARCHAR(256) NOT NULL, sascha@121: owner_id int NOT NULL REFERENCES users(id), sascha@121: creation timestamp NOT NULL, sascha@121: last_access timestamp NOT NULL, sascha@121: ttl bigint, -- NULL means eternal sascha@199: attribute bytea sascha@121: ); sascha@121: ingo@187: CREATE SEQUENCE COLLECTION_ITEMS_ID_SEQ; sascha@121: sascha@121: CREATE TABLE collection_items ( sascha@121: id int PRIMARY KEY NOT NULL, sascha@121: collection_id int NOT NULL REFERENCES collections(id), sascha@121: artifact_id int NOT NULL REFERENCES artifacts(id), sascha@199: attribute bytea, sascha@121: UNIQUE (collection_id, artifact_id) sascha@121: ); sascha@121: sascha@38: COMMIT;