create table users ( id serial primary key, name text not null, pwd text not null, description text ); create unique index users_name ON users(name); create table categories ( id serial primary key, name text not null, parent_id integer references categories, user_id integer not null references users ); create index parent_id on categories (parent_id); create index user_id on categories (user_id); create table const_expenses ( id serial primary key, description text, expense numeric(10, 2) not null, months smallint not null, start date not null, "end" date not null, prev_id integer references const_expenses, category_id integer not null references categories, user_id integer not null references users ); create table single_expenses ( id bigserial primary key, description text, expense numeric(10, 2) not null, year smallint not null, month smallint not null, day smallint not null, category_id integer not null references categories, user_id integer not null references users ); CREATE INDEX idx_single_date ON single_expenses(user_id, year, month);