31 lines
1.2 KiB
SQL
31 lines
1.2 KiB
SQL
-- +goose Up
|
|
|
|
CREATE TABLE assignment_student_questions (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
assignment_id BIGINT NOT NULL,
|
|
student_id BIGINT NOT NULL,
|
|
question_id BIGINT NOT NULL REFERENCES questions(id) ON DELETE CASCADE,
|
|
position INTEGER NOT NULL CHECK (position > 0),
|
|
source_bucket TEXT NOT NULL CHECK (btrim(source_bucket) <> ''),
|
|
source_topic question_topic,
|
|
source_difficulty question_difficulty,
|
|
generator_seed BIGINT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
CONSTRAINT assignment_student_questions_assignment_student_fkey
|
|
FOREIGN KEY (assignment_id, student_id)
|
|
REFERENCES assignment_assignees(assignment_id, student_id)
|
|
ON DELETE CASCADE,
|
|
CONSTRAINT assignment_student_questions_assignment_student_question_key
|
|
UNIQUE (assignment_id, student_id, question_id),
|
|
CONSTRAINT assignment_student_questions_assignment_student_position_key
|
|
UNIQUE (assignment_id, student_id, position)
|
|
);
|
|
|
|
CREATE INDEX idx_assignment_student_questions_assignment_student
|
|
ON assignment_student_questions (assignment_id, student_id);
|
|
|
|
-- +goose Down
|
|
|
|
DROP INDEX IF EXISTS idx_assignment_student_questions_assignment_student;
|
|
DROP TABLE IF EXISTS assignment_student_questions;
|