drop table if exists event; drop table if exists pageview; drop table if exists session; drop table if exists website; drop table if exists account; create table account ( user_id serial primary key, username varchar(255) unique not null, password varchar(60) not null, is_admin bool not null default false, created_at timestamp with time zone default current_timestamp, updated_at timestamp with time zone default current_timestamp ); create table website ( website_id serial primary key, website_uuid uuid unique not null, user_id int not null references account(user_id) on delete cascade, name varchar(100) not null, domain varchar(500), share_id varchar(64) unique, created_at timestamp with time zone default current_timestamp ); create table session ( session_id serial primary key, session_uuid uuid unique not null, website_id int not null references website(website_id) on delete cascade, created_at timestamp with time zone default current_timestamp, hostname varchar(100), browser varchar(20), os varchar(20), device varchar(20), screen varchar(11), language varchar(35), country char(2) ); create table pageview ( view_id serial primary key, website_id int not null references website(website_id) on delete cascade, session_id int not null references session(session_id) on delete cascade, created_at timestamp with time zone default current_timestamp, url varchar(500) not null, referrer varchar(500) ); create table event ( event_id serial primary key, website_id int not null references website(website_id) on delete cascade, session_id int not null references session(session_id) on delete cascade, created_at timestamp with time zone default current_timestamp, url varchar(500) not null, event_type varchar(50) not null, event_value varchar(50) not null ); create index website_user_id_idx on website(user_id); create index session_created_at_idx on session(created_at); create index session_website_id_idx on session(website_id); create index pageview_created_at_idx on pageview(created_at); create index pageview_website_id_idx on pageview(website_id); create index pageview_session_id_idx on pageview(session_id); create index pageview_website_id_created_at_idx on pageview(website_id, created_at); create index pageview_website_id_session_id_created_at_idx on pageview(website_id, session_id, created_at); create index event_created_at_idx on event(created_at); create index event_website_id_idx on event(website_id); create index event_session_id_idx on event(session_id); insert into account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);