Database Design and Implementation For Marketing Campaigns
Database Design and Implementation For Marketing Campaigns
MARKETING CAMPAIGNS
NAME :
ROLL NO :
DATE :
SUBMITTED TO :
ENTITY IDENTIFICATION:
• PURPOSE: IDENTIFY KEY COMPONENTS TO STORE AND MANAGE BUSINESS DATA.
• PROCESS: ANALYZE BUSINESS REQUIREMENTS TO DETERMINE NECESSARY ENTITIES.
• EXAMPLE: FOR MARKETING CAMPAIGNS, ESSENTIAL ENTITIES INCLUDE CAMPAIGNS,
PERFORMANCE METRICS, BUDGET ALLOCATIONS, AND LEAD GENERATION ACTIVITIES.
• IDENTIFIED ENTITIES:
• Campaign
• Performance Metrics
• Budget Allocation
• Lead Generation Activity
ATTRIBUTE DEFINITION:
ER Diagram:
NORMALIZATION:
SQL IMPLEMENTATION AND DATA POPULATION
DATABASE MODEL:
WE BUILT THE DATABASE MODEL USING A SUITABLE PLATFORM MS SQL SERVER.THIS INVOLVED CREATING THE
TABLES BASED ON THE SCHEMA WE DESIGNED.
DATA POPULATION:
TO SIMULATE REALISTIC DATA, WE POPULATED EACH TABLE WITH AT LEAST TWO RECORDS. THIS STEP INVOLVED
INSERTING SAMPLE DATA INTO THE CAMPAIGN, PERFORMANCE METRICS, BUDGET ALLOCATION AND LEAD
GENERATION ACTIVITY TABLES
SQL IMPLEMENTATION AND DATA POPULATION
1. CAMPAIGN TABLE :
INSERT INTO CAMPAIGN (CAMPAIGN_ID, TARGET_AUDIENCE, COST_DETAILS, PERFORMANCE_OUTCOMES)
VALUES
(1, 'YOUNG ADULTS', 5000.00, 'INCREASED WEBSITE TRAFFIC BY 30%'),
(2, 'PARENTS', 7000.00, 'GENERATED 50 LEADS FOR PRODUCT X');
Query1:
SELECT * FROM Campaign WHERE target_audience = 'Parents';
QUERY DEVELOPMENT
QUERY DEVELOPMENT
Query 2:
SELECT performance_outcomes FROM Campaign WHERE campaign_id = 1;
QUERY DEVELOPMENT
Query 3:
SELECT * FROM BudgetAllocation
WHERE campaign_id IN (SELECT campaign_id FROM Campaign WHERE cost_details > 6000.00);
QUERY DEVELOPMENT
Query 4:
SELECT l.activity_description
FROM LeadGenerationActivity l
INNER JOIN Campaign c ON l.campaign_id = c.campaign_id
INNER JOIN PerformanceMetrics p ON c.campaign_id = p.campaign_id
WHERE p.metric_name = 'Conversion Rate' AND p.metric_value > 0.05;
QUERY DEVELOPMENT
QUERY DEVELOPMENT
Query 5:
Select * from Lead Generation Activity
AGGREGATED FUNCTIONS:
Using SQL aggregate functions, we generated summary reports. These functions allowed us to calculate
metrics like average, sum, count, etc., across records in the database.
1. Aggregate Function(Average):
SELECT AVG(metric_value) AS average_conversion_rate
FROM PerformanceMetrics
WHERE metric_name = 'Conversion Rate';
AGGREGATED FUNCTIONS:
AGGREGATED FUNCTIONS:
2. Aggregate Function(Sum):
SELECT SUM(cost_details) AS total_cost FROM Campaign;
AGGREGATED FUNCTIONS:
3. Aggregate Function(Max):
SELECT MAX(metric_value) AS max_leads_generated
FROM PerformanceMetrics
WHERE metric_name = 'Leads Generated';
DATA MANIPULATION:
We demonstrated the ability to insert, update, and delete data. Insert queries add new records to the
tables, update queries modify existing records, and delete queries remove records from the tables.
1. Insert Query:
INSERT INTO Campaign (campaign_id, target_audience, cost_details)
VALUES (3, 'Social Media Ads', 3000.0),
(4, 'Email Marketing', 6000.0);
AGGREGATED FUNCTIONS:
2. Update Query:
UPDATE Campaign
SET cost_details = 8000.0
WHERE campaign_id = 3;
AGGREGATED FUNCTIONS:
3. Delete Query::
DELETE FROM Campaign
WHERE campaign_id = 2;
COMPLEX QUERIES:
We developed queries that involve joins, subqueries, and other advanced SQL features to address complex
information needs. These queries retrieve data by combining information from multiple tables or perform
calculations based on specific criteria.
1. Query 1:
SELECT c.campaign_id, c.cost_details, pm.metric_name, pm.metric_value
FROM Campaign c
LEFT JOIN PerformanceMetrics pm ON c.campaign_id = pm.campaign_id;
COMPLEX QUERIES:
COMPLEX QUERIES:
2. Query 2:
SELECT c.campaign_id, c.cost_details
FROM Campaign c
WHERE c.target_audience = 'Social Media Users';
COMPLEX QUERIES:
3. Query 3:
SELECT c.campaign_id, c.cost_details, AVG(pm.metric_value) AS avg_cost_per_lead
FROM Campaign c
LEFT JOIN PerformanceMetrics pm ON c.campaign_id = pm.campaign_id
WHERE pm.metric_name = 'Website Traffic’
GROUP BY c.campaign_id, c.cost_details;
COMPLEX QUERIES:
4. Query 4:
SELECT c.campaign_id, c.cost_details, AVG(pm.metric_value) AS avg_cost_per_lead
FROM Campaign c
LEFT JOIN PerformanceMetrics pm ON c.campaign_id = pm.campaign_id
WHERE pm.metric_name = 'Website Traffic’
GROUP BY c.campaign_id, c.cost_details;
SELECT c.campaign_id, c.cost_details,
SUM(CASE WHEN pm.metric_name = 'Website Traffic' THEN pm.metric_value ELSE 0 END) AS total_leads,
SUM(CASE WHEN pm.metric_name = 'Leads Generated' THEN pm.metric_value ELSE 0 END) AS
total_impressions,
SUM(CASE WHEN pm.metric_name = 'Website Traffic' THEN pm.metric_value ELSE 0 END) / NULLIF(SUM(CASE
WHEN pm.metric_name = 'Leads Generated' THEN pm.metric_value ELSE 0 END), 0) AS conversion_rate
FROM Campaign c
LEFT JOIN PerformanceMetrics pm ON c.campaign_id = pm.campaign_id
GROUP BY c.campaign_id, c.cost_details
HAVING SUM(CASE WHEN pm.metric_name = 'Website Traffic' THEN pm.metric_value ELSE 0 END) > 100 -- High cost
COMPLEX QUERIES: