Spaces:
Running
Running
| -- ============================================================================== | |
| -- SQL Schema Setup - Cognitive Voice Intelligence Platform | |
| -- Target: PostgreSQL 15+ | |
| -- ============================================================================== | |
| -- Enable UUID extension if not active | |
| CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; | |
| -- 1. Sessions Table | |
| CREATE TABLE IF NOT EXISTS sessions ( | |
| session_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| subject_reference VARCHAR(100) NOT NULL, | |
| clinician_id VARCHAR(100) NULL, | |
| status VARCHAR(30) NOT NULL DEFAULT 'initialized', | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| completed_at TIMESTAMPTZ NULL | |
| ); | |
| -- Indexing sessions for performance | |
| CREATE INDEX IF NOT EXISTS idx_sessions_subject_reference ON sessions(subject_reference); | |
| CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status); | |
| -- 2. Audio Metadata Table | |
| CREATE TABLE IF NOT EXISTS audio_metadata ( | |
| audio_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id UUID NOT NULL, | |
| question_number INT NOT NULL, | |
| file_path VARCHAR(512) NOT NULL, | |
| duration_seconds FLOAT NOT NULL, | |
| file_size_bytes INT NOT NULL, | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE, | |
| CONSTRAINT unique_session_question UNIQUE (session_id, question_number) | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_audio_session_id ON audio_metadata(session_id); | |
| -- 3. Transcripts Table | |
| CREATE TABLE IF NOT EXISTS transcripts ( | |
| transcript_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id UUID NOT NULL, | |
| question_number INT NOT NULL, | |
| full_text TEXT NOT NULL, | |
| words_json JSONB NOT NULL, | |
| confidence FLOAT NOT NULL, | |
| language VARCHAR(10) NULL, | |
| language_probability DOUBLE PRECISION NULL, | |
| average_segment_confidence DOUBLE PRECISION NULL, | |
| processing_time_seconds FLOAT NULL, | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE, | |
| CONSTRAINT unique_session_transcript UNIQUE (session_id, question_number) | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_transcripts_session_id ON transcripts(session_id); | |
| -- 4. Temporal Metrics Table | |
| CREATE TABLE IF NOT EXISTS temporal_metrics ( | |
| temporal_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| audio_id UUID NOT NULL UNIQUE, | |
| speech_duration_seconds FLOAT NOT NULL, | |
| words_per_minute FLOAT NOT NULL, | |
| pause_count INT NOT NULL, | |
| longest_pause_seconds FLOAT NOT NULL, | |
| speech_rate_ratio FLOAT NOT NULL, | |
| FOREIGN KEY (audio_id) REFERENCES audio_metadata(audio_id) ON DELETE CASCADE | |
| ); | |
| -- 5. Linguistic Metrics Table | |
| CREATE TABLE IF NOT EXISTS linguistic_metrics ( | |
| linguistic_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| audio_id UUID NOT NULL UNIQUE, | |
| word_count INT NOT NULL, | |
| unique_word_count INT NOT NULL, | |
| repeated_words_json JSONB NOT NULL, | |
| filler_words_json JSONB NOT NULL, | |
| lexical_density FLOAT NOT NULL, | |
| FOREIGN KEY (audio_id) REFERENCES audio_metadata(audio_id) ON DELETE CASCADE | |
| ); | |
| -- 6. Risk Scores Table | |
| CREATE TABLE IF NOT EXISTS risk_scores ( | |
| risk_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id UUID NOT NULL UNIQUE, | |
| score FLOAT NOT NULL, | |
| classification VARCHAR(20) NOT NULL, | |
| rationale TEXT NOT NULL, | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_risk_scores_classification ON risk_scores(classification); | |