CREATE TABLE IF NOT EXISTS movie_profiles ( movie_id TEXT PRIMARY KEY NOT NULL REFERENCES movies(id) ON DELETE CASCADE, tmdb_id BIGINT NOT NULL, imdb_id TEXT, overview TEXT, tagline TEXT, runtime_minutes INTEGER, budget_usd BIGINT, revenue_usd BIGINT, vote_average DOUBLE PRECISION, vote_count INTEGER, original_language TEXT, collection_name TEXT, enriched_at TIMESTAMPTZ NOT NULL ); CREATE TABLE IF NOT EXISTS movie_genres ( movie_id TEXT NOT NULL REFERENCES movies(id) ON DELETE CASCADE, tmdb_id INTEGER NOT NULL, name TEXT NOT NULL, PRIMARY KEY (movie_id, tmdb_id) ); CREATE TABLE IF NOT EXISTS movie_keywords ( movie_id TEXT NOT NULL REFERENCES movies(id) ON DELETE CASCADE, tmdb_id INTEGER NOT NULL, name TEXT NOT NULL, PRIMARY KEY (movie_id, tmdb_id) ); CREATE TABLE IF NOT EXISTS movie_cast ( movie_id TEXT NOT NULL REFERENCES movies(id) ON DELETE CASCADE, tmdb_person_id BIGINT NOT NULL, name TEXT NOT NULL, character TEXT NOT NULL, billing_order INTEGER NOT NULL, profile_path TEXT, PRIMARY KEY (movie_id, tmdb_person_id) ); CREATE TABLE IF NOT EXISTS movie_crew ( movie_id TEXT NOT NULL REFERENCES movies(id) ON DELETE CASCADE, tmdb_person_id BIGINT NOT NULL, name TEXT NOT NULL, job TEXT NOT NULL, department TEXT NOT NULL, profile_path TEXT, PRIMARY KEY (movie_id, tmdb_person_id, job) ); CREATE INDEX IF NOT EXISTS idx_movie_cast_person ON movie_cast (tmdb_person_id); CREATE INDEX IF NOT EXISTS idx_movie_crew_person ON movie_crew (tmdb_person_id); CREATE INDEX IF NOT EXISTS idx_movie_genres_name ON movie_genres (name); CREATE INDEX IF NOT EXISTS idx_movie_keywords_name ON movie_keywords (name);