-- 170_study_session_assets.sql (7/10) -- documents 의 스캔 교재 / 필기 PNG / 오디오 / 영상 / 자막을 study_sessions 에 연결하는 테이블. -- -- 단일 *_document_id 컬럼 금지 — 한 세션에 여러 오디오/영상/스캔/필기 PNG 가능. -- documents 원본은 assets 와 별도 자원 — 본 테이블 cascade 는 study_sessions / documents 둘 중 -- 어느 쪽이 사라지면 연결 행 정리 (orphan 방지). -- -- UNIQUE (study_session_id, document_id, asset_type, role): POST /assets 의 409 근거. -- role 이 NULL 인 경우 NULL 끼리는 Postgres 기본대로 다른 값으로 취급 (의도된 동작). CREATE TABLE IF NOT EXISTS study_session_assets ( id BIGSERIAL PRIMARY KEY, study_session_id BIGINT NOT NULL REFERENCES study_sessions(id) ON DELETE CASCADE, document_id BIGINT NOT NULL REFERENCES documents(id) ON DELETE CASCADE, asset_type VARCHAR(30) NOT NULL, role VARCHAR(40), sort_order INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (study_session_id, document_id, asset_type, role) );