Skip to content

Instantly share code, notes, and snippets.

@emanuel
Last active November 1, 2017 15:10
Show Gist options
  • Save emanuel/fbafe0380b910722511f38cf1d493608 to your computer and use it in GitHub Desktop.
Save emanuel/fbafe0380b910722511f38cf1d493608 to your computer and use it in GitHub Desktop.

Entities

The entities identified so far that need to data to be stored and have relationships with each other are the following:

  • Brand
  • Vertical
  • Fans
  • Community
  • Campaigns
  • Hashtag
  • UGC
  • Users

Entity Relations Diagram

ER Diagram

Brand

Represents Zyper client and should have all the attributes we need to keep track to identify the Brand and or operate in their behalf.

Brands Table (fields description)

NAME OF FIELD TYPE DESCRIPTION
id integer [pk] key
name string name of the brand / client
street_address string address of the client
postal code string postal code of the client
insta_id integer instagram unique identifier [pk]
ig_username string instagram username
ig_password string instagram password if given
ig_public_email string instagram public email
ig_public_phone_country_code integer instagram phone country code
ig_public_phone_number integer instagram public phone number
ig_contact_phone_number integer instagram phone number
ig_url string url of the instagram account
ig_profile_pic_url string instagram profile pictures url
ig_media_count integer instagram total number of posts
ig_is_private boolean if the ig account is private
ig_is_verified boolean if ig account is verified
ig_category string what is the category of account ex: Comunity
ig_following_count integer total number of users being followed
ig_follower_count integer total number of followers
ig_followers_ratio integer ratio of following / followers
ig_biography string the last text biography from instagram
ig_latitude string registered instagram latitude
ig_longitude string registered instagram latitude
ig_external_url string website url from instagram
created_at integer timestamp of creation date
updated_at integer timestamp of last updated date
vertical_id integer foreign key for verticals table
community_id integer foreign key for communities

Notes:

  • One brand belongs to one community
  • One brand belongs to one vertical
  • N brands are followed by M fans
  • One brand enrolls in N campaigns
  • N brands have M potential candidates for campaigns

Vertical

Represents the various Areas that Zyper operates on (Fashion, Movies, Cars)

Verticals Table (fields description)

NAME OF FIELD TYPE DESCRIPTION
id integer key
name string name of the brand / client

Notes:

  • N verticals are appropriate to M candidates
  • One vertical is associated to one brand
  • N verticals are appropriate to M fans

Fan

Represents the Fans of a Brand that engage in a Social Media Campaign

Fans Table (fields description)

NAME OF FIELD TYPE DESCRIPTION
id integer [pk] key
name string name of the brand / client
street_address string address of the client
postal code string postal code of the client
insta_id integer instagram unique identifier [pk]
ig_username string instagram username
ig_password string instagram password if given
ig_public_email string instagram public email
ig_public_phone_country_code integer instagram phone country code
ig_public_phone_number integer instagram public phone number
ig_contact_phone_number integer instagram phone number
ig_url string url of the instagram account
ig_profile_pic_url string instagram profile pictures url
ig_media_count integer instagram total number of posts
ig_is_private boolean if the ig account is private
ig_is_verified boolean if ig account is verified
ig_category string what is the category of account ex: Comunity
ig_following_count integer total number of users being followed
ig_follower_count integer total number of followers
ig_followers_ratio integer ratio of following / followers
ig_biography string the last text biography from instagram
ig_latitude string registered instagram latitude
ig_longitude string registered instagram latitude
ig_external_url string website url from instagram
created_at integer timestamp of creation date
updated_at integer timestamp of last updated date

Notes:

  • N fans enroll in M campaigns
  • N fans are following M brands
  • One fan generates N UGSs
  • N fans are suited for M Verticals

Community

Represents the group of Fans of a Brand that is activated through a series of campaings.

Communities Table (fields description)

NAME OF FIELD TYPE DESCRIPTION
id integer key
name string name of the community
goal_num_users integer goal of total number of active fans
brand_id integer foreign key to brand_id

Campaigns

Describes the goals and duration of a campaign where a group of fans are enrolled to produce UGCs about the products of the Brand.

Communities Table (fields description)

