blob: be7d9c3bf579e92465c19da9da86ed924284d6bd [file] [log] [blame]
gio134be722025-07-20 19:01:17 +04001CREATE TABLE IF NOT EXISTS users (
2 id TEXT PRIMARY KEY,
3 username TEXT NOT NULL,
4 email TEXT NOT NULL,
5 UNIQUE(username),
6 UNIQUE (email)
7);
8
9CREATE TABLE IF NOT EXISTS keys (
10 user_id TEXT,
11 public_key TEXT,
12 UNIQUE (public_key),
13 FOREIGN KEY(user_id) REFERENCES users(id)
14);
15
16CREATE TABLE IF NOT EXISTS groups (
17 id TEXT PRIMARY KEY,
18 title TEXT NOT NULL,
19 description TEXT,
20 external_id TEXT
21);
22
23CREATE TABLE IF NOT EXISTS memberships (
24 id TEXT NOT NULL,
25 membership_type TEXT CHECK(membership_type IN ('member', 'owner')) NOT NULL,
26 member_type TEXT CHECK(member_type IN ('user', 'group')) NOT NULL,
27 user_id TEXT,
28 group_id TEXT,
29 FOREIGN KEY(id) REFERENCES groups(id)
30 FOREIGN KEY(user_id) REFERENCES users(id),
31 FOREIGN KEY(group_id) REFERENCES groups(id),
32 CHECK(user_id IS NULL OR group_id IS NULL),
33 CHECK((member_type = 'user' AND user_id IS NOT NULL) OR (member_type = 'group' AND group_id IS NOT NULL)),
34 UNIQUE (id, membership_type, member_type, user_id, group_id)
35);