-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathschema.sql
79 lines (74 loc) · 3.23 KB
/
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
-- Open Growth DB
CREATE DATABASE IF NOT EXISTS opengrowth
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
-- Signals
-- Meaningful customer activity log
CREATE TABLE IF NOT EXISTS opengrowth.signals (
id INTEGER PRIMARY KEY AUTO_INCREMENT
, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, name VARCHAR(100) NOT NULL
, email VARCHAR(120)
, expert VARCHAR(120)
);
CREATE INDEX signal_created ON opengrowth.signals(created);
CREATE INDEX signal_name ON opengrowth.signals(name);
CREATE INDEX signal_email ON opengrowth.signals(email);
CREATE INDEX signal_expert ON opengrowth.signals(expert);
CREATE UNIQUE INDEX signal_id ON opengrowth.signals(id);
-- Signals 3 Store
-- Meta data from a signal
CREATE TABLE IF NOT EXISTS opengrowth.signals_3store (
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, email VARCHAR(120) NOT NULL
, predicate VARCHAR(100) NOT NULL
, object VARCHAR(100) NOT NULL
);
CREATE INDEX signal_created ON opengrowth.signals_3store(created);
CREATE INDEX signal_email ON opengrowth.signals_3store(email);
CREATE INDEX signal_predicate ON opengrowth.signals_3store(predicate);
CREATE INDEX signal_object ON opengrowth.signals_3store(object);
CREATE INDEX signal_email_predicate ON opengrowth.signals_3store(email,predicate);
-- Delights
-- Sending an email, sms, tweet, etc
CREATE TABLE IF NOT EXISTS opengrowth.delights (
id INTEGER PRIMARY KEY AUTO_INCREMENT
, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, name VARCHAR(100) NOT NULL
, email VARCHAR(120) NOT NULL
, contact VARCHAR(120)
, message TEXT
);
CREATE INDEX delight_created ON opengrowth.delights(created);
CREATE INDEX delight_contact ON opengrowth.delights(contact);
CREATE INDEX delight_name ON opengrowth.delights(name);
CREATE UNIQUE INDEX delight_id ON opengrowth.delights(id);
-- Reactions
-- Customer clicks a CTA and requests to connect
CREATE TABLE IF NOT EXISTS opengrowth.reactions (
id INTEGER PRIMARY KEY AUTO_INCREMENT
, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, contact VARCHAR(120) NOT NULL
, signal_name VARCHAR(100) NOT NULL
, delight_name VARCHAR(100) NOT NULL
, type VARCHAR(100)
, message VARCHAR(200)
);
CREATE INDEX reaction_created ON opengrowth.reactions(created);
CREATE UNIQUE INDEX reaction_id ON opengrowth.reactions(id);
-- Cohort View
-- View which shows day-by-day cohort progression of Click/Open Rates
CREATE ALGORITHM=UNDEFINED DEFINER=`overmind_admin`@`%` SQL SECURITY DEFINER VIEW `og_reactions_cohort` AS
SELECT `og_reactions`.`signal_name` AS `signal`,
`og_reactions`.`type` AS `action`,
`og_reactions`.`contact` AS `contact`,
date_format(`og_reactions`.`created`,'%Y-%m-%d') AS `yearmonth`,
(to_days(now()) - to_days(`og_reactions`.`created`)) AS `cohort`
FROM `og_reactions`
WHERE ((not((`og_reactions`.`contact` LIKE 'emailtosalesforce@%')))
AND (`og_reactions`.`type` = 'delivered'))
GROUP BY `og_reactions`.`contact`,
`yearmonth`,
`og_reactions`.`type`,
`og_reactions`.`signal_name`
ORDER BY `yearmonth` DESC;