RelationalDesign: schema_creation.sql

File schema_creation.sql, 4.0 KB (added by 231118, 5 days ago)
Line 
1DROP SCHEMA IF EXISTS project CASCADE;
2CREATE SCHEMA project;
3SET search_path TO project;
4
5-- ---------- Основни ентитети ----------
6
7CREATE TABLE tenants (
8 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
9 name TEXT NOT NULL,
10 owner_email TEXT NOT NULL,
11 created_at TIMESTAMP NOT NULL DEFAULT now()
12);
13
14CREATE TABLE users (
15 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
16 email TEXT NOT NULL UNIQUE,
17 name TEXT,
18 picture TEXT,
19 created_at TIMESTAMP NOT NULL DEFAULT now()
20);
21
22CREATE TABLE memberships (
23 user_id INTEGER NOT NULL,
24 tenant_id INTEGER NOT NULL,
25 role TEXT NOT NULL DEFAULT 'admin',
26 created_at TIMESTAMP NOT NULL DEFAULT now(),
27 CONSTRAINT pk_memberships PRIMARY KEY (user_id, tenant_id),
28 CONSTRAINT fk_memberships_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
29 CONSTRAINT fk_memberships_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
30);
31
32CREATE TABLE environments (
33 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
34 tenant_id INTEGER NOT NULL,
35 name TEXT NOT NULL,
36 created_at TIMESTAMP NOT NULL DEFAULT now(),
37 CONSTRAINT uq_environments_tenant_name UNIQUE (tenant_id, name),
38 CONSTRAINT fk_environments_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
39);
40
41-- env_tokens -> environments преку составен клуч (tenant_id, env_name) [релација "issues"]
42CREATE TABLE env_tokens (
43 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
44 tenant_id INTEGER NOT NULL,
45 env_name TEXT NOT NULL,
46 token TEXT NOT NULL UNIQUE,
47 created_at TIMESTAMP NOT NULL DEFAULT now(),
48 expires_at TIMESTAMP,
49 CONSTRAINT fk_env_tokens_env FOREIGN KEY (tenant_id, env_name)
50 REFERENCES environments(tenant_id, name) ON DELETE CASCADE
51);
52
53-- env_settings -> environments (составен клуч) [релација "configured_by", 1:1]
54CREATE TABLE env_settings (
55 tenant_id INTEGER NOT NULL,
56 env_name TEXT NOT NULL,
57 save_process_history BOOLEAN NOT NULL DEFAULT false,
58 save_metrics_history BOOLEAN NOT NULL DEFAULT false,
59 save_network_history BOOLEAN NOT NULL DEFAULT false,
60 created_at TIMESTAMP DEFAULT now(),
61 updated_at TIMESTAMP DEFAULT now(),
62 CONSTRAINT pk_env_settings PRIMARY KEY (tenant_id, env_name),
63 CONSTRAINT fk_env_settings_env FOREIGN KEY (tenant_id, env_name)
64 REFERENCES environments(tenant_id, name) ON DELETE CASCADE
65);
66
67-- ---------- Мрежна инфраструктура и организациска структура ----------
68
69-- networks -> environments (составен клуч) [релација "has_networks"]
70CREATE TABLE networks (
71 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
72 tenant_id INTEGER NOT NULL,
73 env_name TEXT NOT NULL,
74 name TEXT NOT NULL,
75 cidr TEXT NOT NULL,
76 gateway_ip TEXT,
77 vlan INTEGER,
78 CONSTRAINT uq_networks_tenant_name UNIQUE (tenant_id, name),
79 CONSTRAINT fk_networks_env FOREIGN KEY (tenant_id, env_name)
80 REFERENCES environments(tenant_id, name) ON DELETE CASCADE
81);
82
83-- computer_groups со хиерархија (self-reference) [релација "parent_of"]
84CREATE TABLE computer_groups (
85 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
86 tenant_id INTEGER NOT NULL,
87 name TEXT NOT NULL,
88 description TEXT,
89 parent_id INTEGER,
90 CONSTRAINT uq_computer_groups_tenant_name UNIQUE (tenant_id, name),
91 CONSTRAINT fk_computer_groups_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
92 CONSTRAINT fk_computer_groups_parent FOREIGN KEY (parent_id) REFERENCES computer_groups(id) ON DELETE SET NULL
93);