summaryrefslogtreecommitdiff
path: root/database.sql
blob: 9b467539b7974cfcd48d11fa36f422c8508cac60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
CREATE TABLE IF NOT EXISTS servers (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    host TEXT NOT NULL UNIQUE,
    port SMALLINT UNSIGNED NOT NULL,
    nick TEXT,
    pass TEXT,
    capabilities TEXT,
    added_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
    UNIQUE (host, port)
);

CREATE TABLE IF NOT EXISTS rooms (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
    `name` TEXT NOT NULL UNIQUE,
    joined_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
    departed_at TIMESTAMP,
    INDEX (`name`),
    INDEX (id, server_id)
);

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
    nick TEXT NOT NULL,
    joined_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
    departed_at TIMESTAMP,
    INDEX (nick),
    INDEX (server_id)
);

CREATE TABLE IF NOT EXISTS messages (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    room_id INTEGER NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
    user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    command VARCHAR(32) NOT NULL,
    
    params TEXT,
    tags TEXT,

    sent_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
    INDEX (room_id),
    INDEX (user_id),
    INDEX (command),
    INDEX (room_id, sent_at),
    FULLTEXT INDEX ft_message (params)
);