Skip to content
Snippets Groups Projects
structure.sql 7.16 KiB
PRAGMA foreign_keys = ON;

CREATE TABLE export_version AS SELECT 9 AS version;

CREATE TABLE image_server (
    id INTEGER NOT NULL,
    display_name VARCHAR(250) NOT NULL,
    url TEXT NOT NULL,
    max_width INTEGER,
    max_height INTEGER,
    PRIMARY KEY (id),
    UNIQUE (url),
    CHECK (max_width >= 0 AND max_height >= 0)
);

CREATE TABLE image (
    id VARCHAR(37) NOT NULL,
    url TEXT NOT NULL,
    width INTEGER NOT NULL,
    height INTEGER NOT NULL,
    server_id INTEGER NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (server_id) REFERENCES image_server (id) ON DELETE CASCADE,
    UNIQUE (url),
    CHECK (width >= 0 AND height >= 0)
);

CREATE TABLE worker_version (
    id VARCHAR(37) NOT NULL,
    name VARCHAR(100) NOT NULL,
    slug VARCHAR(100) NOT NULL,
    type VARCHAR(50) NOT NULL,
    version INTEGER,
    revision VARCHAR(50),
    repository_url TEXT,
    PRIMARY KEY (id),
    CHECK ((version IS NULL) <> (revision IS NULL)),
    CHECK ((revision IS NULL) == (repository_url IS NULL))
);

CREATE TABLE worker_run (
    id VARCHAR(37) NOT NULL,
    worker_version_id VARCHAR(37) NOT NULL,
    model_version_id VARCHAR(37),
    model_id VARCHAR(37),
    model_name VARCHAR(100),
    configuration_id VARCHAR(37),
    configuration TEXT,
    PRIMARY KEY (id),
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    CHECK ((model_version_id IS NULL) = (model_id IS NULL) AND (model_id IS NULL) = (model_name IS NULL)),
    CHECK ((configuration_id IS NULL) = (configuration IS NULL))
);

