0% found this document useful (0 votes)
2 views22 pages

SQL

The document outlines the SQL schema for a phone management system, including tables for phone details, user accounts, social media interactions, and communication records. It defines various entities such as phone numbers, contacts, messages, and social media accounts for platforms like Twitter and Instagram. Each table includes relevant fields, primary keys, and foreign key relationships to ensure data integrity and organization.

Uploaded by

rayan25022011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views22 pages

SQL

The document outlines the SQL schema for a phone management system, including tables for phone details, user accounts, social media interactions, and communication records. It defines various entities such as phone numbers, contacts, messages, and social media accounts for platforms like Twitter and Instagram. Each table includes relevant fields, primary keys, and foreign key relationships to ensure data integrity and organization.

Uploaded by

rayan25022011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 22

-- phone_number is the identifier used for phones in twitter etc

CREATE TABLE IF NOT EXISTS `phone_phones` (


`id` VARCHAR(100) NOT NULL, -- if metadata - unique id for the phone; if not -
player identifier
`owner_id` VARCHAR(100) NOT NULL, -- the player identifier of the first person
who used the phone, used for lookup app etc
`phone_number` VARCHAR(15) NOT NULL,
`name` VARCHAR(50),

`pin` VARCHAR(4) DEFAULT NULL,


`face_id` VARCHAR(100) DEFAULT NULL, -- the identifier of the face that is used
for the phone

`settings` LONGTEXT, -- json encoded settings


`is_setup` BOOLEAN DEFAULT FALSE,
`assigned` BOOLEAN DEFAULT FALSE, -- if the phone is assigned to a phone item
(metadata)
`battery` INT NOT NULL DEFAULT 100, -- battery percentage

PRIMARY KEY (`id`),


UNIQUE KEY (`phone_number`)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_last_phone` (


`id` VARCHAR(100) NOT NULL, -- the player's identifier (not named identifier
since esx_multicharacter breaks it)
`phone_number` VARCHAR(15) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_photo_albums` (


`id` INT NOT NULL AUTO_INCREMENT,
`phone_number` VARCHAR(15) NOT NULL,

`title` VARCHAR(100) NOT NULL,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_photos` (


`id` INT NOT NULL AUTO_INCREMENT,
`phone_number` VARCHAR(15) NOT NULL,

`link` VARCHAR(500) NOT NULL,


`is_video` BOOLEAN DEFAULT FALSE,
`size` FLOAT NOT NULL DEFAULT 0,
`metadata` VARCHAR(20) DEFAULT NULL,

`is_favourite` BOOLEAN DEFAULT FALSE,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_photo_album_photos` (


`album_id` INT NOT NULL,
`photo_id` INT NOT NULL,

PRIMARY KEY (`album_id`, `photo_id`),


FOREIGN KEY (`album_id`) REFERENCES `phone_photo_albums`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`photo_id`) REFERENCES `phone_photos`(`id`) ON DELETE CASCADE ON
UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_notes` (


`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`content` LONGTEXT, -- limit maybe?
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_notifications` (


`id` INT NOT NULL AUTO_INCREMENT,
`phone_number` VARCHAR(15) NOT NULL,

`app` VARCHAR(50) NOT NULL,

`title` VARCHAR(50) DEFAULT NULL,


`content` VARCHAR(500) DEFAULT NULL,
`thumbnail` VARCHAR(500) DEFAULT NULL,
`avatar` VARCHAR(500) DEFAULT NULL,
`show_avatar` BOOLEAN DEFAULT FALSE,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- TWITTER
CREATE TABLE IF NOT EXISTS `phone_twitter_hashtags` (
`hashtag` VARCHAR(50) NOT NULL,
`amount` INT NOT NULL DEFAULT 0,
`last_used` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,

PRIMARY KEY (`hashtag`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_accounts` (


`display_name` VARCHAR(30) NOT NULL,

`username` VARCHAR(20) NOT NULL,


`password` VARCHAR(100) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,
`bio` VARCHAR(100) DEFAULT NULL,
`profile_image` VARCHAR(500) DEFAULT NULL,
`profile_header` VARCHAR(500) DEFAULT NULL,

`pinned_tweet` VARCHAR(50) DEFAULT NULL,

`verified` TINYINT(1) DEFAULT 0,


`follower_count` INT(11) NOT NULL DEFAULT 0,
`following_count` INT(11) NOT NULL DEFAULT 0,

`private` BOOLEAN DEFAULT FALSE,

`date_joined` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`username`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_loggedin` (


`phone_number` VARCHAR(15) NOT NULL,
`username` VARCHAR(20) NOT NULL,

PRIMARY KEY (`phone_number`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`username`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_follows` (


`followed` VARCHAR(20) NOT NULL,
`follower` VARCHAR(20) NOT NULL,
`notifications` BOOLEAN NOT NULL DEFAULT FALSE, -- if the follower gets
notifications from the followed

PRIMARY KEY (`followed`, `follower`),


FOREIGN KEY (`followed`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`follower`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_follow_requests` (


`requester` VARCHAR(20) NOT NULL,
`requestee` VARCHAR(20) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`requester`, `requestee`),


FOREIGN KEY (`requester`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`requestee`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_tweets` (


`id` VARCHAR(10) NOT NULL,
`username` VARCHAR(20) NOT NULL, -- the person who tweeted, matches to
`username` in phone_twitter_accounts

`content` VARCHAR(280),
`attachments` TEXT, -- json array of attachments

`reply_to` VARCHAR(50) DEFAULT NULL, -- the tweet / reply this tweet / reply
was a reply to

`like_count` INT(11) DEFAULT 0,


`reply_count` INT(11) DEFAULT 0,
`retweet_count` INT(11) DEFAULT 0,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_likes` (


`tweet_id` VARCHAR(50) NOT NULL,
`username` VARCHAR(20) NOT NULL, -- the person who liked the tweet / reply,
matches to `username` in phone_twitter_accounts

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`tweet_id`, `username`),


FOREIGN KEY (`username`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
-- no foreign key on tweet_id as it should still show in the feed, even if the
tweet is deleted
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_retweets` (


`tweet_id` VARCHAR(50) NOT NULL,
`username` VARCHAR(20) NOT NULL, -- the person who retweeted the tweet / reply,
matches to `username` in phone_twitter_accounts

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`tweet_id`, `username`),


FOREIGN KEY (`username`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
-- no foreign key on tweet_id as it should still show in the feed, even if the
tweet is deleted
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_promoted` (


`tweet_id` VARCHAR(50) NOT NULL,
`promotions` INT(11) NOT NULL DEFAULT 0, -- how how many times this tweet
should be promoted
`views` INT(11) NOT NULL DEFAULT 0, -- how many times this tweet has been
promoted

PRIMARY KEY (`tweet_id`),


FOREIGN KEY (`tweet_id`) REFERENCES `phone_twitter_tweets`(`id`) ON DELETE
CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_messages` (


`id` VARCHAR(10) NOT NULL,

`sender` VARCHAR(20) NOT NULL, -- the person who sent the message, matches to
`username` in phone_twitter_accounts
`recipient` VARCHAR(20) NOT NULL, -- the person who received the message,
matches to `username` in phone_twitter_accounts

`content` VARCHAR(1000),
`attachments` TEXT, -- json array of attachments

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`sender`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`recipient`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_twitter_notifications` (


`id` VARCHAR(10) NOT NULL,
`username` VARCHAR(20) NOT NULL, -- the person who received the notification,
matches to `username` in phone_twitter_accounts
`from` VARCHAR(20) NOT NULL, -- the person who sent the notification, matches
to `username` in phone_twitter_accounts

`type` VARCHAR(20) NOT NULL, -- like, retweet, reply, follow


`tweet_id` VARCHAR(50) DEFAULT NULL, -- the tweet / reply this notification is
about

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_twitter_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`from`) REFERENCES `phone_twitter_accounts`(`username`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- PHONE
CREATE TABLE IF NOT EXISTS `phone_phone_contacts` (
`contact_phone_number` VARCHAR(15) NOT NULL, -- the phone number of the contact
`firstname` VARCHAR(50) NOT NULL DEFAULT "",
`lastname` VARCHAR(50) NOT NULL DEFAULT "",
`profile_image` VARCHAR(500) DEFAULT NULL,
`email` VARCHAR(50) DEFAULT NULL,
`address` VARCHAR(50) DEFAULT NULL,
`favourite` BOOLEAN DEFAULT FALSE,
`phone_number` VARCHAR(15) NOT NULL, -- the phone number of the person who
added the contact

PRIMARY KEY (`contact_phone_number`, `phone_number`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_phone_calls` (


`id` VARCHAR(10) NOT NULL,
`caller` VARCHAR(15) NOT NULL, -- the phone number of the person who called
`callee` VARCHAR(15) NOT NULL, -- the phone number of the person who was called

`duration` INT(11) NOT NULL DEFAULT 0,


`answered` BOOLEAN DEFAULT FALSE, -- whether the call was answered or not

`hide_caller_id` BOOLEAN DEFAULT FALSE, -- whether the caller's phone number


was hidden or not

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_phone_blocked_numbers` (


`phone_number` VARCHAR(15) NOT NULL, -- the phone number of the person who
blocked the number
`blocked_number` VARCHAR(15) NOT NULL, -- the phone number that was blocked

PRIMARY KEY (`phone_number`, `blocked_number`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_phone_voicemail` (


`id` VARCHAR(10) NOT NULL,

`caller` VARCHAR(15) NOT NULL,


`callee` VARCHAR(15) NOT NULL,

`url` VARCHAR(500) NOT NULL,


`duration` INT NOT NULL,
`hide_caller_id` BOOLEAN DEFAULT FALSE,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- INSTAGRAM
CREATE TABLE IF NOT EXISTS `phone_instagram_accounts` (
`display_name` VARCHAR(30) NOT NULL,

`username` VARCHAR(20) NOT NULL,


`password` VARCHAR(100) NOT NULL,

`profile_image` VARCHAR(500) DEFAULT NULL,


`bio` VARCHAR(100) DEFAULT NULL,

`post_count` INT(11) NOT NULL DEFAULT 0,


`story_count` INT(11) NOT NULL DEFAULT 0,
`follower_count` INT(11) NOT NULL DEFAULT 0,
`following_count` INT(11) NOT NULL DEFAULT 0,

`phone_number` VARCHAR(15) NOT NULL,

`private` BOOLEAN DEFAULT FALSE,

`verified` BOOLEAN DEFAULT FALSE,


`date_joined` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`username`),
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_loggedin` (


`phone_number` VARCHAR(15) NOT NULL,
`username` VARCHAR(20) NOT NULL,

PRIMARY KEY (`phone_number`),


FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_follows` (


`followed` VARCHAR(20) NOT NULL, -- the person followed, matches to `username`
in phone_instagram_accounts
`follower` VARCHAR(20) NOT NULL, -- the person following, matches to `username`
in phone_instagram_accounts

PRIMARY KEY (`followed`, `follower`),


FOREIGN KEY (`followed`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`follower`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_posts` (


`id` VARCHAR(10) NOT NULL,

`media` TEXT, -- json array of attached media


`caption` VARCHAR(500) NOT NULL DEFAULT "",
`location` VARCHAR(50) DEFAULT NULL,

`like_count` INT(11) NOT NULL DEFAULT 0,


`comment_count` INT(11) NOT NULL DEFAULT 0,

`username` VARCHAR(20) NOT NULL, -- the person who posted, matches to


`username` in phone_instagram_accounts

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_comments` (


`id` VARCHAR(10) NOT NULL,
`post_id` VARCHAR(50) NOT NULL, -- the post this comment was made on, matches
to `id` in phone_instagram_posts

`username` VARCHAR(20) NOT NULL, -- the person who commented, matches to


`username` in phone_instagram_accounts
`comment` VARCHAR(500) NOT NULL DEFAULT "",
`like_count` INT(11) NOT NULL DEFAULT 0,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`post_id`) REFERENCES `phone_instagram_posts`(`id`) ON DELETE
CASCADE,
FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_likes` (


`id` VARCHAR(10) NOT NULL, -- the post / comment this like was on, matches to
`id` in phone_instagram_posts / phone_instagram_comments
`username` VARCHAR(20) NOT NULL, -- the person who liked, matches to `username`
in phone_instagram_accounts
`is_comment` BOOLEAN NOT NULL DEFAULT FALSE, -- whether this like was on a
comment or a post

PRIMARY KEY (`id`, `username`),


FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_messages` (


`id` VARCHAR(10) NOT NULL,

`sender` VARCHAR(20) NOT NULL, -- the person who sent the message, matches to
`username` in phone_instagram_accounts
`recipient` VARCHAR(20) NOT NULL, -- the person who received the message,
matches to `username` in phone_instagram_accounts

`content` VARCHAR(1000),
`attachments` TEXT, -- json array of attachments

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`sender`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`recipient`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_notifications` (


`id` VARCHAR(10) NOT NULL,
`username` VARCHAR(20) NOT NULL,
`from` VARCHAR(20) NOT NULL,

`type` VARCHAR(20) NOT NULL, -- like, comment, follow


`post_id` VARCHAR(50) DEFAULT NULL, -- the post / comment this notification is
about

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`from`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `phone_instagram_stories` (
`id` VARCHAR(10) NOT NULL,
`username` VARCHAR(20) NOT NULL,
`image` VARCHAR(500) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_stories_views` (


`story_id` VARCHAR(50) NOT NULL,
`viewer` VARCHAR(20) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`story_id`, `viewer`),


FOREIGN KEY (`story_id`) REFERENCES `phone_instagram_stories`(`id`) ON DELETE
CASCADE,
FOREIGN KEY (`viewer`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_instagram_follow_requests` (


`requester` VARCHAR(20) NOT NULL,
`requestee` VARCHAR(20) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`requester`, `requestee`),


FOREIGN KEY (`requester`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`requestee`) REFERENCES `phone_instagram_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CLOCK
CREATE TABLE IF NOT EXISTS `phone_clock_alarms` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`hours` INT(2) NOT NULL DEFAULT 0,


`minutes` INT(2) NOT NULL DEFAULT 0,

`label` VARCHAR(50) DEFAULT NULL,


`enabled` BOOLEAN DEFAULT TRUE,

PRIMARY KEY (`id`, `phone_number`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- TINDER
CREATE TABLE IF NOT EXISTS `phone_tinder_accounts` (
`name` VARCHAR(50) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,
`photos` TEXT, -- json array of photos
`bio` VARCHAR(500) DEFAULT NULL,
`dob` DATE NOT NULL,

`is_male` BOOLEAN NOT NULL,


`interested_men` BOOLEAN NOT NULL,
`interested_women` BOOLEAN NOT NULL,

PRIMARY KEY (`phone_number`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tinder_swipes` (


`swiper` VARCHAR(15) NOT NULL, -- the phone number of the person who swiped
`swipee` VARCHAR(15) NOT NULL, -- the phone number of the person who was swiped
on

`liked` BOOLEAN NOT NULL DEFAULT FALSE, -- whether the swiper liked the swipee
or not

PRIMARY KEY (`swiper`, `swipee`),


FOREIGN KEY (`swiper`) REFERENCES `phone_phones`(`phone_number`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`swipee`) REFERENCES `phone_phones`(`phone_number`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tinder_matches` (


`phone_number_1` VARCHAR(15) NOT NULL,
`phone_number_2` VARCHAR(15) NOT NULL,

`latest_message` VARCHAR(1000) DEFAULT NULL, -- the latest message sent between


the two people
`latest_message_timestamp` TIMESTAMP, -- the timestamp of the latest message
sent between the two people

PRIMARY KEY (`phone_number_1`, `phone_number_2`),


FOREIGN KEY (`phone_number_1`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`phone_number_2`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tinder_messages` (


`id` VARCHAR(10) NOT NULL, -- the message id

`sender` VARCHAR(15) NOT NULL, -- the phone number of the person who sent the
message
`recipient` VARCHAR(15) NOT NULL, -- the phone number of the person who
received the message

`content` VARCHAR(1000),
`attachments` TEXT, -- json array of attachments

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`sender`) REFERENCES `phone_phones`(`phone_number`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`recipient`) REFERENCES `phone_phones`(`phone_number`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- MESSAGES
CREATE TABLE IF NOT EXISTS `phone_message_channels` (
`id` INT NOT NULL AUTO_INCREMENT,

`is_group` BOOLEAN NOT NULL DEFAULT FALSE,


`name` VARCHAR(50) DEFAULT NULL,
`last_message` VARCHAR(50) NOT NULL DEFAULT "",
`last_message_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_message_members` (


`channel_id` INT NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`is_owner` BOOLEAN NOT NULL DEFAULT FALSE,


`deleted` BOOLEAN NOT NULL DEFAULT FALSE, -- if the member has deleted the
channel
`unread` INT NOT NULL DEFAULT 0,

PRIMARY KEY (`channel_id`, `phone_number`),


FOREIGN KEY (`channel_id`) REFERENCES `phone_message_channels`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_message_messages` (


`id` INT NOT NULL AUTO_INCREMENT,

`channel_id` INT NOT NULL,

`sender` VARCHAR(15) NOT NULL,


`content` VARCHAR(1000),
`attachments` TEXT, -- json array of attachments
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`channel_id`) REFERENCES `phone_message_channels`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- DARKCHAT
CREATE TABLE IF NOT EXISTS `phone_darkchat_accounts` (
`phone_number` VARCHAR(15) NOT NULL,
`username` VARCHAR(20) NOT NULL,

PRIMARY KEY (`username`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_darkchat_channels` (


`name` VARCHAR(50) NOT NULL,
`last_message` VARCHAR(50) NOT NULL DEFAULT "",
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,

PRIMARY KEY (`name`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_darkchat_members` (


`channel_name` VARCHAR(50) NOT NULL,
`username` VARCHAR(20) NOT NULL,

PRIMARY KEY (`channel_name`, `username`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_darkchat_messages` (


`id` INT(11) NOT NULL AUTO_INCREMENT,
`channel` VARCHAR(50) NOT NULL,
`sender` VARCHAR(20) NOT NULL,
`content` VARCHAR(1000),
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- WALLET
CREATE TABLE IF NOT EXISTS `phone_wallet_transactions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`phone_number` VARCHAR(15) NOT NULL,

`amount` INT(11) NOT NULL,


`company` VARCHAR(50) NOT NULL,
`logo` VARCHAR(200) DEFAULT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- YELLOW PAGES
CREATE TABLE IF NOT EXISTS `phone_yellow_pages_posts` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`description` VARCHAR(1000) NOT NULL,

`attachment` VARCHAR(500) DEFAULT NULL,


`price` INT(11) DEFAULT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- BACKUPS
CREATE TABLE IF NOT EXISTS `phone_backups` (
`id` VARCHAR(100) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- MARKETPLACE
CREATE TABLE IF NOT EXISTS `phone_marketplace_posts` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`title` VARCHAR(50) NOT NULL,


`description` VARCHAR(1000) NOT NULL,
`attachments` TEXT, -- json array of attachments
`price` INT(11) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- MUSIC
CREATE TABLE IF NOT EXISTS `phone_music_playlists` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`name` VARCHAR(50) NOT NULL,


`cover` VARCHAR(500) DEFAULT NULL,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_music_saved_playlists` (


`playlist_id` VARCHAR(50) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

PRIMARY KEY (`playlist_id`, `phone_number`),


FOREIGN KEY (`playlist_id`) REFERENCES `phone_music_playlists`(`id`) ON DELETE
CASCADE,
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_music_songs` (


`song_id` VARCHAR(100) NOT NULL,
`playlist_id` VARCHAR(50) NOT NULL,

PRIMARY KEY (`song_id`, `playlist_id`),


FOREIGN KEY (`playlist_id`) REFERENCES `phone_music_playlists`(`id`) ON DELETE
CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- MAIL
CREATE TABLE IF NOT EXISTS `phone_mail_accounts` (
`address` VARCHAR(100) NOT NULL,
`password` VARCHAR(100) NOT NULL,
PRIMARY KEY (`address`)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_mail_loggedin` (


`address` VARCHAR(100) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

PRIMARY KEY (`phone_number`),


FOREIGN KEY (`address`) REFERENCES `phone_mail_accounts`(`address`) ON DELETE
CASCADE,
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_mail_messages` (


`id` VARCHAR(10) NOT NULL,

`recipient` VARCHAR(100) NOT NULL,


`sender` VARCHAR(100) NOT NULL,

`subject` VARCHAR(100) NOT NULL,


`content` TEXT NOT NULL,
`attachments` LONGTEXT, -- json array of attachments
`actions` LONGTEXT, -- json array of actions

`read` BOOLEAN NOT NULL DEFAULT FALSE,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_mail_deleted` (


`message_id` VARCHAR(10) NOT NULL,
`address` VARCHAR(100) NOT NULL,

PRIMARY KEY (`message_id`, `address`),


FOREIGN KEY (`message_id`) REFERENCES `phone_mail_messages`(`id`) ON DELETE
CASCADE,
FOREIGN KEY (`address`) REFERENCES `phone_mail_accounts`(`address`) ON DELETE
CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- COMPANIES APP
CREATE TABLE IF NOT EXISTS `phone_services_channels` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,
`company` VARCHAR(50) NOT NULL,

`last_message` VARCHAR(100) DEFAULT NULL,


`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_services_messages` (


`id` VARCHAR(10) NOT NULL,
`channel_id` VARCHAR(50) NOT NULL,

`sender` VARCHAR(15) NOT NULL,


`message` VARCHAR(1000) NOT NULL,

`x_pos` INT(11) DEFAULT NULL,


`y_pos` INT(11) DEFAULT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`channel_id`) REFERENCES `phone_services_channels`(`id`) ON DELETE
CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- MAPS
CREATE TABLE IF NOT EXISTS `phone_maps_locations` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`name` VARCHAR(50) NOT NULL,

`x_pos` FLOAT NOT NULL,


`y_pos` FLOAT NOT NULL,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CRYPTO
CREATE TABLE IF NOT EXISTS `phone_crypto` (
`id` VARCHAR(100) NOT NULL, -- player identifier
`coin` VARCHAR(15) NOT NULL, -- coin, for example "bitcoin"
`amount` DOUBLE NOT NULL DEFAULT 0, -- amount of coins
`invested` INT(11) NOT NULL DEFAULT 0, -- amount of $$$ invested

PRIMARY KEY (`id`, `coin`)


) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- ACCOUNT SWITCHER
CREATE TABLE IF NOT EXISTS `phone_logged_in_accounts` (
`phone_number` VARCHAR(15) NOT NULL,
`app` VARCHAR(50) NOT NULL,
`username` VARCHAR(100) NOT NULL,

PRIMARY KEY (`phone_number`, `app`, `username`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- TIKTOK
CREATE TABLE IF NOT EXISTS `phone_tiktok_accounts` (
`name` VARCHAR(30) NOT NULL,
`bio` VARCHAR(100) DEFAULT NULL,
`avatar` VARCHAR(500) DEFAULT NULL,

`username` VARCHAR(20) NOT NULL,


`password` VARCHAR(100) NOT NULL,
`verified` BOOLEAN DEFAULT FALSE,

`follower_count` INT(11) NOT NULL DEFAULT 0,


`following_count` INT(11) NOT NULL DEFAULT 0,
`like_count` INT(11) NOT NULL DEFAULT 0,
`video_count` INT(11) NOT NULL DEFAULT 0,

`twitter` VARCHAR(20) DEFAULT NULL,


`instagram` VARCHAR(20) DEFAULT NULL,

`show_likes` BOOLEAN DEFAULT TRUE,

`phone_number` VARCHAR(15) NOT NULL,


`date_joined` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`username`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_loggedin` (


`username` VARCHAR(20) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

PRIMARY KEY (`phone_number`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_follows` (


`followed` VARCHAR(20) NOT NULL,
`follower` VARCHAR(20) NOT NULL,

PRIMARY KEY (`followed`, `follower`),


FOREIGN KEY (`followed`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`follower`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_videos` (


`id` VARCHAR(10) NOT NULL,

`username` VARCHAR(20) NOT NULL,

`src` VARCHAR(500) NOT NULL,


`caption` VARCHAR(100) DEFAULT NULL,
`metadata` LONGTEXT, -- json array of metadata
`music` TEXT DEFAULT NULL,

`likes` INT(11) NOT NULL DEFAULT 0,


`comments` INT(11) NOT NULL DEFAULT 0,
`views` INT(11) NOT NULL DEFAULT 0,
`saves` INT(11) NOT NULL DEFAULT 0,

`pinned_comment` VARCHAR(10) DEFAULT NULL,


`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_likes` (


`username` VARCHAR(20) NOT NULL,
`video_id` VARCHAR(10) NOT NULL,

PRIMARY KEY (`username`, `video_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_views` (


`username` VARCHAR(20) NOT NULL,
`video_id` VARCHAR(10) NOT NULL,

PRIMARY KEY (`username`, `video_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_saves` (


`username` VARCHAR(20) NOT NULL,
`video_id` VARCHAR(10) NOT NULL,

PRIMARY KEY (`username`, `video_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_comments` (


`id` VARCHAR(10) NOT NULL,
`reply_to` VARCHAR(10) DEFAULT NULL,
`video_id` VARCHAR(10) NOT NULL,

`username` VARCHAR(20) NOT NULL,


`comment` VARCHAR(550) NOT NULL,

`likes` INT(11) NOT NULL DEFAULT 0,


`replies` INT(11) NOT NULL DEFAULT 0,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`reply_to`) REFERENCES `phone_tiktok_comments`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_comments_likes` (


`username` VARCHAR(20) NOT NULL,
`comment_id` VARCHAR(10) NOT NULL,

PRIMARY KEY (`username`, `comment_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`comment_id`) REFERENCES `phone_tiktok_comments`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_channels` (


`id` VARCHAR(10) NOT NULL,

`last_message` VARCHAR(50) NOT NULL,

`member_1` VARCHAR(20) NOT NULL,


`member_2` VARCHAR(20) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE


CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


UNIQUE KEY (`member_1`, `member_2`),
FOREIGN KEY (`member_1`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`member_2`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_messages` (


`id` VARCHAR(10) NOT NULL,
`channel_id` VARCHAR(10) NOT NULL,
`sender` VARCHAR(20) NOT NULL,

`content` VARCHAR(500) NOT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`channel_id`) REFERENCES `phone_tiktok_channels`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`sender`) REFERENCES `phone_tiktok_accounts`(`username`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_pinned_videos` (


`username` VARCHAR(20) NOT NULL,
`video_id` VARCHAR(10) NOT NULL,

PRIMARY KEY (`username`, `video_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_notifications` (


`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(20) NOT NULL,

`from` VARCHAR(20) NOT NULL,


`type` VARCHAR(20) NOT NULL, -- like, comment, follow, save, reply or
like_comment
`video_id` VARCHAR(10) DEFAULT NULL,
`comment_id` VARCHAR(10) DEFAULT NULL,

`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`from`) REFERENCES `phone_tiktok_accounts`(`username`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`video_id`) REFERENCES `phone_tiktok_videos`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`comment_id`) REFERENCES `phone_tiktok_comments`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `phone_tiktok_unread_messages` (


`username` VARCHAR(20) NOT NULL,
`channel_id` VARCHAR(10) NOT NULL,
`amount` INT(11) NOT NULL DEFAULT 0,

PRIMARY KEY (`username`, `channel_id`),


FOREIGN KEY (`username`) REFERENCES `phone_tiktok_accounts`(`username`) ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`channel_id`) REFERENCES `phone_tiktok_channels`(`id`) ON DELETE
CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- VOICE MEMOS
CREATE TABLE IF NOT EXISTS `phone_voice_memos_recordings` (
`id` VARCHAR(10) NOT NULL,
`phone_number` VARCHAR(15) NOT NULL,

`file_name` VARCHAR(50) NOT NULL,


`file_url` VARCHAR(500) NOT NULL,
`file_length` INT(11) NOT NULL,

`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),


FOREIGN KEY (`phone_number`) REFERENCES `phone_phones`(`phone_number`) ON
DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

DELIMITER //
-- Instagram triggers
-- Incrémentation du post_count après l'ajout d'un post
CREATE TRIGGER IF NOT EXISTS phone_instagram_increment_post_count
AFTER INSERT ON phone_instagram_posts
FOR EACH ROW
WHEN NEW.username IS NOT NULL
BEGIN
UPDATE phone_instagram_accounts
SET post_count = post_count + 1
WHERE username = NEW.username;
END;

-- Décrémentation du post_count après la suppression d'un post


CREATE TRIGGER IF NOT EXISTS phone_instagram_decrement_post_count
AFTER DELETE ON phone_instagram_posts
FOR EACH ROW
WHEN OLD.username IS NOT NULL
BEGIN
UPDATE phone_instagram_accounts
SET post_count = CASE WHEN post_count > 0 THEN post_count - 1 ELSE 0 END
WHERE username = OLD.username;
END;

-- Incrémentation du story_count après l'ajout d'une story


CREATE TRIGGER IF NOT EXISTS phone_instagram_increment_story_count
AFTER INSERT ON phone_instagram_stories
FOR EACH ROW
WHEN NEW.username IS NOT NULL
BEGIN
UPDATE phone_instagram_accounts
SET story_count = story_count + 1
WHERE username = NEW.username;
END;

-- Décrémentation du story_count après la suppression d'une story


CREATE TRIGGER IF NOT EXISTS phone_instagram_decrement_story_count
AFTER DELETE ON phone_instagram_stories
FOR EACH ROW
WHEN OLD.username IS NOT NULL
BEGIN
UPDATE phone_instagram_accounts
SET story_count = CASE WHEN story_count > 0 THEN story_count - 1 ELSE 0 END
WHERE username = OLD.username;
END;

-- Incrémentation du comment_count après l'ajout d'un commentaire


CREATE TRIGGER IF NOT EXISTS phone_instagram_increment_comment_count
AFTER INSERT ON phone_instagram_comments
FOR EACH ROW
WHEN NEW.post_id IS NOT NULL
BEGIN
UPDATE phone_instagram_posts
SET comment_count = comment_count + 1
WHERE id = NEW.post_id;
END;

-- Décrémentation du comment_count après la suppression d'un commentaire


CREATE TRIGGER IF NOT EXISTS phone_instagram_decrement_comment_count
AFTER DELETE ON phone_instagram_comments
FOR EACH ROW
WHEN OLD.post_id IS NOT NULL
BEGIN
UPDATE phone_instagram_posts
SET comment_count = CASE WHEN comment_count > 0 THEN comment_count - 1 ELSE 0
END
WHERE id = OLD.post_id;
END;

-- Incrémentation et décrémentation des likes sur posts et commentaires


CREATE TRIGGER IF NOT EXISTS phone_instagram_increment_like_count_post
AFTER INSERT ON phone_instagram_likes
FOR EACH ROW
WHEN NEW.is_comment = 0
BEGIN
UPDATE phone_instagram_posts
SET like_count = like_count + 1
WHERE id = NEW.post_id;
END;

CREATE TRIGGER IF NOT EXISTS phone_instagram_increment_like_count_comment


AFTER INSERT ON phone_instagram_likes
FOR EACH ROW
WHEN NEW.is_comment = 1
BEGIN
UPDATE phone_instagram_comments
SET like_count = like_count + 1
WHERE id = NEW.post_id;
END;

CREATE TRIGGER IF NOT EXISTS phone_instagram_decrement_like_count_post


AFTER DELETE ON phone_instagram_likes
FOR EACH ROW
WHEN OLD.is_comment = 0
BEGIN
UPDATE phone_instagram_posts
SET like_count = CASE WHEN like_count > 0 THEN like_count - 1 ELSE 0 END
WHERE id = OLD.post_id;
END;

CREATE TRIGGER IF NOT EXISTS phone_instagram_decrement_like_count_comment


AFTER DELETE ON phone_instagram_likes
FOR EACH ROW
WHEN OLD.is_comment = 1
BEGIN
UPDATE phone_instagram_comments
SET like_count = CASE WHEN like_count > 0 THEN like_count - 1 ELSE 0 END
WHERE id = OLD.post_id;
END;

-- Mise à jour des followers et followings


CREATE TRIGGER IF NOT EXISTS phone_instagram_update_counts_after_follow
AFTER INSERT ON phone_instagram_follows
FOR EACH ROW
BEGIN
UPDATE phone_instagram_accounts
SET follower_count = follower_count + 1
WHERE username = NEW.followed;

UPDATE phone_instagram_accounts
SET following_count = following_count + 1
WHERE username = NEW.follower;
END;
CREATE TRIGGER IF NOT EXISTS phone_instagram_update_counts_after_unfollow
AFTER DELETE ON phone_instagram_follows
FOR EACH ROW
BEGIN
UPDATE phone_instagram_accounts
SET follower_count = CASE WHEN follower_count > 0 THEN follower_count - 1 ELSE
0 END
WHERE username = OLD.followed;

UPDATE phone_instagram_accounts
SET following_count = CASE WHEN following_count > 0 THEN following_count - 1
ELSE 0 END
WHERE username = OLD.follower;
END;

//
DELIMITER ;

You might also like