| 1 | DROP SCHEMA IF EXISTS project CASCADE;
|
|---|
| 2 | CREATE SCHEMA project;
|
|---|
| 3 | SET search_path TO project;
|
|---|
| 4 |
|
|---|
| 5 | -- ---------- Основни ентитети ----------
|
|---|
| 6 |
|
|---|
| 7 | CREATE 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 |
|
|---|
| 14 | CREATE 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 |
|
|---|
| 22 | CREATE 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 |
|
|---|
| 32 | CREATE 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"]
|
|---|
| 42 | CREATE 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]
|
|---|
| 54 | CREATE 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"]
|
|---|
| 70 | CREATE 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"]
|
|---|
| 84 | CREATE 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 | ); |
|---|