1
CREATE SCHEMA IF NOT EXISTS `lenasys` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
3
-- -----------------------------------------------------
7
-- -----------------------------------------------------
8
-- Table `lenasys`.`Users`
9
-- -----------------------------------------------------
11
CREATE TABLE IF NOT EXISTS `lenasys`.`Users` (
12
`userName` VARCHAR(20) NOT NULL ,
13
`userType` ENUM('Teacher','Student') DEFAULT 'Student' , -- 1=teacher and 2=student
14
`name` VARCHAR(45) NULL ,
15
`passwd` CHAR(40) NULL ,
16
`passwdHint` CHAR(100) NULL ,
17
`ssn` CHAR(13) NULL COMMENT 'yyyymmdd-xxxx' ,
18
PRIMARY KEY (`userName`) )
22
-- -----------------------------------------------------
23
-- Table `lenasys`.`Courses`
24
-- -----------------------------------------------------
25
CREATE TABLE IF NOT EXISTS `lenasys`.`Courses` (
26
`courseID` VARCHAR(10) NOT NULL ,
27
`name` VARCHAR(45) NULL ,
28
`courseData` VARCHAR(10) NULL , -- Short explenation about course, example: G1N 7,5hp
29
PRIMARY KEY (`courseID`))
32
-- -----------------------------------------------------
33
-- Table `lenasys`.`StudentCourseRegistrations`
34
-- -----------------------------------------------------
35
CREATE TABLE IF NOT EXISTS `lenasys`.`StudentCourseRegistrations` (
36
`courseOccasion` VARCHAR(16) NOT NULL , -- Example HT2012 period 2
37
`userName` VARCHAR(20) NOT NULL ,
38
`courseID` VARCHAR(10) NOT NULL , -- Example G14234
39
PRIMARY KEY (`courseOccasion`,`userName`, `courseID`) ,
40
FOREIGN KEY (`userName` )
41
REFERENCES `lenasys`.`Users` (`userName` )ON UPDATE CASCADE,
42
FOREIGN KEY (`courseID` )
43
REFERENCES `lenasys`.`Courses` (`courseID` )ON UPDATE CASCADE)
46
-- -----------------------------------------------------
47
-- Table `lenasys`.`Categories`
48
-- -----------------------------------------------------
50
CREATE TABLE IF NOT EXISTS `lenasys`.`Categories` (
51
`categoryName` VARCHAR(64) NOT NULL ,
52
`courseID` VARCHAR(10) NOT NULL ,
53
`orderNr` INT NOT NULL , -- the order of the examples in the same category
54
PRIMARY KEY (`categoryName`, `courseID`) ,
55
FOREIGN KEY (`courseID` )
56
REFERENCES `lenasys`.`Courses` (`courseID` )ON UPDATE CASCADE)
59
-- -----------------------------------------------------
60
-- Table `lenasys`.`SubCategories`
61
-- -----------------------------------------------------
62
CREATE TABLE IF NOT EXISTS `lenasys`.`SubCategories` (
63
`subCategoryName` VARCHAR(64) NOT NULL ,
64
`categoryName` VARCHAR(64) NOT NULL ,
65
`courseID` VARCHAR(10) NOT NULL ,
66
`orderNr` INT NOT NULL , -- the order of the examples in the same category
67
PRIMARY KEY (`subCategoryName`, `categoryName`, `courseID`) ,
68
FOREIGN KEY (`categoryName` , `courseID` )
69
REFERENCES `lenasys`.`Categories` (`categoryName` , `courseID` )ON UPDATE CASCADE)
72
-- -----------------------------------------------------
73
-- Table `lenasys`.`Quizzes`
74
-- -----------------------------------------------------
75
CREATE TABLE IF NOT EXISTS `lenasys`.`Quizzes` (
76
`quizNr` INT NOT NULL ,
77
`subCategoryName` VARCHAR(64) NOT NULL ,
78
`categoryName` VARCHAR(64) NOT NULL ,
79
`courseID` VARCHAR(10) NOT NULL ,
80
`quizData` VARCHAR(45) NULL ,
81
`allowMultipleReplies` BIT NULL , -- 1=true and 0=false
82
`autoCorrected` BIT NULL , -- if the quiz is corrected by auto or if the teacher needs to do it manually., 1=true and 0=false
83
`openingDate` DATETIME NULL , -- time for the student to do the quiz
84
`closingDate` DATETIME NULL ,
85
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
86
PRIMARY KEY (`quizNr`, `subCategoryName`, `categoryName` , `courseID`) ,
87
FOREIGN KEY (`subCategoryName`, `categoryName`, `courseID`)
88
REFERENCES `lenasys`.`SubCategories` (`subCategoryName`, `categoryName`, `courseID` )ON UPDATE CASCADE)
91
-- -----------------------------------------------------
92
-- Table `lenasys`.`QuizQuestions`
93
-- -----------------------------------------------------
94
CREATE TABLE IF NOT EXISTS `lenasys`.`QuizQuestions` (
95
`questionID` INT NOT NULL , -- The id of the individual question in the quiz.
96
`quizNr` INT NOT NULL , -- The quiz from wich the question is from
97
`subCategoryName` VARCHAR(64) NOT NULL ,
98
`categoryName` VARCHAR(64) NOT NULL ,
99
`courseID` VARCHAR(10) NOT NULL ,
100
`questionData` VARCHAR(45) NULL , -- the question
101
`correctAnswer` VARCHAR(45) NULL , -- the answer
102
PRIMARY KEY (`questionID`, `quizNr`, `subCategoryName`,`categoryName` , `courseID`) ,
103
FOREIGN KEY (`quizNr` ,`subCategoryName` ,`categoryName`, `courseID` )
104
REFERENCES `lenasys`.`Quizzes` (`quizNr` , `subCategoryName`,`categoryName` , `courseID` )ON UPDATE CASCADE)
107
-- -----------------------------------------------------
108
-- Table `lenasys`.`AssignedQuizzes`
109
-- -----------------------------------------------------
110
CREATE TABLE IF NOT EXISTS `lenasys`.`AssignedQuizzes` (
111
`courseOccasion` VARCHAR(16) NOT NULL , -- Example HT2012 period 2
112
`userName` VARCHAR(20) NOT NULL , -- wich student took the quiz
113
`courseID` VARCHAR(10) NOT NULL ,
114
`quizNr` INT NOT NULL ,
115
`subCategoryName` VARCHAR(64) NOT NULL ,
116
`categoryName` VARCHAR(64) NOT NULL ,
117
`quizCourseID` VARCHAR(10) NOT NULL ,
118
`answers` VARCHAR(45) NULL , -- answers provided by the student
119
`answerHash` VARCHAR(45) NULL , -- a security measure
120
`answeredTimeStamp` DATETIME NULL , -- when the student submittet the quiz
121
`grade` VARCHAR(8) NULL ,
122
`gradeComment` VARCHAR(200) NULL ,
123
PRIMARY KEY (`courseOccasion` ,`userName`, `courseID`, `quizNr`, `quizCourseID`) ,
124
FOREIGN KEY (`courseOccasion`,`userName` , `courseID` )
125
REFERENCES `lenasys`.`StudentCourseRegistrations` (`courseOccasion`,`userName` , `courseID` )ON UPDATE CASCADE,
126
FOREIGN KEY (`quizNr` ,`subCategoryName`,`categoryName`, `quizCourseID` )
127
REFERENCES `lenasys`.`Quizzes` (`quizNr` ,`subCategoryName`,`categoryName`, `courseID` )ON UPDATE CASCADE)
132
-- -----------------------------------------------------
133
-- Table `lenasys`.`Examples`
134
-- -----------------------------------------------------
135
CREATE TABLE IF NOT EXISTS `lenasys`.`Examples` (
136
`exampleName` VARCHAR(20) NOT NULL ,
137
`subCategoryName` VARCHAR(64) NOT NULL ,
138
`categoryName` VARCHAR(64) NOT NULL ,
139
`courseID` VARCHAR(10) NOT NULL ,
140
`orderNr` INT NOT NULL , -- the order of the examples in the same category
141
`description` VARCHAR(200) NULL ,
142
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
143
PRIMARY KEY (`exampleName`, `subCategoryName`, `categoryName`, `courseID`) ,
144
FOREIGN KEY (`subCategoryName`, `categoryName`, `courseID` )
145
REFERENCES `lenasys`.`SubCategories` (`subCategoryName`,`categoryName`, `courseID` )ON UPDATE CASCADE)
148
-- -----------------------------------------------------
149
-- Table `lenasys`.`Files`
150
-- -----------------------------------------------------
151
CREATE TABLE IF NOT EXISTS `lenasys`.`Files` (
152
`fileName` VARCHAR(20) NOT NULL ,
153
`fileType` ENUM('Text', 'Code', 'Video', 'Picture') DEFAULT 'text' , -- text=1, code=2, video=3 picture=4
154
`codeLanguage` VARCHAR(10) NULL , -- example: javascript, html, m.m.
155
`dataBlob` BLOB NULL , -- This is where the binary file is stored. Searchable.
156
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
157
PRIMARY KEY (`fileName`))
159
-- -----------------------------------------------------
160
-- Table `lenasys`.`Containers`
161
-- -----------------------------------------------------
162
CREATE TABLE IF NOT EXISTS `lenasys`.`Containers` (
163
`columnNr` INT NOT NULL ,
164
`orderNr` INT NOT NULL , -- the order of the examples in the same category
165
`fileName` VARCHAR(20) NOT NULL , -- primary key??
166
`exampleName` VARCHAR(20) NOT NULL ,
167
`subCategoryName` VARCHAR(64) NOT NULL ,
168
`categoryName` VARCHAR(64) NOT NULL ,
169
`courseID` VARCHAR(10) NOT NULL ,
170
`executable` BIT , -- 1=true and 0=false
171
PRIMARY KEY (`columnNr`, `orderNr`, `fileName`,`exampleName`,`subCategoryName`, `categoryName`, `courseID`) ,
172
FOREIGN KEY (`fileName` )
173
REFERENCES `lenasys`.`Files` (`fileName` )ON UPDATE CASCADE,
174
FOREIGN KEY (`exampleName`,`subCategoryName` ,`categoryName` , `courseID` )
175
REFERENCES `lenasys`.`Examples` (`exampleName`,`subCategoryName` ,`categoryName` , `courseID` )ON UPDATE CASCADE)
178
-- -----------------------------------------------------
179
-- Table `lenasys`.`FileInterestingLines`
180
-- -----------------------------------------------------
181
CREATE TABLE IF NOT EXISTS `lenasys`.`FileInterestingLines` (
182
`id` INT NOT NULL AUTO_INCREMENT ,
183
`fileName` VARCHAR(20) NOT NULL ,
184
`columnNr` INT NOT NULL ,
185
`orderNr` INT NOT NULL ,
186
`exampleName` VARCHAR(20) NOT NULL ,
187
`subCategoryName` VARCHAR(64) NOT NULL ,
188
`categoryName` VARCHAR(64) NOT NULL ,
189
`courseID` VARCHAR(10) NOT NULL ,
192
PRIMARY KEY (`id`, `fileName` , `columnNr`, `exampleName`,`subCategoryName`,`categoryName`, `courseID`) ,
193
FOREIGN KEY (`columnNr`, `orderNr`, `fileName`, `exampleName`,`subCategoryName`, `categoryName`, `courseID`)
194
REFERENCES `lenasys`.`Containers` (`columnNr`, `orderNr`, `fileName`, `exampleName`,`subCategoryName`, `categoryName`, `courseID`)ON UPDATE CASCADE)
197
-- -----------------------------------------------------
198
-- Table `lenasys`.`Keywords`
199
-- -----------------------------------------------------
200
CREATE TABLE IF NOT EXISTS `lenasys`.`Keywords` (
201
`keyword` VARCHAR(20) NOT NULL ,
202
`exampleName` VARCHAR(20) NOT NULL ,
203
`subCategoryName` VARCHAR(64) NOT NULL ,
204
`categoryName` VARCHAR(64) NOT NULL ,
205
`courseID` VARCHAR(10) NOT NULL ,
206
PRIMARY KEY (`keyword`, `exampleName`, `subCategoryName` , `categoryName`, `courseID`) ,
207
FOREIGN KEY (`exampleName`,`subCategoryName` , `categoryName`, `courseID` )
208
REFERENCES `lenasys`.`Examples` (`exampleName`, `subCategoryName` , `categoryName`, `courseID` )ON UPDATE CASCADE)
212
-- -----------------------------------------------------
213
-- Table `lenasys`.`logUsersQuizLogins`
214
-- -----------------------------------------------------
215
CREATE TABLE IF NOT EXISTS `lenasys`.`logUsersQuizLogins` (
217
`userName` VARCHAR(20) NOT NULL ,
218
`userAgent` VARCHAR(200) NOT NULL , -- web browser and version
219
`userIP` VARCHAR(20) NOT NULL , -- ip-number
220
`browserID` VARCHAR(64) /*NOT NULL*/ , -- autogenerated id for local-storage
221
`courseID` VARCHAR(10) NOT NULL ,
222
`courseOccasion` VARCHAR(16) NULL ,
223
`quizNr` INT NOT NULL ,
224
`loginTimeStamp` DATETIME NOT NULL ,
225
`success` BIT NOT NULL , -- 1=true and 0=false
228
-- -------------------------------------------------
229
-- Table `lenasys`.`logAssignedQuizzesAnswers`
230
-- -----------------------------------------------------
231
CREATE TABLE IF NOT EXISTS `lenasys`.`logAssignedQuizzesAnswers` (
233
`userName` VARCHAR(20) NOT NULL ,
234
`userAgent` VARCHAR(200) NOT NULL ,
235
`userIP` VARCHAR(20) NOT NULL ,
236
`courseID` VARCHAR(10) NOT NULL ,
237
`courseOccasion` VARCHAR(16) NOT NULL ,
238
`quizNr` INT NOT NULL ,
239
`answers` VARCHAR(45) NULL ,
240
`answerHash` VARCHAR(45) NULL ,
241
`answeredTimeStamp` DATETIME NULL , -- TIMESTAMP ??
242
`grade` VARCHAR(8) NULL ,
243
`gradeComment` VARCHAR(200) NULL ,
247
-- -------------------------------------------------
248
-- Table `lenasys`.`logBenchmark`
249
-- -----------------------------------------------------
250
CREATE TABLE IF NOT EXISTS `lenasys`.`logBenchmark` (
252
`userName` VARCHAR(20) NOT NULL ,
253
`userAgent` VARCHAR(200) NOT NULL ,
254
`userIP` VARCHAR(20) NOT NULL ,
255
`browser` VARCHAR(20) NOT NULL , -- will they be used to show different views? Can we just use userAgent instead?
256
`browserVersion` VARCHAR(20) NOT NULL , -- -||-
257
`renderer` VARCHAR(20) NOT NULL , -- ??
258
`rendererVersion` VARCHAR(20) NOT NULL , -- ??
259
`os` VARCHAR(64) NOT NULL ,
260
`osVersion` VARCHAR(20) NOT NULL ,
261
`fps` VARCHAR(20) NOT NULL ,
262
`maxFps` VARCHAR(20) NOT NULL ,
263
`hostName` VARCHAR(20) NOT NULL , -- Ändrad till hostName
264
`app` VARCHAR(20) NOT NULL ,
265
`screenResolution` VARCHAR(20) NOT NULL ,
266
`logTimeStamp` DATETIME NOT NULL ,
267
`runtime` INT NOT NULL ,
270
-- -------------------------------------------------
272
INSERT INTO `lenasys`.`Users` (`userName`,`name`,`passwd`, passwdHint,`userType`,`ssn`)
273
VALUES ('student','Per Student',sha1('Syp9393'),'gamla vanliga' ,2,'19900385-2345'),
274
('student2','Gösta Student',sha1('Syp9393'),'SypARN',2,'19800385-2385'),
275
('lärare','Kalle Lärare',sha1('Syp9393'),'Syp och året då Sverige först tillåter kommersiell radio x2',1,'19800385-2325');
277
INSERT INTO `Courses`(`courseID`, `name`, `courseData`)
278
VALUES('DA133G' , ' Webbutveckling - datorgrafik G1N' , ' 7,5hp (IKI)'),
279
('d1popcrn' , ' Webbutveckling - Läran om Gson' , ' 7,5hp (IKI)'),
280
('DAG123' , ' Webbutveckling - Nånting' , ' 7,5hp (IKI)');
282
INSERT INTO `StudentCourseRegistrations`(`courseOccasion`, `userName`, `courseID`)
283
VALUES ('HT2012 period 2','student','d1popcrn'),
284
('HT2012 period 2','student','DA133G'),
285
('HT2012 period 2','student2','d1popcrn');
287
INSERT INTO `Categories`(`categoryName`, `courseID`, `orderNr`)
288
VALUES ('Vektorgrafik','DA133G', 1),
289
('Shading','DA133G', 2),
291
('tidigt 90-tal','d1popcrn', 1),
292
('categorie i nånting','DAG123', 1),
293
('categorie i någontingen mer','d1popcrn', 2);
295
INSERT INTO `SubCategories`(`subCategoryName`, `categoryName`, `courseID`, `orderNr`)
296
VALUES ('punkt' ,'Vektorgrafik','DA133G', 1),
297
('linjer' ,'Vektorgrafik','DA133G', 2),
298
('böjningar' ,'Vektorgrafik','DA133G', 3),
299
('Vertexshading','Shading','DA133G', 1),
300
('globalshading','Shading','DA133G', 2),
301
('bra 3d' , '3D','DA133G', 1),
302
('dålig 3d' , '3D','DA133G', 2),
303
('Smurfhits','tidigt 90-tal','d1popcrn', 1),
304
('NES','tidigt 90-tal','d1popcrn', 2),
305
('Sovmorgon','tidigt 90-tal','d1popcrn', 3),
306
('subcategorie i nånting' ,'categorie i nånting','DAG123', 1),
307
('subcategorie2 i nånting' ,'categorie i nånting','DAG123', 2),
308
('subcategorie i nåntingen mer', 'categorie i någontingen mer','d1popcrn', 1),
309
('subcategorie2 i nåntingen mer', 'categorie i någontingen mer','d1popcrn', 2);
312
INSERT INTO Quizzes(`quizNr`, `subCategoryName`, `categoryName`, `courseID`, `quizData`, `allowMultipleReplies`, autoCorrected`, `openingDate`,`closingDate` )
313
VALUES(1,'punkt' ,'Vektorgrafik','DA133G', );
316
`quizNr` INT NOT NULL ,
317
`subCategoryName` VARCHAR(64) NOT NULL ,
318
`categoryName` VARCHAR(64) NOT NULL ,
319
`courseID` VARCHAR(10) NOT NULL ,
320
`quizData` VARCHAR(45) NULL ,
321
`allowMultipleReplies` BIT NULL , -- 1=true and 0=false
322
`autoCorrected` BIT NULL , -- if the quiz is corrected by auto or if the teacher needs to do it manually., 1=true and 0=false
323
`openingDate` DATETIME NULL , -- time for the student to do the quiz
324
`closingDate` DATETIME NULL ,
325
INSERT INTO QuizVariant(quizNr, qVarNr, quizCourseName, correctAnswer, quizObjectIDs)
326
VALUES(1,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','1,2,3,4,5,6,7,8','TEST1 TEST2 TEST3 TEST4');
328
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
329
VALUES('TEST1',1,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST1"><p>Du ska göra bla bla...</p></div>');
331
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
332
VALUES('TEST2',1,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST2"><strong>1 2 3 4 5</strong></div>');
334
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
335
VALUES('TEST3',1,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("TEST3");</script>');
337
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
338
VALUES('TEST4',1,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("<TEST4");</script>');
340
INSERT INTO QuizVariant(quizNr, qVarNr, quizCourseName, correctAnswer, quizObjectIDs)
341
VALUES(1,2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','8,7,6,5,4,3,2,1','TEST1 TEST2 TEST3 TEST4');
343
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
344
VALUES('TEST1',1,2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST1"><p>Variant 2 på dugga 1</p></div>');
346
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
347
VALUES('TEST2',1,2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST2"><strong>1111 2222 33333</strong></div>');
349
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
350
VALUES('TEST3',1,2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("TEST3 Var2");</script>');
352
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
353
VALUES('TEST4',1,2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("<TEST4 Var2");</script>');
355
INSERT INTO Quiz(nr, courseName, opening, closing, autoCorrected, quizData)
356
VALUES(2,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','2012-08-19 00:00:00','2012-08-28 00:00:00',0,'<div id="dugga"><h1>Dugga 2 för en kurs</h1><p>Duggan ditten och duggan datten</p></div>');
358
INSERT INTO QuizVariant(quizNr, qVarNr, quizCourseName, correctAnswer, quizObjectIDs)
359
VALUES(2,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','1,2,3,4,5,6,7,8','TEST1 TEST2 TEST3 TEST4');
361
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
362
VALUES('TEST1',2,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST1"><p>I dugga 2 variant 1 ska bla bla...</p></div>');
364
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
365
VALUES('TEST2',2,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<div id="TEST2"><strong>--!!--!!--!!--</strong></div>');
367
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)
368
VALUES('TEST3',2,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("TEST3 d2 var1");</script>');
370
INSERT INTO QuizVariantObject(id, quizNr, qVarNr, quizCourseName, objectData)VALUES('TEST4',2,1,'DA133G Webbutveckling - datorgrafik G1N, 7,5hp (IKI)','<script lang="Javascript">alert("<TEST4 d2 var1");</script>');
372
-- -----------------------------------------------------
373
-- allow maximum of 5 succesfull quiz-attemps is a good begining for implementation of the loggingtables to add restriction.
374
-- ska courseID i ContainerFiles vara foreignkey ifrån contaiers??
b'\\ No newline at end of file'