This repository has been archived by the owner on Jun 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcreateTables.sql
381 lines (330 loc) · 11.6 KB
/
createTables.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
-- HARVEST CLUB DDL --
-- For simplicity, some default values are inserted --
-- Tables are dropped before inserting for easy debugging --
CREATE DATABASE
IF NOT EXISTS theharvestclub
CHARACTER SET utf8 COLLATE utf8_general_ci;
SET FOREIGN_KEY_CHECKS = 0; -- remember to enable fk constraints at the end!
DROP TABLE IF EXISTS property_types;
CREATE TABLE property_types (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO property_types (name) VALUES
('Residence'),
('Open Space / Vacant lot'),
('Business'),
('Public Property'),
('Other');
DROP TABLE IF EXISTS property_relationships;
CREATE TABLE property_relationships (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO property_relationships (name) VALUES
('Owner & Occupant'),
('Renter'),
('Renter property owner (landlord)'),
('Other');
DROP TABLE IF EXISTS tree_types;
CREATE TABLE tree_types (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO tree_types (name) VALUES
('Orange'),
('Tangelo'),
('Tangerine'),
('Grapefruit'),
('Lemon'),
('Lime'),
('Avocado'),
('Persimmon'),
('Guava'),
('Apple'),
('Peach'),
('Plum'),
('Nectarine'),
('Other');
DROP TABLE IF EXISTS tree_heights;
CREATE TABLE tree_heights (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO tree_heights (name) VALUES
('Under 5 feet'),
('5 to 10 feet'),
('10 to 15 feet'),
('15 to 20 feet'),
('20 to 30 feet'),
('30 to 40 feet'),
('Over 40 feet');
DROP TABLE IF EXISTS months;
CREATE TABLE months (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO months (name) VALUES
('January'),
('February'),
('March'),
('April'),
('May'),
('June'),
('July'),
('August'),
('September'),
('October'),
('November'),
('December');
DROP TABLE IF EXISTS days;
CREATE TABLE days (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO days (name) VALUES
('Monday'),
('Tuesday'),
('Wednesday'),
('Thursday'),
('Friday'),
('Saturday'),
('Sunday');
DROP TABLE IF EXISTS sources;
CREATE TABLE sources (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=innodb;
INSERT INTO sources (name) VALUES
('Other'),
('Flyer'),
('Facebook/Twitter'),
('Family or Friend'),
('Newspaper/Local Magazine'),
('Website/Search Engine'),
('Village Harvest')
;
DROP TABLE IF EXISTS growers;
CREATE TABLE growers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name NVARCHAR(255) NOT NULL,
middle_name NVARCHAR(255),
last_name NVARCHAR(255) NOT NULL,
phone VARCHAR(17) NOT NULL, -- maybe (http://stackoverflow.com/q/75105/266535)
email NVARCHAR(255) NOT NULL, -- max is actually 320, but so rare
preferred VARCHAR(6), -- preferred contact method (phone/email)
street NVARCHAR(255) NOT NULL,
city NVARCHAR(255) NOT NULL,
state CHAR(2) NOT NULL, -- this makes sense right?
zip VARCHAR(5) NOT NULL, -- can it be bigger?
tools TINYTEXT,
source_id INT DEFAULT 1,
notes TEXT,
pending TINYINT(1) DEFAULT 1, -- 1-Yes 0-No
property_type_id INT NULL,
property_relationship_id INT NULL,
CONSTRAINT fk_property_type FOREIGN KEY (property_type_id) REFERENCES property_types(id),
CONSTRAINT fk_property_relationship FOREIGN KEY (property_relationship_id) REFERENCES property_relationships(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS grower_trees;
CREATE TABLE grower_trees (
id INT PRIMARY KEY AUTO_INCREMENT,
grower_id INT,
tree_type INT,
varietal TEXT,
number INT,
avgHeight_id INT,
chemicaled TINYINT(1), -- 1 Yes -- 0 No
CONSTRAINT fk_grower_trees_grower FOREIGN KEY (grower_id) REFERENCES growers(id) ON DELETE CASCADE,
CONSTRAINT fk_grower_trees_tree FOREIGN KEY (tree_type) REFERENCES tree_types(id) ON DELETE CASCADE,
CONSTRAINT fk_grower_trees_height FOREIGN KEY (avgHeight_id) REFERENCES tree_heights(id) ON DELETE CASCADE
) ENGINE=innodb;
DROP TABLE IF EXISTS month_harvests;
CREATE TABLE month_harvests (
tree_id INT,
month_id INT,
CONSTRAINT pk_month_harvests_month_harvest PRIMARY KEY (tree_id, month_id),
CONSTRAINT fk_month_harvests_tree_type_id FOREIGN KEY (tree_id) REFERENCES grower_trees(id) ON DELETE CASCADE,
CONSTRAINT fk_month_harvests_month_id FOREIGN KEY (month_id) REFERENCES months(id) ON DELETE CASCADE
) ENGINE=innodb;
DROP TABLE IF EXISTS volunteer_types;
CREATE TABLE volunteer_types (
id INT AUTO_INCREMENT PRIMARY KEY,
type nvarchar(255) NOT NULL,
description varchar(255)
) ENGINE=innodb;
INSERT INTO volunteer_types (type, description) VALUES
('Harvester', 'Pick and sort fruit at Harvest Events'),
('Harvest Captain', 'Lead harvest crews during Harvest Events'),
('Driver', 'Deliver harvested produce to local distribution sites'),
('Ambassador', 'Distributes flyers in neighborhoods with visible fruit trees'),
('Tree Scout', 'Meet with growers to inspect property prior to Harvest Events')
;
DROP TABLE IF EXISTS privileges;
CREATE TABLE privileges (
id INT AUTO_INCREMENT PRIMARY KEY,
name NVARCHAR(255),
can_login TINYINT(1) DEFAULT 0,
view_volunteer TINYINT(1) DEFAULT 0,
edit_volunteer TINYINT(1) DEFAULT 0,
del_volunteer TINYINT(1) DEFAULT 0,
exp_volunteer TINYINT(1) DEFAULT 0,
appr_volunteer TINYINT(1) DEFAULT 0,
view_grower TINYINT(1) DEFAULT 0, -- grower implies trees too
edit_grower TINYINT(1) DEFAULT 0,
del_grower TINYINT(1) DEFAULT 0,
exp_grower TINYINT(1) DEFAULT 0,
appr_grower TINYINT(1) DEFAULT 0,
view_event TINYINT(1) DEFAULT 0,
edit_event TINYINT(1) DEFAULT 0,
del_event TINYINT(1) DEFAULT 0,
exp_event TINYINT(1) DEFAULT 0,
view_distrib TINYINT(1) DEFAULT 0,
edit_distrib TINYINT(1) DEFAULT 0,
del_distrib TINYINT(1) DEFAULT 0,
exp_distrib TINYINT(1) DEFAULT 0,
view_donor TINYINT(1) DEFAULT 0,
edit_donor TINYINT(1) DEFAULT 0,
del_donor TINYINT(1) DEFAULT 0,
exp_donor TINYINT(1) DEFAULT 0,
send_email TINYINT(1) DEFAULT 0,
recv_email TINYINT(1) DEFAULT 0,
change_priv TINYINT(1) DEFAULT 0 -- can change this table
) ENGINE=innodb;
INSERT INTO privileges (name, can_login, view_volunteer, view_grower, send_email, recv_email, exp_grower, exp_volunteer, view_event, edit_event, view_distrib, edit_distrib) VALUES
("Pending", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
("Volunteer", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
("Harvest Captain", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
-- Admin
-- Executive
;
INSERT INTO privileges
(name, can_login, view_volunteer, view_grower, send_email, recv_email, exp_grower, exp_volunteer, view_event, edit_event, view_distrib, edit_distrib)
(SELECT 'Admin', can_login, view_volunteer, view_grower, send_email, recv_email, exp_grower, exp_volunteer, view_event, edit_event, view_distrib, edit_distrib
FROM privileges WHERE name = 'Harvest Captain');
UPDATE privileges
SET view_grower=1, edit_grower=1, appr_grower=1,
view_volunteer=1, edit_volunteer=1, appr_volunteer=1
WHERE name = 'Admin';
INSERT INTO privileges VALUES
(NULL, 'Executive', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1);
DROP TABLE IF EXISTS volunteers;
CREATE TABLE volunteers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name nvarchar(255) NOT NULL,
middle_name nvarchar(255),
last_name nvarchar(255) NOT NULL,
organization nvarchar(255),
phone varchar(17) NOT NULL,
email nvarchar(255) NOT NULL,
password nvarchar(255) NULL,
active_id TINYINT(1) DEFAULT 1, -- 1-Active, 0-Inactive
street nvarchar(255) NOT NULL,
city nvarchar(255) NOT NULL,
state CHAR(2) NOT NULL,
zip varchar(5) NOT NULL,
privilege_id INT DEFAULT 1,
signed_up DATE,
notes TEXT,
source_id INT DEFAULT 1,
surplus_hours DOUBLE DEFAULT 0,
CONSTRAINT fk_privilege_id FOREIGN KEY (privilege_id) REFERENCES privileges(id),
CONSTRAINT fk_source_id_volunteers FOREIGN KEY (source_id) REFERENCES sources(id)
) ENGINE=innodb;
-- A volunteer can have many rolls
DROP TABLE IF EXISTS volunteer_roles;
CREATE TABLE volunteer_roles (
volunteer_id INT NOT NULL,
volunteer_type_id INT NOT NULL,
CONSTRAINT pk_volunteer_roles PRIMARY KEY (volunteer_id, volunteer_type_id),
CONSTRAINT fk_volunteer_roles_volunteer_id FOREIGN KEY (volunteer_id) REFERENCES volunteers(id) ON DELETE CASCADE,
CONSTRAINT fk_volunteer_roles_volunteer_type_id FOREIGN KEY (volunteer_type_id) REFERENCES volunteer_types(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS volunteer_prefers;
CREATE TABLE volunteer_prefers (
volunteer_id INT NOT NULL,
day_id INT NOT NULL,
CONSTRAINT pk_volunteer_prefers PRIMARY KEY (volunteer_id, day_id),
CONSTRAINT fk_volunteer_prefers_volunteer_id FOREIGN KEY (volunteer_id) REFERENCES volunteers(id) ON DELETE CASCADE,
CONSTRAINT fk_volunteer_prefers_day_id FOREIGN KEY (day_id) REFERENCES days(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS events;
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
grower_id INT NOT NULL,
captain_id INT NOT NULL,
date date,
time text,
notes text,
CONSTRAINT fk_event_grower_id FOREIGN KEY (grower_id) REFERENCES growers(id),
CONSTRAINT fk_event_captain_id FOREIGN KEY (captain_id) REFERENCES volunteers(id)
) ENGINE=innodb;
-- This table associated each volunteer with each event.
DROP TABLE IF EXISTS volunteer_events;
CREATE TABLE volunteer_events (
event_id INT NOT NULL,
volunteer_id INT NOT NULL,
driver TINYINT(1) DEFAULT 0, -- 1 if driver -- 0 if not driver
hour DOUBLE,
CONSTRAINT pk_volunteer_events PRIMARY KEY (volunteer_id, event_id),
CONSTRAINT fk_volunteer_events_volunteer_id FOREIGN KEY (volunteer_id) REFERENCES volunteers(id),
CONSTRAINT fk_volunteer_events_event_id FOREIGN KEY (event_id) REFERENCES events(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS harvests;
CREATE TABLE harvests (
event_id INT NOT NULL,
tree_id INT NOT NULL,
number INT,
pound DOUBLE,
CONSTRAINT pk_harvests PRIMARY KEY (tree_id, event_id),
CONSTRAINT `fk_harvests_tree_id` FOREIGN KEY (`tree_id`) REFERENCES `grower_trees` (`id`),
CONSTRAINT fk_harvests_event_id FOREIGN KEY (event_id) REFERENCES events(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS distributions;
CREATE TABLE distributions (
id INT AUTO_INCREMENT PRIMARY KEY,
name nvarchar(255) NOT NULL,
contact nvarchar(255),
phone varchar(17) NOT NULL,
contact2 nvarchar(255),
phone2 varchar(17),
email nvarchar(255),
street nvarchar(255) NOT NULL,
city nvarchar(255) NOT NULL,
state CHAR(2) NOT NULL,
zip varchar(5),
notes TEXT,
daytime TEXT
) ENGINE=innodb;
DROP TABLE IF EXISTS distribution_hours;
CREATE TABLE distribution_hours (
distribution_id INT NOT NULL,
day_id INT NOT NULL,
open TIME ,
close TIME,
CONSTRAINT pk_distribution_hours PRIMARY KEY (distribution_id, day_id),
CONSTRAINT fk_distribution_hours_distribution_id FOREIGN KEY (distribution_id) REFERENCES distributions(id),
CONSTRAINT fk_distribution_hours_day_id FOREIGN KEY (day_id) REFERENCES days(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS drivings;
CREATE TABLE drivings (
event_id INT NOT NULL,
tree_id INT NOT NULL,
volunteer_id INT NOT NULL,
distribution_id INT NOT NULL,
pound DOUBLE,
CONSTRAINT pk_drivings PRIMARY KEY (tree_id, event_id, volunteer_id, distribution_id),
CONSTRAINT fk_drivings_tree_id FOREIGN KEY (tree_id) REFERENCES grower_trees(id),
CONSTRAINT fk_drivings_event_id FOREIGN KEY (event_id) REFERENCES events(id),
CONSTRAINT fk_drivings_volunteer_id FOREIGN KEY (volunteer_id) REFERENCES volunteers(id),
CONSTRAINT fk_drivings_distribution_id FOREIGN KEY (distribution_id) REFERENCES distributions(id)
) ENGINE=innodb;
DROP TABLE IF EXISTS donations;
CREATE TABLE donations (
id INT AUTO_INCREMENT PRIMARY KEY,
donation nVARCHAR(255) NOT NULL,
donor nVARCHAR(255) DEFAULT "Anonymous",
value double,
date DATE
) ENGINE=innodb;
SET FOREIGN_KEY_CHECKS = 1; -- enable fk constraints!