-- Source unique de creation des tables de la base booksync. CREATE TABLE IF NOT EXISTS "AUTHORS" ( id VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, first_name VARCHAR(255), tasks_count INTEGER NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "JOBS" ( id VARCHAR(36) NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "KINDS" ( id VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "PUBLISHERS" ( id VARCHAR(36) NOT NULL, title VARCHAR(500) NOT NULL, closed BOOLEAN NOT NULL, editions_count INTEGER NOT NULL, no_amazon BOOLEAN NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "SERIES_TYPES" ( id VARCHAR(36) NOT NULL, title VARCHAR(255) NOT NULL, to_display BOOLEAN, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS "BOX_EDITIONS" ( id VARCHAR(36) NOT NULL, title VARCHAR(500) NOT NULL, publisher_id VARCHAR(36) NOT NULL, boxes_count INTEGER NOT NULL, adult_content BOOLEAN NOT NULL, box_follow_editions_count INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY(publisher_id) REFERENCES "PUBLISHERS" (id) ); CREATE TABLE IF NOT EXISTS "SERIES" ( id VARCHAR(36) NOT NULL, title VARCHAR(500) NOT NULL, type_id VARCHAR(36), adult_content BOOLEAN, editions_count INTEGER, tasks_count INTEGER, PRIMARY KEY (id), FOREIGN KEY(type_id) REFERENCES "SERIES_TYPES" (id) ); CREATE TABLE IF NOT EXISTS "BOXES" ( id VARCHAR(36) NOT NULL, title VARCHAR(500) NOT NULL, number INTEGER NOT NULL, release_date DATE, isbn VARCHAR(32), asin VARCHAR(32), commercial_stop BOOLEAN NOT NULL, box_edition_id VARCHAR(36) NOT NULL, box_possessions_count INTEGER NOT NULL, image_url TEXT, content TEXT, PRIMARY KEY (id), FOREIGN KEY(box_edition_id) REFERENCES "BOX_EDITIONS" (id) ); CREATE TABLE IF NOT EXISTS "EDITIONS" ( id VARCHAR(36) NOT NULL, title VARCHAR(500), series_id VARCHAR(36) NOT NULL, publisher_id VARCHAR(36) NOT NULL, parent_edition_id VARCHAR(36), volumes_count INTEGER NOT NULL, last_volume_number INTEGER, commercial_stop BOOLEAN NOT NULL, not_finished BOOLEAN NOT NULL, follow_editions_count INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY(series_id) REFERENCES "SERIES" (id), FOREIGN KEY(publisher_id) REFERENCES "PUBLISHERS" (id), FOREIGN KEY(parent_edition_id) REFERENCES "EDITIONS" (id) ); CREATE TABLE IF NOT EXISTS "SERIES_KINDS" ( series_id VARCHAR(36) NOT NULL, kind_id VARCHAR(36) NOT NULL, PRIMARY KEY (series_id, kind_id), FOREIGN KEY(series_id) REFERENCES "SERIES" (id) ON DELETE CASCADE, FOREIGN KEY(kind_id) REFERENCES "KINDS" (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS "TASKS" ( id VARCHAR(36) NOT NULL, series_id VARCHAR(36) NOT NULL, author_id VARCHAR(36), job_id VARCHAR(36), PRIMARY KEY (id), FOREIGN KEY(series_id) REFERENCES "SERIES" (id), FOREIGN KEY(author_id) REFERENCES "AUTHORS" (id), FOREIGN KEY(job_id) REFERENCES "JOBS" (id) ); CREATE TABLE IF NOT EXISTS "VOLUMES" ( id VARCHAR(36) NOT NULL, title VARCHAR(500), number INTEGER NOT NULL, release_date DATE, isbn VARCHAR(32), asin VARCHAR(32), edition_id VARCHAR(36) NOT NULL, possessions_count INTEGER NOT NULL, not_sold BOOLEAN NOT NULL, image_url TEXT, nb_pages INTEGER, content TEXT, PRIMARY KEY (id), FOREIGN KEY(edition_id) REFERENCES "EDITIONS" (id) ); CREATE TABLE IF NOT EXISTS "BOX_VOLUMES" ( id VARCHAR(36) NOT NULL, box_id VARCHAR(36) NOT NULL, volume_id VARCHAR(36) NOT NULL, included BOOLEAN NOT NULL, PRIMARY KEY (id), FOREIGN KEY(box_id) REFERENCES "BOXES" (id), FOREIGN KEY(volume_id) REFERENCES "VOLUMES" (id) ); CREATE TABLE IF NOT EXISTS "VOLUME_POSSESSION_HISTORY" ( id_volume VARCHAR(36) NOT NULL, observed_at TIMESTAMP WITH TIME ZONE NOT NULL, possessions_count INTEGER NOT NULL, PRIMARY KEY (id_volume, observed_at), FOREIGN KEY(id_volume) REFERENCES "VOLUMES" (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS "BOX_POSSESSION_HISTORY" ( id_box VARCHAR(36) NOT NULL, observed_at TIMESTAMP WITH TIME ZONE NOT NULL, box_possessions_count INTEGER NOT NULL, PRIMARY KEY (id_box, observed_at), FOREIGN KEY(id_box) REFERENCES "BOXES" (id) ON DELETE CASCADE );