NAME OF FIELD TYPE DESCRIPTION
id integer key
name string name of the community
goal_num_users integer goal of total number of active fans
community_id integer foreign key to communities
cost_per_fan decimal how much the brand is paying per fan
length_of_campaign integer number of days for the duration of the campaign
limit_geolocations array Lists of geolocations ids to restrict fans
total_active_fans integer Total number of fans that are active on the campaign
goal_total_UGC integer Total number of required UGC per campaign
goal_total_engagement_rate float Percentage of engagement with the UGC on the campaign
goal_total_reach integer Total number of people to reach with the campaign UGC

For each campaign at any moment in time we should be able to answear the following queries

Current situation

  • number of fans
  • number of UGC
  • number of likes
  • number of comments
  • number of reposts

calculated fields

  • total engagement ( sum of UGC total fans engagement %)
  • total reach / market voice ( sum of brand fans followers)
  • engagement (percentage of likes or comments or reposts or #hastag)
  • geolocations distribution
  • territorial reach

costs

Hashtag

  • id
  • tag
  • description
  • community_id

Multiple Hashtags can be associated with a Campaing and with the UGC produced by the fans

UGC

Stores the User generated content and the metrics of engagement.

  • id
  • url
  • name
  • caption
  • caption_edited
  • instagram_id
  • like_count
  • image_url
  • small_image_url
  • device_timestamp
  • created_at
  • hashtag_id
  • brand_id
  • community_id
  • campaign_id
  • fan_id

Candidates

Represents all the potential Fans of a Brand that have certain requirements like they are already following the brand, they use the brand hashtags, they have similar interests etc.

This entity represents a potential member of a future campaign. To be a successfull fan he needs to meet certain criteria like his reach, engagement rate, influence, style etc. and finally he has to accept to enroll in the campaign and fullfill the conditions the brand imposes.

NAME OF FIELD TYPE DESCRIPTION
id integer [pk] key
name string name of the brand / client
street_address string address of the client
postal code string postal code of the client
insta_id integer instagram unique identifier [pk]
ig_username string instagram username
ig_password string instagram password if given
ig_public_email string instagram public email
ig_public_phone_country_code integer instagram phone country code
ig_public_phone_number integer instagram public phone number
ig_contact_phone_number integer instagram phone number
ig_url string url of the instagram account
ig_profile_pic_url string instagram profile pictures url
ig_media_count integer instagram total number of posts
ig_is_private boolean if the ig account is private
ig_is_verified boolean if ig account is verified
ig_category string what is the category of account ex: Comunity
ig_following_count integer total number of users being followed
ig_follower_count integer total number of followers
ig_followers_ratio integer ratio of following / followers
ig_biography string the last text biography from instagram
ig_latitude string registered instagram latitude
ig_longitude string registered instagram latitude
ig_external_url string website url from instagram
created_at integer timestamp of creation date
updated_at integer timestamp of last updated date

Notes:

  • The candidates table needs more fields to capture the satus of the collection, and other important filtering criteria to be identified.
  • There are some basic criteria to filter candidates immediatly: (public vs. private account), number of followers bellow a certain Minimum, etc.

This is a sample of a statistic with the relevance of each of the candidate attributes. Some are exclusive to business accounts (attributes with count 155)

{
  "pk": 1321
  "username": 1321
  "full_name": 1321
  "is_private": 1321
  "profile_pic_url": 1321
  "is_verified": 1321
  "has_anonymous_profile_picture": 1321
  "media_count": 1321
  "follower_count": 1321
  "following_count": 1321
  "biography": 1321
  "external_url": 1321
  "usertags_count": 1321
  "is_favorite": 1321
  "has_chaining": 1321
  "hd_profile_pic_url_info": 1321
  "is_business": 1321
  "include_direct_blacklist_status": 1321
  "has_unseen_besties_media": 1321
  "auto_expand_chaining": 1321
  "geo_media_count": 1248
  "hd_profile_pic_versions": 1020
  "profile_pic_id": 971
  "chaining_suggestions": 608
  "has_biography_translation": 506
  "external_lynx_url": 271
  "public_email": 155
  "public_phone_number": 155
  "public_phone_country_code": 155
  "contact_phone_number": 155
  "city_id": 155
  "city_name": 155
  "zip": 155
  "address_street": 155
  "direct_messaging": 155
  "latitude": 155
  "longitude": 155
  "category": 155
  "is_call_to_action_enabled": 155
  "business_contact_method": 155
  "fb_page_call_to_action_id": 155
  "profile_context": 2
  "profile_context_links_with_user_ids": 2
  "profile_context_mutual_follow_ids": 2
}

Users

Users of the Zyper system

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment