CREATE TABLE messages ( chat_id UUID, -- Partition key user_id UUID, content text, type text, created_at timestamp, -- Clustering column PRIMARY KEY (chat_id, content, type, created_at) ) WITH CLUSTERING ORDER BY (created_at DESC); CREATE TABLE user_chats ( user_id UUID, -- Partition key chat_id UUID, -- Clustering column blocked boolean, created_at timestamp, PRIMARY KEY (user_id, chat_id, blocked, created_at) ); CREATE MATERIALIZED VIEW chat_users AS SELECT chat_id, user_id, blocked, created_at FROM user_chats WHERE chat_id IS NOT NULL AND user_id IS NOT NULL AND created_at IS NOT NULL PRIMARY KEY (chat_id, user_id, blocked, created_at); BEGIN BATCH INSERT INTO messages (chat_id, user_id, content, type, created_at) VALUES ('b9b29446-d50a-42d0-b3e2-bfaabd85fa4b', '8c796bf4-c9cd-4851-8379-6f67f69e1b99', 'Message 1', 'text', toTimestamp(now())) IF EXISTS AND (SELECT blocked FROM user_chats WHERE user_id = '8c796bf4-c9cd-4851-8379-6f67f69e1b99' AND chat_id = 'b9b29446-d50a-42d0-b3e2-bfaabd85fa4b') = false; APPLY BATCH; INSERT INTO user_chats (user_id, chat_id, blocked, created_at) VALUES (uuid(), uuid(), false, toTimestamp(now())); INSERT INTO messages (chat_id, user_id, content, type, created_at, year_month, seen) VALUES (uuid(), uuid(), 'Your message content', 'text', toTimestamp(now()), '2020-01'); SELECT * FROM messages LIMIT 1;