PRAGMA foreign_keys = on; create table users (rowid integer primary key, id integer unique not null check(typeof(id) = 'integer'), display_name text not null, handle text unique not null, bio text, following_count integer, followers_count integer, location text, website text, join_date integer, is_private boolean default 0, is_verified boolean default 0, profile_image_url text, profile_image_local_path text, banner_image_url text, banner_image_local_path text, pinned_tweet_id integer check(typeof(pinned_tweet_id) = 'integer' or pinned_tweet_id = ''), is_content_downloaded boolean default 0 -- foreign key(pinned_tweet_id) references tweets(id) ); create table tweets (rowid integer primary key, id integer unique not null check(typeof(id) = 'integer'), user_id integer not null check(typeof(user_id) = 'integer'), text text not null, posted_at integer, num_likes integer, num_retweets integer, num_replies integer, num_quote_tweets integer, in_reply_to integer, -- TODO hungarian: should be `in_reply_to_id` quoted_tweet integer, -- TODO hungarian: should be `quoted_tweet_id` mentions text, -- comma-separated hashtags text, -- comma-separated is_content_downloaded boolean default 0, foreign key(user_id) references users(id) -- foreign key(in_reply_to) references tweets(id), -- foreign key(quoted_tweet) references tweets(id) ); create table retweets(rowid integer primary key, retweet_id integer not null unique, tweet_id integer not null, retweeted_by integer not null, retweeted_at integer not null, foreign key(tweet_id) references tweets(id) foreign key(retweeted_by) references users(id) ); create table urls (rowid integer primary key, tweet_id integer not null, domain text, text text not null, title text, description text, creator_id integer, site_id integer, thumbnail_remote_url text, thumbnail_local_path text, has_card boolean, is_content_downloaded boolean default 0, unique (tweet_id, text) foreign key(tweet_id) references tweets(id) -- foreign key(creator_id) references users(id) -- foreign key(site_id) references users(id) ); create table images (rowid integer primary key, id integer unique not null check(typeof(id) = 'integer'), tweet_id integer not null, remote_url text not null unique, local_filename text not null unique, is_downloaded boolean default 0, foreign key(tweet_id) references tweets(id) ); create table videos (rowid integer primary key, id integer unique not null check(typeof(id) = 'integer'), tweet_id integer not null, remote_url text not null unique, local_filename text not null unique, is_downloaded boolean default 0, foreign key(tweet_id) references tweets(id) ); create table hashtags (rowid integer primary key, tweet_id integer not null, text text not null, unique (tweet_id, text) foreign key(tweet_id) references tweets(id) );