23 lines
853 B
SQL
23 lines
853 B
SQL
-- Modules belong to a Course; program_id is denormalized and enforced with the course by a composite FK.
|
|
ALTER TABLE courses
|
|
ADD CONSTRAINT courses_program_id_id_key UNIQUE (program_id, id);
|
|
|
|
CREATE TABLE modules (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
program_id BIGINT NOT NULL,
|
|
course_id BIGINT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
icon TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ,
|
|
CONSTRAINT modules_course_scope_fkey
|
|
FOREIGN KEY (program_id, course_id)
|
|
REFERENCES courses (program_id, id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX idx_modules_course_id ON modules (course_id);
|
|
CREATE INDEX idx_modules_program_id ON modules (program_id);
|
|
CREATE INDEX idx_modules_program_course_created ON modules (program_id, course_id, created_at DESC);
|