MongoDB Schema Design Concepts
for a Social CRM System
Ashwin Mangale
CTO, Vector Brook
ashwin.mangale@vectorbrook.com
Pre...
Talk Outline
● MongoDB Schema Basics Recap
● Topaz Social CRM Overview
● Data Model Overview
● Interactions
● Service Case...
MongoDB Schema Basics Recap
● Document: JSON object (1 or more name:value
pairs)
● Name is a string, value can be of foll ...
MongoDB Schema Basics (Contd.)
● Relational algebra defines concept of a join
● No concept of join with documents and coll...
Topaz Social CRM Overview
● Open Source
● https://github.com/vectorbrook/TopazSocial
● GNU Affero General Public License (...
Topaz Social CRM Overview
(Contd.)
● CRM Evolution
● From systems of record to systems of engagement
● Earlier, focus of t...
Topaz Social Data Model Overview
Topaz Social Data Model Overview
(Contd.)
● Customer details: cust_accounts, cust_sites,
cust_contacts
● User details: use...
Interactions
● Interactions are central to the system
● Each interaction/engagement with the customer/prospect
is recorded...
Service Cases
● service_case is used to store information about
customer problems/questions etc.
● Interactions with the c...
Service Case - JSON
● { "_id" : ObjectId("5082dc72def2c908fa000060"),
"name" : "Prod1 not working",
"assigned_to" : Object...
Service Case Interaction JSON
● { "_id" :
ObjectId("5082dcb8def2c908fa000081"),
"context_id" :
ObjectId("5082dc72def2c908f...
Forums
● forum_categories and forums are each stored
as separate collections, with appropriate links
● forum_topics are em...
Forum JSON
● { "_id" : ObjectId("5082fd6ddef2c90fe9000008"),
"name" : "Product Issues",
"description" : "Product Issues",
...
Forum Post (Interaction) JSON
● { "_id" : ObjectId("5082fdb3def2c90fe900001e"),
"parent_context_id" :
ObjectId("5082fd6dde...
Content Marketing Pages
● To facilitate inbound marketing, the system allows creation of
content marketing pages
● The cm_...
Customer Details
● cust_accounts
● cust_sites
● cust_contacts
● Decision to embed cust_sites and
cust_contacts within the ...
Customer Account JSON
●
{ "_id" : ObjectId("5082d94ddef2c908fa000008"),
"name" : "Fantastico Corp",
"customer_sites" : [{"...
Summary
● We describe how a MongoDB based document
is used to design and implement a Social CRM
system
● Capturing custome...
Upcoming SlideShare
Loading in …5
×

MongoDB Topazsocial CRM

2,185 views

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,185
On SlideShare
0
From Embeds
0
Number of Embeds
75
Actions
Shares
0
Downloads
29
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

MongoDB Topazsocial CRM

  1. 1. MongoDB Schema Design Concepts for a Social CRM System Ashwin Mangale CTO, Vector Brook ashwin.mangale@vectorbrook.com Presented at MongoDB Pune, Oct. 21, 2012
  2. 2. Talk Outline ● MongoDB Schema Basics Recap ● Topaz Social CRM Overview ● Data Model Overview ● Interactions ● Service Cases ● Forums ● Content Marketing Pages ● Conclusions
  3. 3. MongoDB Schema Basics Recap ● Document: JSON object (1 or more name:value pairs) ● Name is a string, value can be of foll types (dependent on driver/language): String, Symbol, Integer, Float, Boolean, Date, Array, ObjectId, Document ● A collection consists of one or more documents ● Loosely: Document ~ row and collection ~ table in a relational system
  4. 4. MongoDB Schema Basics (Contd.) ● Relational algebra defines concept of a join ● No concept of join with documents and collections ● Relations between collections come down to a decision between link vs embed ● Embedding allows atomic updates of outer and embedded entity ● 1-many relations ● Array ● Embedded document ● Links between collections ● Many-many relations ● Links between collections
  5. 5. Topaz Social CRM Overview ● Open Source ● https://github.com/vectorbrook/TopazSocial ● GNU Affero General Public License (AGPL) ● Technology Stack ● Ruby/Rails 3.2 ● MongoDB ● Twitter Bootstrap ● Philosophy ● Simplicity: Keep code simple and gem dependencies to minimal ● Lightweight: Focus on common use cases
  6. 6. Topaz Social CRM Overview (Contd.) ● CRM Evolution ● From systems of record to systems of engagement ● Earlier, focus of the CRM system was on storing data about customers, service cases, leads, opportunities ● With the growth of social media, focus is shifting to capturing information about customer engagement ● Concept of Interaction ● Captures each interaction with a prospect/customer ● Focus of the system is on the interactions ● Interactions happen within the context of well-known CRM entities ● Allows for a better understanding of customer needs, leading to a overall better customer experience
  7. 7. Topaz Social Data Model Overview
  8. 8. Topaz Social Data Model Overview (Contd.) ● Customer details: cust_accounts, cust_sites, cust_contacts ● User details: users (with roles) ● Customer engagement details: interactions ● Service cases: service_cases, service_case_logs ● Forums: forum_categories, forums, forum_topics ● Content marketing: cm_page_categories, cm_pages
  9. 9. Interactions ● Interactions are central to the system ● Each interaction/engagement with the customer/prospect is recorded within the appropriate context ● Interactions are stored in a separate collection, and are linked from the contextual entity (eg. forum_topics and service_cases) ● Decision to store interactions in their own collection, versus embedding in the contextual entity: primarily to allow for queries to be run directly on interactions, and not have to always access through the contextual entity
  10. 10. Service Cases ● service_case is used to store information about customer problems/questions etc. ● Interactions with the customer are linked to the service_case entity ● service_case_log entity stores updates made by employees as they work on the case and are not visible to the customer ● The service_case_logs entity is embedded in the service_cases entity, since the logs are always accessed from the service_case, and never directly.
  11. 11. Service Case - JSON ● { "_id" : ObjectId("5082dc72def2c908fa000060"), "name" : "Prod1 not working", "assigned_to" : ObjectId("5082d88cdef2c908f6000001"), "service_case_logs" : [ { "_id" : ObjectId("5082dcc6def2c908fa00008c"), "user_id" : ObjectId("5082d88cdef2c908f6000001"), "log_text" : "Gave update to cust" } ], "customer_account_id" : ObjectId("5082d94ddef2c908fa000008"), "priority" : 1, "created_by" : ObjectId("5082d88cdef2c908f6000001"), "solution" : "", "description" : "Prod1 not working", "status" : "Open" }
  12. 12. Service Case Interaction JSON ● { "_id" : ObjectId("5082dcb8def2c908fa000081"), "context_id" : ObjectId("5082dc72def2c908fa000060"), "context" : "ServiceCase", "body" : "Cust wants status update", "user_id" : ObjectId("5082d88cdef2c908f6000001") }
  13. 13. Forums ● forum_categories and forums are each stored as separate collections, with appropriate links ● forum_topics are embedded within forums ● Interaction entity used to store the actual posts in the forums by users ● Each interaction is within the context of a forum_topic, and is linked to the topic
  14. 14. Forum JSON ● { "_id" : ObjectId("5082fd6ddef2c90fe9000008"), "name" : "Product Issues", "description" : "Product Issues", "forum_category_id" : ObjectId("5082da0ddef2c908fa000027"), “forum_topics”: [{ "_id" : ObjectId("5082fd8cdef2c90fe9000012"), "title" : "Product display not clear", "user_id": ObjectId("5082d88cdef2c908f6000001"), }, { "_id" : ObjectId("5082dd08def2c908fa0000a1"), "title" : "Product does not work", "user_id": ObjectId("5082d88cdef2c908f6000001"), } ] }
  15. 15. Forum Post (Interaction) JSON ● { "_id" : ObjectId("5082fdb3def2c90fe900001e"), "parent_context_id" : ObjectId("5082fd6ddef2c90fe9000008"), "parent_context" : "Forum", "context_id" : ObjectId("5082fd8cdef2c90fe9000012"), "context" : "ForumTopic", "user_id" : ObjectId("5082d88cdef2c908f6000001") }
  16. 16. Content Marketing Pages ● To facilitate inbound marketing, the system allows creation of content marketing pages ● The cm_pages are organized within cm_page_categories, each of which are separate collections ● cm_page_categories can be nested (tree) ● Links between cm_pages and cm_page_categories can be established ● Possible to change category names, and category hierarchy efficiently, without impacting the cm_pages ● Interactions can be created in the context of a cm_page
  17. 17. Customer Details ● cust_accounts ● cust_sites ● cust_contacts ● Decision to embed cust_sites and cust_contacts within the cust_account document
  18. 18. Customer Account JSON ● { "_id" : ObjectId("5082d94ddef2c908fa000008"), "name" : "Fantastico Corp", "customer_sites" : [{"_id" : ObjectId("5082d94ddef2c908fa000009"), "name" : "HQ", "description" : "Worldwide HQ", "address_line1" : "100 Broadway", "state" : "New York" "city" : "New York", "country" : "United States", "zipcode" : "10001", [ { "customer_contacts" : [ { "_id" : ObjectId("5082d94ddef2c908fa00000a"), "email_addr" : "jim@fantastico.com", }, { "_id" : ObjectId("5082d963def2c908fa000012"), "email_addr" : "phil@fantastico.com", } ], } ] } ] }
  19. 19. Summary ● We describe how a MongoDB based document is used to design and implement a Social CRM system ● Capturing customer interactions efficiently is central to the design of Social CRM systems ● The interactions happen within the context of other CRM entities such as service cases, forums, and content marketing pages ● Access patterns are the key drivers to design decisions of whether to embed or link

×