CREATE TABLE IF NOT EXISTS direct_messages ( id SERIAL PRIMARY KEY, sender_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, recipient_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, body TEXT NOT NULL, read_at TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CHECK (sender_id <> recipient_id) ); CREATE INDEX IF NOT EXISTS idx_direct_messages_conversation ON direct_messages (sender_id, recipient_id, created_at); CREATE INDEX IF NOT EXISTS idx_direct_messages_unread ON direct_messages (recipient_id, read_at);