PostgreSQL Schema
Relational database schema for the Core service.
PostgreSQL Schema
Target state of every table involved in this bet after all migrations are applied.
meetings
CREATE TABLE meetings (
id UUID NOT NULL DEFAULT uuidv7(),
user_id UUID NOT NULL,
title TEXT NOT NULL,
headline TEXT, -- ML-generated one-line summary
source_type TEXT NOT NULL,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ,
summary TEXT,
key_points JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
deleted_at TIMESTAMPTZ,
CONSTRAINT pk_meetings PRIMARY KEY (id),
CONSTRAINT fk_meetings_user FOREIGN KEY (user_id)
REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT chk_meetings_source_type CHECK (source_type IN ('recording', 'upload', 'text', 'anecdotal')),
CONSTRAINT chk_meetings_timeline CHECK (end_time IS NULL OR end_time > start_time)
);meeting_audio_files
CREATE TABLE meeting_audio_files (
meeting_id UUID NOT NULL,
gcs_path TEXT,
status TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT pk_meeting_audio_files PRIMARY KEY (meeting_id),
CONSTRAINT fk_meeting_audio_meeting FOREIGN KEY (meeting_id)
REFERENCES meetings (id) ON DELETE CASCADE,
CONSTRAINT chk_meeting_audio_status CHECK (
status IN ('recording', 'processing', 'completed', 'failed')
),
CONSTRAINT chk_meeting_audio_path CHECK (
status IN ('processing', 'failed') OR gcs_path IS NOT NULL
)
);transcript_segments
CREATE TABLE transcript_segments (
id UUID NOT NULL DEFAULT uuidv7(),
transcription_id UUID NOT NULL,
speaker_label TEXT,
person_id UUID,
text TEXT NOT NULL,
start_ms BIGINT NOT NULL,
end_ms BIGINT NOT NULL,
confidence REAL,
is_final BOOLEAN NOT NULL DEFAULT false,
is_highlighted BOOLEAN NOT NULL DEFAULT false,
feature_vector vector(512),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT pk_transcript_segments PRIMARY KEY (id),
CONSTRAINT fk_segments_transcription FOREIGN KEY (transcription_id)
REFERENCES transcriptions (id) ON DELETE CASCADE,
CONSTRAINT fk_segments_person FOREIGN KEY (person_id)
REFERENCES people (id) ON DELETE SET NULL,
CONSTRAINT chk_segments_timeline CHECK (end_ms > start_ms),
CONSTRAINT chk_segments_confidence CHECK (confidence IS NULL OR (confidence >= 0 AND confidence <= 1))
);talking_points
CREATE TABLE talking_points (
id UUID NOT NULL DEFAULT uuidv7(),
meeting_id UUID NOT NULL,
topic_id UUID,
content TEXT NOT NULL,
is_final BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
deleted_at TIMESTAMPTZ,
CONSTRAINT pk_talking_points PRIMARY KEY (id),
CONSTRAINT fk_talking_points_meeting FOREIGN KEY (meeting_id)
REFERENCES meetings (id) ON DELETE CASCADE,
CONSTRAINT fk_talking_points_topic FOREIGN KEY (topic_id)
REFERENCES topics (id) ON DELETE SET NULL
);