CREATE DATABASE `Betterzon`; USE `Betterzon`; create table categories ( category_id int auto_increment primary key, name text null ); create table crawling_processes ( process_id int auto_increment primary key, started_timestamp datetime default current_timestamp() null, combinations_to_crawl int null ); create table manufacturers ( manufacturer_id int auto_increment primary key, name text null ); create table products ( product_id int auto_increment primary key, asin text null, is_active tinyint null, name text null, short_description text null, long_description text null, image_guid text null, date_added date null, last_modified datetime null, manufacturer_id int null, selling_rank text null, category_id int null, constraint FK_products_categories foreign key (category_id) references categories (category_id), constraint FK_products_manufacturers foreign key (manufacturer_id) references manufacturers (manufacturer_id) ); create table users ( user_id int auto_increment primary key, username text not null, email text null, bcrypt_password_hash text null, registration_date datetime default current_timestamp() null, last_login_date datetime default current_timestamp() null, is_admin tinyint(1) default 0 null, constraint users_username_uindex unique (username) using hash ); create table price_alarms ( alarm_id int auto_increment primary key, user_id int not null, product_id int not null, defined_price int null, constraint price_alarms_products_product_id_fk foreign key (product_id) references products (product_id) on update cascade on delete cascade, constraint price_alarms_users_user_id_fk foreign key (user_id) references users (user_id) on update cascade on delete cascade ); create table sessions ( session_id int auto_increment primary key, user_id int not null, session_key_hash text null, createdDate datetime default current_timestamp() null, lastLogin datetime null, validUntil datetime null, validDays int null, last_IP text null, constraint sessions_users_user_id_fk foreign key (user_id) references users (user_id) on update cascade on delete cascade ); create table vendors ( vendor_id int auto_increment primary key, admin_id int null, name text null, streetname text null, zip_code int null, city text null, country_code text null, phone text null, website text null, isActive tinyint(1) default 1 not null, constraint vendors_users_user_id_fk foreign key (admin_id) references users (user_id) on update set null on delete set null ); create table contact_persons ( contact_person_id int auto_increment primary key, first_name text default '0' not null, last_name text default '0' not null, gender text default '0' not null, email text default '0' not null, phone text default '0' not null, vendor_id int default 0 not null, constraint FK_contact_persons_vendors foreign key (vendor_id) references vendors (vendor_id) ); create table crawling_status ( status_id int auto_increment primary key, process_id int not null, instance_url text null, product_id int not null, vendor_id int not null, success tinyint(1) not null, constraint crawling_status_crawling_processes_process_id_fk foreign key (process_id) references crawling_processes (process_id) on update cascade on delete cascade, constraint crawling_status_products_product_id_fk foreign key (product_id) references products (product_id) on update cascade on delete cascade, constraint crawling_status_vendors_vendor_id_fk foreign key (vendor_id) references vendors (vendor_id) on update cascade on delete cascade ); create table favorite_shops ( favorite_id int auto_increment primary key, vendor_id int not null, user_id int not null, constraint favorite_shops_users_user_id_fk foreign key (user_id) references users (user_id) on update cascade on delete cascade, constraint favorite_shops_vendors_vendor_id_fk foreign key (vendor_id) references vendors (vendor_id) on update cascade on delete cascade ); create table prices ( price_id int auto_increment primary key, product_id int default 0 null, vendor_id int null, price_in_cents int null, timestamp datetime default current_timestamp() null, active_listing tinyint(1) default 1 not null, constraint FK_prices_products foreign key (product_id) references products (product_id), constraint FK_prices_vendors foreign key (vendor_id) references vendors (vendor_id) ); create table product_links ( product_link_id int auto_increment primary key, product_id int default 0 not null, vendor_id int default 0 not null, url text default '0' not null, constraint FK__products foreign key (product_id) references products (product_id), constraint FK__vendors foreign key (vendor_id) references vendors (vendor_id) );