CREATE TABLE element (
    id VARCHAR(37) NOT NULL,
    created REAL NOT NULL,
    updated REAL NOT NULL,
    name VARCHAR(250) NOT NULL,
    type VARCHAR(50) NOT NULL,
    polygon TEXT,
    image_id VARCHAR(37),
    rotation_angle INTEGER NOT NULL DEFAULT 0,
    mirrored INTEGER NOT NULL DEFAULT 0,
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    confidence REAL,
    PRIMARY KEY (id),
    FOREIGN KEY (image_id) REFERENCES image (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    CHECK ((image_id IS NULL AND polygon IS NULL) OR (image_id IS NOT NULL AND polygon IS NOT NULL)),
    CHECK (rotation_angle >= 0 AND rotation_angle <= 359),
    CHECK (mirrored = 0 OR mirrored = 1),
    CHECK (confidence IS NULL OR (confidence >= 0 AND confidence <= 1)),
    CHECK (worker_run_id IS NULL OR worker_version_id IS NOT NULL)
);

CREATE TABLE element_path (
    id VARCHAR(37) NOT NULL,
    parent_id VARCHAR(37) NOT NULL,
    child_id VARCHAR(37) NOT NULL,
    ordering INTEGER NOT NULL DEFAULT 0,
    PRIMARY KEY (id),
    FOREIGN KEY (parent_id) REFERENCES element (id) ON DELETE CASCADE,
    FOREIGN KEY (child_id) REFERENCES element (id) ON DELETE CASCADE,
    UNIQUE (parent_id, child_id),
    CHECK (ordering >= 0)
);

CREATE TABLE transcription (
    id VARCHAR(37) NOT NULL,
    element_id VARCHAR(37) NOT NULL,
    text TEXT NOT NULL,
    confidence REAL,
    orientation TEXT NOT NULL DEFAULT 'horizontal-lr',
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    PRIMARY KEY (id),
    FOREIGN KEY (element_id) REFERENCES element (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    CHECK (confidence IS NULL OR (confidence >= 0 AND confidence <= 1)),
    CHECK (orientation IN ('horizontal-lr', 'horizontal-rl', 'vertical-lr', 'vertical-rl'))
);

CREATE TABLE classification (
    id VARCHAR(37) NOT NULL,
    element_id VARCHAR(37) NOT NULL,
    class_name VARCHAR(1024) NOT NULL,
    state VARCHAR(16) NOT NULL DEFAULT 'pending',
    moderator VARCHAR(255),
    confidence REAL,
    high_confidence INTEGER NOT NULL DEFAULT 0,
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    PRIMARY KEY (id),
    FOREIGN KEY (element_id) REFERENCES element (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    CHECK (confidence IS NULL OR (confidence >= 0 AND confidence <= 1)),
    CHECK (high_confidence = 0 OR high_confidence = 1),
    CHECK (worker_run_id IS NULL OR worker_version_id IS NOT NULL)
);

CREATE TABLE entity (
    id VARCHAR(37) NOT NULL,
    name TEXT NOT NULL,
    type_id VARCHAR(37) NOT NULL,
    validated INTEGER NOT NULL DEFAULT 0,
    moderator VARCHAR(255),
    metas TEXT,
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    PRIMARY KEY (id),
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    FOREIGN KEY (type_id) REFERENCES entity_type (id) ON DELETE CASCADE,
    CHECK (validated = 0 OR validated = 1),
    CHECK (worker_run_id IS NULL OR worker_version_id IS NOT NULL)
);

CREATE TABLE entity_type (
    id VARCHAR(37) NOT NULL,
    name TEXT NOT NULL,
    color VARCHAR(6) NOT NULL DEFAULT 'ff0000',
    PRIMARY KEY (id)
    UNIQUE (name)
);

CREATE TABLE transcription_entity (
    id INTEGER NOT NULL,
    transcription_id VARCHAR(37) NOT NULL,
    entity_id VARCHAR(37) NOT NULL,
    offset INTEGER NOT NULL,
    length INTEGER NOT NULL,
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    confidence REAL,
    PRIMARY KEY (id),
    FOREIGN KEY (transcription_id) REFERENCES transcription (id) ON DELETE CASCADE,
    FOREIGN KEY (entity_id) REFERENCES entity (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    UNIQUE (transcription_id, entity_id, offset, length, worker_version_id, worker_run_id),
    CHECK (offset >= 0 AND length >= 0),
    CHECK (confidence IS NULL OR (confidence >= 0 AND confidence <= 1)),
    CHECK (worker_run_id IS NULL OR worker_version_id IS NOT NULL)
);

CREATE TABLE metadata (
    id VARCHAR(37) NOT NULL,
    element_id VARCHAR(37) NOT NULL,
    name VARCHAR(250) NOT NULL,
    type VARCHAR(50) NOT NULL,
    value TEXT NOT NULL,
    entity_id VARCHAR(37),
    worker_version_id VARCHAR(37),
    worker_run_id VARCHAR(37),
    PRIMARY KEY (id),
    FOREIGN KEY (element_id) REFERENCES element (id) ON DELETE CASCADE,
    FOREIGN KEY (entity_id) REFERENCES entity (id) ON DELETE SET NULL,
    FOREIGN KEY (worker_version_id) REFERENCES worker_version (id) ON DELETE CASCADE,
    FOREIGN KEY (worker_run_id) REFERENCES worker_run (id) ON DELETE CASCADE,
    CHECK (worker_run_id IS NULL OR worker_version_id IS NOT NULL)
);

CREATE TABLE dataset (
    id VARCHAR(37) NOT NULL,
    name VARCHAR(100) NOT NULL,
    state VARCHAR(50) NOT NULL DEFAULT 'open',
    sets TEXT NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE dataset_element (
    id VARCHAR(37) NOT NULL,
    element_id VARCHAR(37) NOT NULL,
    dataset_id VARCHAR(37) NOT NULL,
    set_name VARCHAR(50) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (element_id) REFERENCES element (id) ON DELETE NO ACTION,
    FOREIGN KEY (dataset_id) REFERENCES dataset (id) ON DELETE NO ACTION
);