-- +goose Up CREATE TABLE budgets ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, name text NOT NULL, last_modification timestamp with time zone ); CREATE TABLE users ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, email text NOT NULL, name text NOT NULL, password text NOT NULL, last_login timestamp with time zone ); CREATE TABLE user_budgets ( user_id uuid NOT NULL REFERENCES users (id) ON DELETE CASCADE, budget_id uuid NOT NULL REFERENCES budgets (id) ON DELETE CASCADE ); CREATE TABLE accounts ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL REFERENCES budgets (id) ON DELETE CASCADE, name varchar(50) NOT NULL ); CREATE TABLE payees ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL REFERENCES budgets (id) ON DELETE CASCADE, name varchar(50) NOT NULL ); CREATE TABLE category_groups ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL REFERENCES budgets (id) ON DELETE CASCADE, name varchar(50) NOT NULL ); CREATE TABLE categories ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, category_group_id uuid NOT NULL REFERENCES category_groups (id) ON DELETE CASCADE, name varchar(50) NOT NULL ); CREATE TABLE transactions ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, date date NOT NULL, memo text NOT NULL, amount decimal(12,2) NOT NULL, account_id uuid NOT NULL REFERENCES accounts (id), category_id uuid REFERENCES categories (id), payee_id uuid REFERENCES payees (id) ); ALTER TABLE "transactions" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id"); ALTER TABLE "transactions" ADD FOREIGN KEY ("payee_id") REFERENCES "payees" ("id"); ALTER TABLE "transactions" ADD FOREIGN KEY ("category_id") REFERENCES "categories" ("id"); -- +goose Down DROP TABLE transactions; DROP TABLE accounts; DROP TABLE payees; DROP TABLE categories; DROP TABLE category_groups; DROP TABLE user_budgets; DROP TABLE budgets; DROP TABLE users;