Data Portfolio Project #02: Thiết kế cơ sở dữ liệu cho Doanh Nghiệp Giáo Dục giúp theo dõi quá trình tư vấn để tối ưu chuyển đổi Lead-to-Customer
Đây là Project thứ 2 trong series Data Portfolio Projects, trong project này mình sẽ cần thiết kế cơ sở dữ liệu (CSDL) cho một business thực tế.
Bussiness mình chọn là một doanh nghiệp kinh doanh sản phẩm giáo dục, cụ thể là các sản phẩm khóa học.
CSDL được thiết kế để giúp doanh nghiệp:
Đo lường tỷ lệ win rate và deal cycle: Để xác định được tỷ lệ khách hàng được chuyển đổi thành công trong tất cả các khách hàng để lại thông tin, và thời gian chăm sóc hợp lý nhất
Theo dõi quá trình sales tư vấn cho khách hàng từ khi họ bắt đầu đăng ký (trở thành leads) > khi trở thành khách hàng hoặc lost.
Hiểu quy trình khách hàng đăng ký khóa học
Trước tiên, để thiết kế được cơ sở dữ liệu, bạn sẽ cần nắm được rất rõ khách hàng từ khi là lead (để lại thông tin) đến khi thành khách hàng họ sẽ phải trải qua những bước gì. Nói cách khác, bạn sẽ cần nắm được các quy trình đang diễn ra tại doanh nghiệp.
Bạn có thể đóng vai là một khách hàng để tự trải nghiệm, hoặc cách tốt nhất là nói chuyện, trao đổi trực tiếp với nhân sự tại doanh nghiệp để hiểu rõ hơn về quy trình. Quá trình làm việc tại Tomorrow Marketers - một doanh nghiệp giáo dục chuyên cung cấp các khóa học Marketing & Data chất lượng đã giúp mình rất nhiều trong việc hiểu được quy trình tư vấn bán hàng tại một doanh nghiệp giáo dục.
Dưới đây là một quy trình tương đối đầy đủ mà bạn có thể tham khảo:
Bước 1: Khách hàng truy cập vào Landing Page và để lại thông tin trong form đăng ký bao gồm:
Họ và tên
Email
Số điện thoại
Năm sinh
Khóa học quan tâm
Bạn có phải cựu học viên không
Bạn mong muốn gì khi tham gia khóa học
Muốn tư vấn hay không? Thời gian phù hợp để tư vấn
Bước 2: Thông tin khách hàng sẽ được import vào Pipedrive (Deals) và được chia cho từng bạn sales để tư vấn và chốt. Một deal thường sẽ được xử lý qua các giai đoạn:
Lead in > 1st touch > Tư vấn > Cọc > Hoàn thành học phí (Won)
Bước 3: Deals sau một thời gian chăm sóc sẽ rơi vào 3 trường hợp:
Deal won (Khách hàng được xếp vào các lớp học)
Deal lost (Deal khách từ chối không học, hoặc không thể liên hệ được)
Deal CKS (Deal đến lúc lớp khai giảng rồi vẫn chưa chốt được, nhưng khách không từ chối hẳn mà vẫn chờ lịch >> chuyển sang Waiting pipeline để tiếp tục chăm sóc chờ lớp sau)
Thiết kế CSDL
Vẽ Conceptual Map
Dựa vào quy trình đã được liệt kê ở trên mình sẽ cần vẽ được một Conceptual Map. Đây là bước quan trọng giúp phác thảo cách dữ liệu được tổ chức trước khi đi vào thiết kế mô hình dữ liệu quan hệ (Relational Data Model).
Nếu bạn chưa biết, Conceptual Map (Bản đồ khái niệm) trong thiết kế cơ sở dữ liệu (CSDL) là một mô hình giúp biểu diễn các thực thể chính (ví dụ các thực thể ở đây là Khách hàng, nhân viên sales,…), làm rõ mối quan hệ giữa các thực thể, giúp hình dung cách dữ liệu liên kết với nhau trong một hệ thống.
Dưới đây là các bước mình làm để lên một Conceptual Map:
Bước 1: Xác định các thực thể chính (Entities) & thuộc tính của từng thực thể (Attributes)
Thực thể là một đối tượng hoặc khái niệm trong hệ thống mà chúng ta cần lưu trữ thông tin. Trong CSDL quan hệ, mỗi entity thường được biểu diễn bằng một bảng (table). Với mỗi thực thể sẽ có các thuộc tính (attributes) ~ cột, đại diện cho thông tin về entity đó.
Với Project này, các thực thể chính & thuộc tính của từng thực thể sẽ bao gồm:
Khách hàng: Họ tên, Email, Số điện thoại, Năm sinh,…
Nhân viên Sales: Mã nhân viên, Tên nhân viên,…
Khóa học: Mã khóa học, Tên khóa học, Mô tả…
Lớp học: Mã lớp học, Ngày khai giảng,…
Bước 2: Xác định mối quan hệ giữa các thực thể (Relationships)
Xác định cách các thực thể kết nối tương tác với nhau thế nào:
Khách hàng đăng ký thông tin để tham gia một hoặc nhiều khóa học.
Nhân viên Sales ghi nhận thông tin về khóa học khách hàng đã đăng ký
Nhân viên Sales liên hệ tư vấn, giải đáp thắc mắc và hỗ trợ khách hàng trong quá trình ra quyết định, đồng thời nhận phản hồi từ khách hàng về nhu cầu và thanh toán.
Khi deal được chốt thành công (Won), khách hàng sẽ được xếp vào lớp học tương ứng.
Một khóa học có thể có nhiều lớp học mở ra theo thời gian khác nhau.
Bước 3: Xây dựng Conceptual Map
Từ các thông tin trên có thể vẽ được một conceptual Map như hình dưới đây:
Thiết kế Data Model
Sau khi đã phác thảo cách dữ liệu được tổ chức, bước tiếp theo là thiết kế mô hình dữ liệu quan hệ (Relational Data Model) chi tiết. Đây là Data Model mà mình thiết kế dựa trên conceptual map được vẽ ở trên:
Trong đó bao gồm các bảng:
Bảng fact_deals: Chứa thông tin về chi tiết của từng deals ~ giao dịch:
Bảng deal_detail: Chưa thông tin chi tiết về từng deal
Bảng dim_customers: Chứa thông tin về những người đã từng đăng ký khóa học
Bảng dim_employee: Chứa thông tin về nhân viên Sales phụ trách các deals
Bảng product: Chứa thông tin về các khóa học
Bảng class: Chứa thông tin về các lớp học
Triển khai hệ thống CSDL
Bước cuối cùng là triển khai Data Model đã thiết kế thành một cơ sở dữ liệu thực tế. Trong bài viết này, mình sử dụng MySQL để tạo dữ liệu trên máy tính cá nhân (Local). Tuy nhiên, trong thực tế, các doanh nghiệp thường triển khai CSDL trên Cloud (AWS RDS, Google Cloud SQL) hoặc On-Premises (máy chủ vật lý nội bộ) nhằm đáp ứng nhu cầu lưu trữ, mở rộng dữ liệu và đảm bảo hiệu suất cũng như bảo mật hệ thống.
Tạo Database và các bảng dữ liệu
Đây là các câu lệnh SQL mình sử dụng:
-- Tạo Database
set default_storage_engine=InnoDB;
create database educationbusiness;
-- Tạo Bảng
create table fact_deals (
deal_id varchar(10) primary key,
customer_id varchar(10),
deal_owner_id varchar(10),
created_time date,
deal_size float,
status varchar(10),
lost_reason text,
close_time date,
activities int,
time_in_stage_1 int,
time_in_stage_2 int,
time_in_stage_3 int,
time_in_stage_4 int,
time_in_stage_5 int
);
create table deal_details (
deal_detail_id varchar(10) primary key,
deal_id varchar(10),
product_id varchar(10),
class_id varchar(10)
);
create table dim_customers (
customer_id varchar(10) primary key,
name varchar (250),
email varchar (250),
phone varchar (11),
year_of_birth year
);
create table dim_employee (
employee_id varchar(10) primary key,
name varchar (250),
title varchar (250),
hired_date date
);
create table product (
product_id varchar(10) primary key,
product_name varchar (250),
description text
);
create table class (
class_id varchar(10) primary key,
opening_date date,
description text
);
Thiết lập quan hệ giữa các bảng
Sử dụng câu lệnh ALTER TABLE để thiết lập liên kết giữa các bảng:
alter table fact_deals
add constraint FK_CustomerID foreign key (customer_id) references dim_customers(customer_id);
alter table fact_deals
add constraint FK_Employee foreign key (deal_owner_id) references dim_employee(employee_id);
alter table deal_details
add constraint PK_Detail foreign key (deal_id) references fact_deals(deal_id);
alter table deal_details
add constraint FK_ProductID foreign key (product_id) references product(product_id);
alter table deal_details
add constraint FK_ClassID foreign key (class_id) references class(class_id);
Sau khi thực hiện các câu lệnh trên, mình sẽ được một cơ sở dữ liệu đơn giản với ERD (Entity Relationship Diagram) như sau:
Nhập dữ liệu mẫu vào hệ thống
Tại đây mình sử dụng câu lệnh INSERT INTO để lần lượt import dữ liệu vào từng bảng. Lưu ý là quá trình import dữ liệu sẽ thực hiện lần lượt theo thứ tự:
Các bảng dim được import đầu tiên vì các bảng này cung cấp các thông tin cơ bản và khóa ngoại (foreign keys) cho bảng fact.
Sau đó, bảng fact sẽ được nhập vào, liên kết với các bảng dim thông qua khóa ngoại.
Bảng Customers:
INSERT INTO dim_customers (customer_id, name, email, phone, year_of_birth)
VALUES
(101, 'Nguyen Van A', 'nguyenvana@example.com', '0987654321', 1990),
(102, 'Tran Thi B', 'tranthib@example.com', '0988765432', 1995),
(103, 'Le Van C', 'levanc@example.com', '0989876543', 1988);
Kết quả sau khi nhập dữ liệu:
Bảng Employee:
INSERT INTO dim_employee (employee_id, name, title,hired_date)
VALUES
('NV201', 'Pham Van D', 'Manager','2018-01-03'),
('NV202', 'Hoang Thi E', 'Executive','2022-01-15'),
('NV203', 'Nguyen Van F', 'Sales Representative','2019-06-10');
Kết quả sau khi nhập dữ liệu:
Bảng Product:
INSERT INTO product (product_id, product_name, description)
VALUES
('P1', 'Marketing Foundation', 'Khoa hoc Marketing co ban'),
('P2', 'Content Marketing', 'Khoa hoc Content Marketing co ban'),
('P3', 'Digital Marketing', 'Khoa hoc Digital Marketing co ban');
Kết quả sau khi nhập dữ liệu:
Bảng Class:
INSERT INTO class (class_id, description, opening_date)
VALUES
('P101', 'Khoa hoc Marketing co ban', '2023-01-15'),
('P202', 'Khoa hoc Content Marketing co ban', '2023-02-20'),
('P303', 'Khoa hoc Digital Marketing co ban', '2023-03-10');
Kết quả sau khi nhập dữ liệu:
Bảng Deals:
INSERT INTO fact_deals (deal_id, customer_id, deal_owner_id, created_time, deal_size, status, lost_reason, close_time, time_in_stage_1, time_in_stage_2, time_in_stage_3, time_in_stage_4, time_in_stage_5, activities)
VALUES
(1, 101, 'NV201', '2023-01-10', 1500.00, 'won', NULL, '2023-01-20', 2, 3, 5, 0, 0, 7),
(2, 102, 'NV202', '2023-02-15', 2000.00, 'lost', 'Khach khong co nhu cau', '2023-02-18', 1, 2, 4, 0, 0, 6),
(3, 103, 'NV203', '2023-03-10', 1800.00, 'won', NULL, '2023-03-25', 3, 3, 5, 0, 0, 10);
Kết quả sau khi nhập dữ liệu:
Bảng Deal Details:
INSERT INTO deal_details (deal_detail_id , deal_id, product_id, class_id)
VALUES
('1', 1,'P1','P101'),
('2', 2,'P2','P202'),
('3', 3,'P3','P303');
Kết quả sau khi nhập dữ liệu:
Sau khi hoàn thiện cơ sở dữ liệu bạn có thể sử dụng dữ liệu trong cơ sở dữ liệu để phân tích, tính toán toán các chỉ số như:
% deal won theo từng tháng
Thời gian trung bình khách hàng từ Lead → Chốt đơn
Nhân viên Sales nào có tỷ lệ chốt khách cao nhất
Hoặc xây dựng các dashboard vận hành như hình dưới đây để theo dõi quá trình tư vấn, tìm ra các “điểm nóng” để tối ưu kịp thời.
Tạm kết
Vậy là mình vừa trình bày với mọi người về Project thứ 2 xây dựng hệ thống CSDL cho một doanh nghiệp. Mình sẽ tiếp tục đăng các Project khác của mình lên Substack trong khoảng thời gian sắp tới, vì vậy nếu bạn thấy bài viết này hữu ích thì hãy subscribe để nhận được email về các bài post mới nhất.