1
CREATE SCHEMA IF NOT EXISTS `lenasys` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
3
-- -----------------------------------------------------
4
CREATE USER 'dbsk'@'localhost' IDENTIFIED BY 'Tomten2009';
5
GRANT ALL PRIVILEGES ON lenasys.* TO 'dbsk'@'localhost' WITH GRANT OPTION;
8
-- -----------------------------------------------------
9
-- Table `lenasys`.`Users`
10
-- -----------------------------------------------------
12
CREATE TABLE IF NOT EXISTS `lenasys`.`Users` (
13
`userName` VARCHAR(20) NOT NULL ,
14
`userType` ENUM('Teacher','Student') DEFAULT 'Student' , -- 1=teacher and 2=student
15
`name` VARCHAR(45) NULL ,
16
`passwd` CHAR(40) NULL ,
17
`passwdHint` CHAR(100) NULL ,
18
`ssn` CHAR(13) NULL COMMENT 'yyyymmdd-xxxx' ,
19
PRIMARY KEY (`userName`) )
23
-- -----------------------------------------------------
24
-- Table `lenasys`.`Courses`
25
-- -----------------------------------------------------
26
CREATE TABLE IF NOT EXISTS `lenasys`.`Courses` (
27
`courseID` VARCHAR(10) NOT NULL ,
28
`name` VARCHAR(45) NULL ,
29
`courseData` VARCHAR(128) NULL , -- explenation about course, example: G1N 7,5hp + additional text
30
PRIMARY KEY (`courseID`))
33
-- -----------------------------------------------------
34
-- Table `lenasys`.`StudentCourseRegistrations`
35
-- -----------------------------------------------------
36
CREATE TABLE IF NOT EXISTS `lenasys`.`StudentCourseRegistrations` (
37
`courseOccasion` VARCHAR(16) NOT NULL , -- Example HT2012 period 2
38
`userName` VARCHAR(20) NOT NULL ,
39
`courseID` VARCHAR(10) NOT NULL , -- Example G14234
40
PRIMARY KEY (`courseOccasion`,`userName`, `courseID`) ,
41
FOREIGN KEY (`userName` )
42
REFERENCES `lenasys`.`Users` (`userName` )ON UPDATE CASCADE,
43
FOREIGN KEY (`courseID` )
44
REFERENCES `lenasys`.`Courses` (`courseID` )ON UPDATE CASCADE)
47
-- -----------------------------------------------------
48
-- Table `lenasys`.`Categories`
49
-- -----------------------------------------------------
51
CREATE TABLE IF NOT EXISTS `lenasys`.`Categories` (
52
`categoryName` VARCHAR(64) NOT NULL ,
53
`courseID` VARCHAR(10) NOT NULL ,
54
`orderNr` INT NOT NULL , -- the order of the examples in the same category
55
PRIMARY KEY (`categoryName`, `courseID`) ,
56
FOREIGN KEY (`courseID` )
57
REFERENCES `lenasys`.`Courses` (`courseID` )ON UPDATE CASCADE)
60
-- -----------------------------------------------------
61
-- Table `lenasys`.`SubCategories`
62
-- -----------------------------------------------------
63
CREATE TABLE IF NOT EXISTS `lenasys`.`SubCategories` (
64
`subCategoryName` VARCHAR(64) NOT NULL ,
65
`categoryName` VARCHAR(64) NOT NULL ,
66
`courseID` VARCHAR(10) NOT NULL ,
67
`orderNr` INT NOT NULL , -- the order of the examples in the same category
68
PRIMARY KEY (`subCategoryName`, `categoryName`, `courseID`) ,
69
FOREIGN KEY (`categoryName` , `courseID` )
70
REFERENCES `lenasys`.`Categories` (`categoryName` , `courseID` )ON UPDATE CASCADE)
73
-- -----------------------------------------------------
74
-- Table `lenasys`.`Quizzes`
75
-- -----------------------------------------------------
76
CREATE TABLE IF NOT EXISTS `lenasys`.`Quizzes` (
77
`quizNr` INT NOT NULL ,
78
`subCategoryName` VARCHAR(64) NOT NULL ,
79
`categoryName` VARCHAR(64) NOT NULL ,
80
`courseID` VARCHAR(10) NOT NULL ,
81
`quizData` VARCHAR(45) NULL ,
82
`allowMultipleReplies` BIT NULL , -- 1=true and 0=false
83
`autoCorrected` BIT NULL , -- if the quiz is corrected by auto or if the teacher needs to do it manually., 1=true and 0=false
84
`openingDate` DATETIME NULL , -- time for the student to do the quiz
85
`closingDate` DATETIME NULL ,
86
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
87
PRIMARY KEY (`quizNr`, `subCategoryName`, `categoryName` , `courseID`) ,
88
FOREIGN KEY (`subCategoryName`, `categoryName`, `courseID`)
89
REFERENCES `lenasys`.`SubCategories` (`subCategoryName`, `categoryName`, `courseID` )ON UPDATE CASCADE)
92
-- -----------------------------------------------------
93
-- Table `lenasys`.`QuizQuestions`
94
-- -----------------------------------------------------
95
CREATE TABLE IF NOT EXISTS `lenasys`.`QuizQuestions` (
96
`questionID` INT NOT NULL , -- The id of the individual question in the quiz.
97
`quizNr` INT NOT NULL , -- The quiz from wich the question is from
98
`subCategoryName` VARCHAR(64) NOT NULL ,
99
`categoryName` VARCHAR(64) NOT NULL ,
100
`courseID` VARCHAR(10) NOT NULL ,
101
`questionData` VARCHAR(45) NULL , -- the question
102
`correctAnswer` VARCHAR(45) NULL , -- the answer
103
PRIMARY KEY (`questionID`, `quizNr`, `subCategoryName`,`categoryName` , `courseID`) ,
104
FOREIGN KEY (`quizNr` ,`subCategoryName` ,`categoryName`, `courseID` )
105
REFERENCES `lenasys`.`Quizzes` (`quizNr` , `subCategoryName`,`categoryName` , `courseID` )ON UPDATE CASCADE)
108
-- -----------------------------------------------------
109
-- Table `lenasys`.`AssignedQuizzes`
110
-- -----------------------------------------------------
111
CREATE TABLE IF NOT EXISTS `lenasys`.`AssignedQuizzes` (
112
`courseOccasion` VARCHAR(16) NOT NULL , -- Example HT2012 period 2
113
`userName` VARCHAR(20) NOT NULL , -- wich student took the quiz
114
`courseID` VARCHAR(10) NOT NULL ,
115
`quizNr` INT NOT NULL ,
116
`subCategoryName` VARCHAR(64) NOT NULL ,
117
`categoryName` VARCHAR(64) NOT NULL ,
118
`quizCourseID` VARCHAR(10) NOT NULL ,
119
`answers` VARCHAR(45) NULL , -- answers provided by the student
120
`answerHash` VARCHAR(45) NULL , -- a security measure
121
`answeredTimeStamp` DATETIME NULL , -- when the student submittet the quiz
122
`grade` VARCHAR(8) NULL ,
123
`gradeComment` VARCHAR(200) NULL ,
124
PRIMARY KEY (`courseOccasion` ,`userName`, `courseID`, `quizNr`, `quizCourseID`) ,
125
FOREIGN KEY (`courseOccasion`,`userName` , `courseID` )
126
REFERENCES `lenasys`.`StudentCourseRegistrations` (`courseOccasion`,`userName` , `courseID` )ON UPDATE CASCADE,
127
FOREIGN KEY (`quizNr` ,`subCategoryName`,`categoryName`, `quizCourseID` )
128
REFERENCES `lenasys`.`Quizzes` (`quizNr` ,`subCategoryName`,`categoryName`, `courseID` )ON UPDATE CASCADE)
133
-- -----------------------------------------------------
134
-- Table `lenasys`.`Examples`
135
-- -----------------------------------------------------
136
CREATE TABLE IF NOT EXISTS `lenasys`.`Examples` (
137
`exampleName` VARCHAR(20) NOT NULL ,
138
`subCategoryName` VARCHAR(64) NOT NULL ,
139
`categoryName` VARCHAR(64) NOT NULL ,
140
`courseID` VARCHAR(10) NOT NULL ,
141
`orderNr` INT NOT NULL , -- the order of the examples in the same category
142
`description` VARCHAR(200) NULL ,
143
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
144
PRIMARY KEY (`exampleName`, `subCategoryName`, `categoryName`, `courseID`) ,
145
FOREIGN KEY (`subCategoryName`, `categoryName`, `courseID` )
146
REFERENCES `lenasys`.`SubCategories` (`subCategoryName`,`categoryName`, `courseID` )ON UPDATE CASCADE)
149
-- -----------------------------------------------------
150
-- Table `lenasys`.`Files`
151
-- -----------------------------------------------------
152
CREATE TABLE IF NOT EXISTS `lenasys`.`Files` (
153
`fileName` VARCHAR(20) NOT NULL ,
154
`fileType` ENUM('Text', 'Code', 'Video', 'Picture') DEFAULT 'text' , -- text=1, code=2, video=3 picture=4
155
`codeLanguage` VARCHAR(10) NULL , -- example: javascript, html, m.m.
156
`dataBlob` BLOB NULL , -- This is where the binary file is stored. Searchable.
157
`updatedAt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
158
PRIMARY KEY (`fileName`))
160
-- -----------------------------------------------------
161
-- Table `lenasys`.`Containers`
162
-- -----------------------------------------------------
163
CREATE TABLE IF NOT EXISTS `lenasys`.`Containers` (
164
`columnNr` INT NOT NULL ,
165
`orderNr` INT NOT NULL , -- the order of the examples in the same category
166
`fileName` VARCHAR(20) NOT NULL , -- primary key??
167
`exampleName` VARCHAR(20) NOT NULL ,
168
`subCategoryName` VARCHAR(64) NOT NULL ,
169
`categoryName` VARCHAR(64) NOT NULL ,
170
`courseID` VARCHAR(10) NOT NULL ,
171
`executable` BIT , -- 1=true and 0=false
172
PRIMARY KEY (`columnNr`, `orderNr`, `fileName`,`exampleName`,`subCategoryName`, `categoryName`, `courseID`) ,
173
FOREIGN KEY (`fileName` )
174
REFERENCES `lenasys`.`Files` (`fileName` )ON UPDATE CASCADE,
175
FOREIGN KEY (`exampleName`,`subCategoryName` ,`categoryName` , `courseID` )
176
REFERENCES `lenasys`.`Examples` (`exampleName`,`subCategoryName` ,`categoryName` , `courseID` )ON UPDATE CASCADE)
179
-- -----------------------------------------------------
180
-- Table `lenasys`.`FileInterestingLines`
181
-- -----------------------------------------------------
182
CREATE TABLE IF NOT EXISTS `lenasys`.`FileInterestingLines` (
183
`id` INT NOT NULL AUTO_INCREMENT ,
184
`fileName` VARCHAR(20) NOT NULL ,
185
`columnNr` INT NOT NULL ,
186
`orderNr` INT NOT NULL ,
187
`exampleName` VARCHAR(20) NOT NULL ,
188
`subCategoryName` VARCHAR(64) NOT NULL ,
189
`categoryName` VARCHAR(64) NOT NULL ,
190
`courseID` VARCHAR(10) NOT NULL ,
193
PRIMARY KEY (`id`, `fileName` , `columnNr`, `exampleName`,`subCategoryName`,`categoryName`, `courseID`) ,
194
FOREIGN KEY (`columnNr`, `orderNr`, `fileName`, `exampleName`,`subCategoryName`, `categoryName`, `courseID`)
195
REFERENCES `lenasys`.`Containers` (`columnNr`, `orderNr`, `fileName`, `exampleName`,`subCategoryName`, `categoryName`, `courseID`)ON UPDATE CASCADE)
198
-- -----------------------------------------------------
199
-- Table `lenasys`.`Keywords`
200
-- -----------------------------------------------------
201
CREATE TABLE IF NOT EXISTS `lenasys`.`Keywords` (
202
`keyword` VARCHAR(20) NOT NULL ,
203
`exampleName` VARCHAR(20) NOT NULL ,
204
`subCategoryName` VARCHAR(64) NOT NULL ,
205
`categoryName` VARCHAR(64) NOT NULL ,
206
`courseID` VARCHAR(10) NOT NULL ,
207
PRIMARY KEY (`keyword`, `exampleName`, `subCategoryName` , `categoryName`, `courseID`) ,
208
FOREIGN KEY (`exampleName`,`subCategoryName` , `categoryName`, `courseID` )
209
REFERENCES `lenasys`.`Examples` (`exampleName`, `subCategoryName` , `categoryName`, `courseID` )ON UPDATE CASCADE)
213
-- -----------------------------------------------------
214
-- Table `lenasys`.`logUsersQuizLogins`
215
-- -----------------------------------------------------
216
CREATE TABLE IF NOT EXISTS `lenasys`.`logUsersQuizLogins` (
218
`userName` VARCHAR(20) NOT NULL ,
219
`userAgent` VARCHAR(200) NOT NULL , -- web browser and version
220
`userIP` VARCHAR(20) NOT NULL , -- ip-number
221
`browserID` VARCHAR(64) /*NOT NULL*/ , -- autogenerated id for local-storage
222
`courseID` VARCHAR(10) NOT NULL ,
223
`courseOccasion` VARCHAR(16) NULL ,
224
`quizNr` INT NOT NULL ,
225
`loginTimeStamp` DATETIME NOT NULL ,
226
`success` BIT NOT NULL , -- 1=true and 0=false
229
-- -------------------------------------------------
230
-- Table `lenasys`.`logAssignedQuizzesAnswers`
231
-- -----------------------------------------------------
232
CREATE TABLE IF NOT EXISTS `lenasys`.`logAssignedQuizzesAnswers` (
234
`userName` VARCHAR(20) NOT NULL ,
235
`userAgent` VARCHAR(200) NOT NULL ,
236
`userIP` VARCHAR(20) NOT NULL ,
237
`courseID` VARCHAR(10) NOT NULL ,
238
`courseOccasion` VARCHAR(16) NOT NULL ,
239
`quizNr` INT NOT NULL ,
240
`answers` VARCHAR(45) NULL ,
241
`answerHash` VARCHAR(45) NULL ,
242
`answeredTimeStamp` DATETIME NULL , -- TIMESTAMP ??
243
`grade` VARCHAR(8) NULL ,
244
`gradeComment` VARCHAR(200) NULL ,
248
-- -------------------------------------------------
249
-- Table `lenasys`.`logBenchmark`
250
-- -----------------------------------------------------
251
CREATE TABLE IF NOT EXISTS `lenasys`.`logBenchmark` (
253
`userName` VARCHAR(20) NOT NULL ,
254
`userAgent` VARCHAR(200) NOT NULL ,
255
`userIP` VARCHAR(20) NOT NULL ,
256
`browser` VARCHAR(20) NOT NULL , -- will they be used to show different views? Can we just use userAgent instead?
257
`browserVersion` VARCHAR(20) NOT NULL , -- -||-
258
`renderer` VARCHAR(20) NOT NULL , -- ??
259
`rendererVersion` VARCHAR(20) NOT NULL , -- ??
260
`os` VARCHAR(64) NOT NULL ,
261
`osVersion` VARCHAR(20) NOT NULL ,
262
`fps` VARCHAR(20) NOT NULL ,
263
`maxFps` VARCHAR(20) NOT NULL ,
264
`hostName` VARCHAR(20) NOT NULL , -- Ändrad till hostName
265
`app` VARCHAR(20) NOT NULL ,
266
`screenResolution` VARCHAR(20) NOT NULL ,
267
`logTimeStamp` DATETIME NOT NULL ,
268
`runtime` INT NOT NULL ,
271
-- -------------------------------------------------
273
INSERT INTO `lenasys`.`Users` (`userName`,`name`,`passwd`, passwdHint,`userType`,`ssn`)
274
VALUES ('student','Per Student',sha1('Syp9393'),'gamla vanliga' ,2,'19900385-2345'),
275
('student2','Gösta Student',sha1('Syp9393'),'SypARN',2,'19800385-2385'),
276
('lärare','Kalle Lärare',sha1('Syp9393'),'Syp och året då Sverige först tillåter kommersiell radio x2',1,'19800385-2325');
278
INSERT INTO `Courses`(`courseID`, `name`, `courseData`)
279
VALUES('DA133G' , 'Webbutveckling - datorgrafik G1N' , ' 7,5hp (IKI)'),
280
('d1popcrn' , 'Webbutveckling - Läran om Gson' , ' 7,5hp (IKI)'),
281
('DAG123' , 'Webbutveckling - Nånting' , ' 7,5hp (IKI)');
283
INSERT INTO `StudentCourseRegistrations`(`courseOccasion`, `userName`, `courseID`)
284
VALUES ('HT2012 period 2','student','d1popcrn'),
285
('HT2012 period 2','student','DA133G'),
286
('HT2012 period 2','student2','d1popcrn'),
287
('HT2012 period 2','student2','DAG123');
289
INSERT INTO `Categories`(`categoryName`, `courseID`, `orderNr`)
290
VALUES ('Vektorgrafik','DA133G', 1),
291
('Shading','DA133G', 2),
293
('Tidigt 90-tal','d1popcrn', 1),
294
('Categorie i nånting','DAG123', 1),
295
('Categorie i någontingen mer','DAG123', 2);
297
INSERT INTO `SubCategories`(`subCategoryName`, `categoryName`, `courseID`, `orderNr`)
298
VALUES ('Punkt' ,'Vektorgrafik','DA133G', 1),
299
('Linjer' ,'Vektorgrafik','DA133G', 2),
300
('Böjningar' ,'Vektorgrafik','DA133G', 3),
301
('Vertexshading','Shading','DA133G', 1),
302
('Globalshading','Shading','DA133G', 2),
303
('Bra 3d' , '3D','DA133G', 1),
304
('Dålig 3d' , '3D','DA133G', 2),
305
('Smurfhits','Tidigt 90-tal','d1popcrn', 1),
306
('NES','Tidigt 90-tal','d1popcrn', 2),
307
('Sovmorgon','Tidigt 90-tal','d1popcrn', 3),
308
('Subcategorie i nånting' ,'Categorie i nånting','DAG123', 1),
309
('Subcategorie2 i nånting' ,'Categorie i nånting','DAG123', 2),
310
('Subcategorie i nåntingen mer', 'Categorie i någontingen mer','DAG123', 1),
311
('Subcategorie2 i nåntingen mer', 'Categorie i någontingen mer','DAG123', 2);
315
INSERT INTO Quizzes(`quizNr`, `subCategoryName`, `categoryName`, `courseID`, `quizData`, `allowMultipleReplies`,`autoCorrected`, `openingDate`,`closingDate` )
316
VALUES(1,'punkt' ,'Vektorgrafik','DA133G','Svara så gott du kan, lycka till',1,1, '2013-05-20 08:00:00','2013-05-25 23:59:00'),
317
(2,'punkt' ,'Vektorgrafik','DA133G','Lol glhf',1,1, '2013-05-20 08:00:00','2013-05-25 23:59:00'),
318
(3,'punkt' ,'Vektorgrafik','DA133G','ajaja detta kommer nu gå bra *NAWHT*',1,1, '2013-05-20 08:00:00','2013-05-25 23:59:00'),
319
(1,'linjer' ,'Vektorgrafik','DA133G','happ happ lycka till',1,1, '2013-05-20 08:00:00','2013-05-25 23:59:00');
321
INSERT INTO QuizQuestions(`questionID`, `quizNr`, `subCategoryName`, `categoryName`, `courseID`, `questionData`, `correctAnswer`)
322
VALUES(1,1,'punkt' ,'Vektorgrafik','DA133G','vad är roten av pi plus solens massa?','inte vet jag lol'),
323
(2,1,'punkt' ,'Vektorgrafik','DA133G','hur mår du?','Bra som bara den');
325
INSERT INTO Examples(`exampleName`, `subCategoryName`, `categoryName`, `courseID`, `orderNr`, `description`)
326
VALUES('punkt example 1','punkt' ,'Vektorgrafik','DA133G',1,'nån sorts förklaring om punkter'),
327
('punkt example 2','punkt' ,'Vektorgrafik','DA133G',2,'nån sorts förklaring om punkter i example 2'),
328
('ett till exempel inom punkt','punkt' ,'Vektorgrafik','DA133G',3,'nån sorts förklaring om punkter igen'),
329
('linjer example 1','linjer' ,'Vektorgrafik','DA133G',1,'nån sorts förklaring om linjer');
331
INSERT INTO Files(`fileName`,`fileType`,`codeLanguage`, `dataBlob`)
332
VALUES('exempel fil1',1,'html','Lorem ipsum dolor sit amet, consectetur adipiscing elit.
333
Phasellus a tellus lacus, a dapibus velit. Integer ac lorem dui, nec condimentum purus. Nullam convallis erat a
334
mauris pulvinar adipiscing. In consectetur, odio sit amet dictum pulvinar, erat risus condimentum mi, eu eleifend
335
dolor est id elit. Pellentesque eu tellus sed sem molestie fringilla. Integer auctor arcu nec nunc pharetra non
336
consectetur augue viverra. Pellentesque lorem nisl, tristique sed lobortis et, tincidunt sit amet diam. Maecenas
337
lacinia laoreet ligula, eget pretium libero venenatis malesuada. Suspendisse eu velit in arcu consectetur dictum a quis orci.
338
Maecenas vulputate tincidunt odio sit amet interdum. Curabitur non ante tristique mi malesuada dictum at quis nunc.
339
Suspendisse ornare leo a elit egestas eu rutrum lorem cursus. Quisque sollicitudin, nisi eget consectetur auctor,
340
leo risus blandit eros, id aliquet purus tortor a turpis. Donec venenatis blandit est quis imperdiet. Sed mauris eros,
341
pharetra vitae tempus vel, pretium at purus.'),
343
('exempel fil2',1,'html','Donec sed turpis ante, et dapibus augue. Pellentesque habitant morbi tristique
344
senectus et netus et malesuada fames ac turpis egestas. Sed at tellus ante. Nunc non dolor ipsum, quis lacinia felis.
345
Sed tristique, leo eu imperdiet laoreet, lacus lacus porta purus, quis laoreet nisi sem non orci. In non consequat enim.
346
Donec lacinia auctor convallis. Nulla facilisi. Nulla tortor mi, accumsan vel cursus nec, porta nec ante.
347
Aenean venenatis elit vel sem sodales vulputate. Donec adipiscing porta tortor, sed sollicitudin erat dapibus id');
350
-- -----------------------------------------------------
351
-- allow maximum of 5 succesfull quiz-attemps is a good begining for implementation of the loggingtables to add restriction.
352
-- ska courseID i ContainerFiles vara foreignkey ifrån contaiers??
b'\\ No newline at end of file'