Spaces:
Sleeping
Sleeping
| -- ============================================= | |
| -- 정부 사업 공고 대시보드 Supabase 스키마 | |
| -- Supabase SQL Editor에서 실행하세요 | |
| -- ============================================= | |
| -- 1. 공고 테이블 | |
| CREATE TABLE IF NOT EXISTS announcements ( | |
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(), | |
| source TEXT NOT NULL, -- 'MSS' | 'MOTIE' | |
| title TEXT NOT NULL, -- 공고명 | |
| announcement_no TEXT, -- 공고번호 | |
| department TEXT, -- 담당 부서 | |
| business_type TEXT, -- 사업 유형 | |
| apply_start DATE, -- 신청기간 시작 | |
| apply_end DATE, -- 신청기간 종료 | |
| detail_url TEXT, -- 상세 페이지 URL | |
| registered_at DATE, -- 공고 등록일 | |
| fetched_at TIMESTAMPTZ DEFAULT NOW(), -- 수집 시각 | |
| period_source TEXT, -- 'list' | 'detail' | 'attachment' | null | |
| UNIQUE (source, announcement_no) | |
| ); | |
| -- 2. 첨부파일 테이블 | |
| CREATE TABLE IF NOT EXISTS attachments ( | |
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(), | |
| announcement_id UUID NOT NULL REFERENCES announcements(id) ON DELETE CASCADE, | |
| file_name TEXT NOT NULL, | |
| file_url TEXT NOT NULL, | |
| file_type TEXT -- 'pdf' | 'hwp' | 'docx' | 'zip' 등 | |
| ); | |
| -- 3. 마지막 업데이트 시각 추적 테이블 | |
| CREATE TABLE IF NOT EXISTS crawl_log ( | |
| id SERIAL PRIMARY KEY, | |
| crawled_at TIMESTAMPTZ DEFAULT NOW(), | |
| new_count INTEGER DEFAULT 0, | |
| status TEXT DEFAULT 'success', -- 'success' | 'error' | |
| message TEXT | |
| ); | |
| -- 4. 인덱스 | |
| CREATE INDEX IF NOT EXISTS idx_announcements_source ON announcements(source); | |
| CREATE INDEX IF NOT EXISTS idx_announcements_apply_end ON announcements(apply_end); | |
| CREATE INDEX IF NOT EXISTS idx_attachments_announcement_id ON attachments(announcement_id); | |