CREATE TABLE PUBLIC.CATEGORY(
    CATEGORY VARCHAR PRIMARY KEY,
    SORT_ORDER SMALLINT
);

CREATE TABLE PUBLIC.CRITERION(
    CRITERION VARCHAR PRIMARY KEY,
    CATEGORY VARCHAR NOT NULL,
    DESCRIPTION VARCHAR NOT NULL,
    SORT_ORDER SMALLINT,
    CONSTRAINT FK_CRITERION_CATEGORY FOREIGN KEY(CATEGORY) REFERENCES CATEGORY(CATEGORY)
);

CREATE TABLE PUBLIC.SUBMISSION(
    STUDENT VARCHAR PRIMARY KEY
);

CREATE CACHED TABLE PUBLIC.RESULT(
    STUDENT VARCHAR NOT NULL,
    CRITERION VARCHAR NOT NULL,
    RESULT REAL NOT NULL,
    COMMENT VARCHAR,
    CONSTRAINT PK_RESULT PRIMARY KEY(STUDENT, CRITERION),
    CONSTRAINT FK_RESULT_STUDENT FOREIGN KEY(STUDENT) REFERENCES PUBLIC.SUBMISSION(STUDENT),
    CONSTRAINT FK_RESULT_CRITERION FOREIGN KEY(CRITERION) REFERENCES PUBLIC.CRITERION(CRITERION)
);
