-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb.sql
More file actions
145 lines (129 loc) · 3.84 KB
/
Copy pathdb.sql
File metadata and controls
145 lines (129 loc) · 3.84 KB
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
CREATE TABLE Locations (
LocationID INT AUTO_INCREMENT,
Name CHAR(50),
Longitude REAL,
Latitude REAL,
PRIMARY KEY (LocationID));
CREATE TABLE Universities (
UniversityName CHAR(50),
NumStudents INT,
Domain CHAR(30),
Description TEXT,
LocationID INT NOT NULL,
PRIMARY KEY (UniversityName),
FOREIGN KEY (LocationID) REFERENCES Locations(LocationID));
CREATE TABLE Users (
UserID INT AUTO_INCREMENT,
UniversityName CHAR(50) NOT NULL,
Name CHAR(50),
Email CHAR(50),
Password CHAR(32),
UNIQUE (Email),
PRIMARY KEY (UserID),
FOREIGN KEY (UniversityName) REFERENCES Universities(UniversityName));
CREATE TABLE Admins (
UserID INT,
PRIMARY KEY (UserID),
FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE);
CREATE TABLE SuperAdmins (
UserID INT,
PRIMARY KEY (UserID),
FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE);
CREATE TABLE Events (
EventID INT AUTO_INCREMENT,
LocationID INT NOT NULL,
EventName CHAR(50),
Time DATETIME,
Phone CHAR(15),
Email CHAR(50),
PRIMARY KEY (EventID),
UNIQUE (LocationID, Time),
FOREIGN KEY (LocationID) REFERENCES Locations(LocationID));
CREATE TABLE RSO_Events (
EventID INT,
RSOName CHAR(50) NOT NULL,
PRIMARY KEY (EventID),
FOREIGN KEY (RSOName) REFERENCES RSOs(RSOName) ON DELETE CASCADE,
FOREIGN KEY (EventID) REFERENCES Events(EventID) ON DELETE CASCADE);
CREATE TABLE Private_Events (
EventID INT,
AdminID INT,
SuperAdminID INT,
UniversityName CHAR(50),
PRIMARY KEY (EventID),
FOREIGN KEY (AdminID) REFERENCES Admins(UserID),
FOREIGN KEY (SuperAdminID) REFERENCES SuperAdmins(UserID),
FOREIGN KEY (EventID) REFERENCES Events(EventID) ON DELETE CASCADE,
CHECK (
(AdminID IS NOT NULL AND SuperAdminID IS NULL) OR
(AdminID IS NULL AND SuperAdminID IS NOT NULL)
));
CREATE TABLE Public_Events (
EventID INT,
AdminID INT,
SuperAdminID INT,
PRIMARY KEY (EventID),
FOREIGN KEY (AdminID) REFERENCES Admins(UserID),
FOREIGN KEY (SuperAdminID) REFERENCES SuperAdmins(UserID),
FOREIGN KEY (EventID) REFERENCES Events(EventID) ON DELETE CASCADE,
CHECK (
(AdminID IS NOT NULL AND SuperAdminID IS NULL) OR
(AdminID IS NULL AND SuperAdminID IS NOT NULL)
));
CREATE TABLE Comments (
CommentID INT AUTO_INCREMENT,
EventID INT,
UserID INT,
Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Text TEXT,
Rating INT,
PRIMARY KEY (CommentID),
FOREIGN KEY (EventID) REFERENCES Events(EventID) ON DELETE CASCADE,
FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE,
CHECK (Rating BETWEEN 1 AND 5));
CREATE TABLE RSOs (
RSOName CHAR(50),
UniversityName CHAR(50) NOT NULL,
AdminID INT NOT NULL,
Status CHAR(10),
Description TEXT,
PRIMARY KEY (RSOName),
FOREIGN KEY (UniversityName) REFERENCES Universities(UniversityName),
FOREIGN KEY (AdminID) REFERENCES Admins(UserID));
CREATE TABLE Students_RSOs (
RSOName CHAR(50),
UserID INT,
PRIMARY KEY (RSOName, UserID),
FOREIGN KEY (RSOName) REFERENCES RSOs(RSOName) ON DELETE CASCADE,
FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE);
DELIMITER $$
CREATE TRIGGER RSOStatusActive
AFTER INSERT ON Students_RSOs
FOR EACH ROW BEGIN
IF((SELECT COUNT(*) FROM Students_RSOs M where M.RSOName = NEW.RSOName) > 4)
THEN
UPDATE RSOs
SET Status = 'active'
WHERE RSOName = NEW.RSOName;
END IF;
END$$
CREATE TRIGGER RSOStatusInactive
AFTER DELETE ON Students_RSOs
FOR EACH ROW BEGIN
IF((SELECT COUNT(*) FROM Students_RSOs M where M.RSOName = OLD.RSOName) < 5)
THEN
UPDATE RSOs
SET Status = 'inactive'
WHERE RSOName = OLD.RSOName;
END IF;
END$$
CREATE TRIGGER UpdateUserEmailDomain
AFTER UPDATE ON Universities
FOR EACH ROW BEGIN
IF OLD.Domain != NEW.Domain THEN
UPDATE Users
SET Email = CONCAT(SUBSTRING_INDEX(Email, '@', 1), '@', NEW.Domain)
WHERE UniversityName = NEW.UniversityName;
END IF;
END$$
DELIMITER ;