Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
3.5 kB · 115 lines
SQL
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116CREATE TYPE startup_stage AS enum ('seed', 'growth');
CREATE TYPE investor_kind AS enum ( 'angel', 'venture', 'individual', 'institutional');
CREATE TABLE user_account ( id uuid DEFAULT uuidv7(), full_name text NOT NULL, password_hash text NOT NULL, email text UNIQUE NOT NULL CHECK (email LIKE '%@%'), created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, is_active boolean NOT NULL DEFAULT TRUE, PRIMARY KEY (id));
CREATE INDEX idx_user_account_email ON user_account (email);
CREATE TABLE segment ( id uuid DEFAULT uuidv7(), name text NOT NULL, description text NOT NULL, PRIMARY KEY(id));
CREATE TABLE startup ( id uuid DEFAULT uuidv7(), name text NOT NULL, stage startup_stage NOT NULL DEFAULT 'seed', cnpj text UNIQUE NOT NULL CHECK (length(cnpj) = 14), description text NOT NULL, city text NOT NULL, state text NOT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id));
CREATE INDEX idx_startup_cnpj ON startup (cnpj);
CREATE TABLE startup_membership ( user_id uuid REFERENCES user_account (id) ON DELETE CASCADE, startup_id uuid REFERENCES startup (id) ON DELETE CASCADE, PRIMARY KEY (user_id, startup_id));
CREATE INDEX idx_startup_membership_user_account_id ON startup_membership (user_id);
CREATE INDEX idx_startup_membership_startup_id ON startup_membership (startup_id);
CREATE TABLE investor ( id uuid NOT NULL REFERENCES user_account (id) ON DELETE CASCADE, kind investor_kind NOT NULL, public_profile boolean NOT NULL DEFAULT TRUE, PRIMARY KEY(id));
CREATE INDEX idx_investor_user_id ON investor (id);
CREATE TABLE startup_segment ( startup_id uuid NOT NULL REFERENCES startup (id) ON DELETE CASCADE, segment_id uuid NOT NULL REFERENCES segment (id) ON DELETE CASCADE, is_main_segment boolean NOT NULL DEFAULT false, PRIMARY KEY(startup_id, segment_id));
CREATE INDEX idx_startup_segment_startup ON startup_segment (startup_id);
CREATE INDEX idx_startup_segment_segment ON startup_segment (segment_id);
CREATE TABLE investor_segment ( investor_id uuid NOT NULL REFERENCES investor (id) ON DELETE CASCADE, segment_id uuid NOT NULL REFERENCES segment (id) ON DELETE CASCADE, PRIMARY KEY(investor_id, segment_id));
CREATE INDEX idx_investor_segment_investor ON investor_segment (investor_id);
CREATE INDEX idx_investor_segment_segment ON investor_segment (segment_id);
CREATE TABLE expertise( id uuid DEFAULT uuidv7(), name text NOT NULL, description text NOT NULL, PRIMARY KEY(id));
CREATE TABLE startup_expertise ( startup_id uuid NOT NULL REFERENCES startup (id) ON DELETE CASCADE, expertise_id uuid NOT NULL REFERENCES expertise (id) ON DELETE CASCADE, PRIMARY KEY(startup_id, expertise_id));
CREATE INDEX idx_startup_expertise_startup_id ON startup_expertise (startup_id);
CREATE INDEX idx_startup_expertise_expertise_id ON startup_expertise (expertise_id);
CREATE TABLE service( id uuid DEFAULT uuidv7(), name text NOT NULL, description text NOT NULL, PRIMARY KEY(id));
CREATE TABLE startup_service ( startup_id uuid NOT NULL REFERENCES startup (id) ON DELETE CASCADE, service_id uuid NOT NULL REFERENCES service (id) ON DELETE CASCADE, PRIMARY KEY(startup_id, service_id));
CREATE INDEX idx_startup_service_startup_id ON startup_service (startup_id);
CREATE INDEX idx_startup_service_service_id ON startup_service (service_id);