RelationalDesign: ddl_sql.sql

File ddl_sql.sql, 3.8 KB (added by 231118, 3 weeks ago)
Line 
1PRAGMA foreign_keys = ON;
2
3-- Drop child tables first
4DROP TABLE IF EXISTS security_alerts;
5DROP TABLE IF EXISTS network_connections;
6DROP TABLE IF EXISTS sysmon_events;
7DROP TABLE IF EXISTS computer_processes;
8DROP TABLE IF EXISTS computer_history;
9DROP TABLE IF EXISTS computers;
10
11DROP TABLE IF EXISTS admin_sessions;
12DROP TABLE IF EXISTS env_tokens;
13DROP TABLE IF EXISTS environments;
14
15DROP TABLE IF EXISTS memberships;
16DROP TABLE IF EXISTS users;
17DROP TABLE IF EXISTS tenants;
18
19
20CREATE TABLE tenants (
21 id INTEGER PRIMARY KEY AUTOINCREMENT,
22 name TEXT NOT NULL,
23 owner_email TEXT NOT NULL,
24 created_at TEXT NOT NULL
25);
26
27CREATE TABLE users (
28 id INTEGER PRIMARY KEY AUTOINCREMENT,
29 email TEXT NOT NULL UNIQUE,
30 name TEXT,
31 picture TEXT,
32 created_at TEXT NOT NULL
33);
34
35CREATE TABLE memberships (
36 user_id INTEGER NOT NULL,
37 tenant_id INTEGER NOT NULL,
38 role TEXT NOT NULL DEFAULT 'admin',
39 created_at TEXT NOT NULL,
40 PRIMARY KEY (user_id, tenant_id),
41 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
42 FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
43);
44
45
46CREATE TABLE environments (
47 id INTEGER PRIMARY KEY AUTOINCREMENT,
48 name TEXT NOT NULL,
49 created_at TEXT NOT NULL,
50 tenant_id INTEGER NOT NULL,
51 FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
52 UNIQUE (tenant_id, name)
53);
54
55CREATE TABLE env_tokens (
56 id INTEGER PRIMARY KEY AUTOINCREMENT,
57 env_name TEXT NOT NULL,
58 token TEXT NOT NULL UNIQUE,
59 created_at TEXT NOT NULL,
60 expires_at TEXT,
61 tenant_id INTEGER NOT NULL,
62 FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
63 -- (env_name is "soft FK" because SQLite cannot FK to a non-unique column across tenants)
64);
65
66CREATE TABLE admin_sessions (
67 id INTEGER PRIMARY KEY AUTOINCREMENT,
68 token TEXT NOT NULL UNIQUE,
69 created_at TEXT NOT NULL,
70 tenant_id INTEGER NOT NULL,
71 FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
72);
73
74
75CREATE TABLE computers (
76 id INTEGER PRIMARY KEY AUTOINCREMENT,
77 name TEXT NOT NULL,
78 user TEXT,
79 ip TEXT,
80 os TEXT,
81 first_seen TIMESTAMP,
82 last_seen TIMESTAMP,
83 sysmon_available BOOLEAN DEFAULT 0,
84 env_name TEXT NOT NULL DEFAULT 'default',
85 tenant_id INTEGER NOT NULL,
86 FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
87 UNIQUE (tenant_id, name)
88);
89
90CREATE TABLE computer_history (
91 id INTEGER PRIMARY KEY AUTOINCREMENT,
92 computer_id INTEGER NOT NULL,
93 cpu_usage REAL,
94 ram_usage REAL,
95 disk_usage REAL,
96 network_sent_mb REAL,
97 network_recv_mb REAL,
98 timestamp TIMESTAMP,
99 FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
100);
101
102CREATE TABLE computer_processes (
103 id INTEGER PRIMARY KEY AUTOINCREMENT,
104 computer_id INTEGER NOT NULL,
105 pid INTEGER,
106 name TEXT,
107 cpu_percent REAL,
108 memory_mb REAL,
109 username TEXT,
110 cmdline TEXT,
111 timestamp TIMESTAMP,
112 FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
113);
114
115CREATE TABLE sysmon_events (
116 id INTEGER PRIMARY KEY AUTOINCREMENT,
117 computer_id INTEGER NOT NULL,
118 event_id INTEGER,
119 event_type TEXT,
120 message TEXT,
121 timestamp TIMESTAMP,
122 details TEXT,
123 FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
124);
125
126CREATE TABLE network_connections (
127 id INTEGER PRIMARY KEY AUTOINCREMENT,
128 computer_id INTEGER NOT NULL,
129 pid INTEGER,
130 local_address TEXT,
131 remote_address TEXT,
132 status TEXT,
133 process_name TEXT,
134 timestamp TIMESTAMP,
135 FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
136);
137
138CREATE TABLE security_alerts (
139 id INTEGER PRIMARY KEY AUTOINCREMENT,
140 computer_id INTEGER NOT NULL,
141 alert_type TEXT,
142 severity TEXT,
143 description TEXT,
144 timestamp TIMESTAMP,
145 resolved BOOLEAN DEFAULT 0,
146 FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
147);
148