29 lines
1.2 KiB
MySQL
29 lines
1.2 KiB
MySQL
|
|
CREATE TABLE IF NOT EXISTS users (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
username VARCHAR(100) UNIQUE NOT NULL,
|
||
|
|
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS chats (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
first_user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
second_user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||
|
|
UNIQUE(first_user_id, second_user_id),
|
||
|
|
CHECK (first_user_id != second_user_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS messages (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
sender_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
recipient_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
chat_id UUID NOT NULL REFERENCES chats(id) ON DELETE CASCADE,
|
||
|
|
content TEXT NOT NULL,
|
||
|
|
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_chat_id ON messages(chat_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_sender_id ON messages(sender_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_messages_chat_created ON messages(chat_id, created_at);
|