diff --git a/db/Sample.sql b/db/Sample.sql index 34e91239609a1cc751d72fcae7d8c16090a31f09..10a9f3a378cd5853a2777d789d97ca6b378cc4ec 100644 --- a/db/Sample.sql +++ b/db/Sample.sql @@ -20,6 +20,28 @@ SET time_zone = "+00:00"; -- База данных: `Sample2` -- + + +-- +-- Дамп данных таблицы `job_positions` +-- + +INSERT INTO `job_positions` (`ID`, `Name`) VALUES +(1, 'Аспирант'), +(2, 'Ассистент'), +(3, 'Ведущий научный сотрудник'), +(4, 'Главный научный сотрудник'), +(5, 'Докторант'), +(6, 'Доцент'), +(7, 'Младший научный сотрудник'), +(8, 'Научный сотрудник'), +(9, 'Преподаватель'), +(10, 'Профессор'), +(11, 'Старший преподаватель'), +(12, 'Стажер'), +(13, 'Старший научный сотрудник'), +(14, 'Доцент'); + -- -- Дамп данных таблицы `accounts` -- @@ -50,6 +72,17 @@ INSERT INTO `accounts` (`ID`, `Login`, `Password`, `EMail`, `UserRoleID`, `Activ (23, 'teacher7', '7b21848ac9af35be0ddb2d6b9fc3851934db8420', 'teacher7@mail.ru', 2, NULL, 1, NULL), (24, 'teacher8', '7b21848ac9af35be0ddb2d6b9fc3851934db8420', 'teacher8@mail.ru', 2, NULL, 1, NULL); + +-- +-- Дамп данных таблицы `subjects` +-- + +INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES +(1, 'Математический анализ', 'Матан'), +(2, 'Дифференциальные уравнения', 'Диф. СѓСЂ-СЏ'), +(3, 'Рностранный язык', 'РРЅ.СЏР·.'), +(4, 'Операционные системы', 'РћРЎ'); + -- -- Дамп данных таблицы `faculties` -- @@ -58,6 +91,7 @@ INSERT INTO `faculties` (`ID`, `Name`, `Abbr`) VALUES (1, 'Рнститут математики, механики Рё компьютерных наук', 'Мехмат'), (2, 'Юридический факультет', 'Юрфак'); + -- -- Дамп данных таблицы `departments` -- @@ -66,29 +100,9 @@ INSERT INTO `departments` (`ID`, `Name`, `FacultyID`) VALUES (1, 'Кафедра математического анализа', 1), (2, 'Кафедра магического анализа', 1); --- --- Дамп данных таблицы `subjects` --- -INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Математический анализ', 'Матан'), -(2, 'Дифференциальные уравнения', 'Диф. СѓСЂ-СЏ'), -(3, 'Рностранный язык', 'РРЅ.СЏР·.'), -(4, 'Операционные системы', 'РћРЎ'); --- --- Дамп данных таблицы `teachers` --- -INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `JobPositionID`, `DepartmentID`, `AccountID`) VALUES -(1, 'teacher1', 'First', 'Second', 1, 1, 17), -(2, 'teacher2', 'First', 'Second', 2, 1, 18), -(3, 'teacher3', 'First', 'Second', 3, 2, 19), -(4, 'teacher4', 'First', 'Second', 3, 2, 20), -(5, 'teacher5', 'First', 'Second', 3, 2, 21), -(6, 'teacher6', 'First', 'Second', 13, 1, 22), -(7, 'teacher7', 'First', 'Second', 13, 1, 23), -(8, 'teacher8', 'First', 'Second', 8, 2, 24); -- -- Дамп данных таблицы `semesters` @@ -117,38 +131,6 @@ INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `Name (3, 1, 3, 2, NULL), (4, 2, 1, 1, NULL); --- --- Дамп данных таблицы `disciplines` --- - -INSERT INTO `disciplines` (`ID`, `Grade`, `SubjectID`, `AuthorID`, `ExamType`, `SemesterID`, `PracticeCount`, `LectionCount`, `DepartmentID`) VALUES -(1, 1, 4, 1, 'exam', 1, 20, 20, 1), -(2, 1, 3, 3, 'exam', 1, 20, 15, 2), -(3, 1, 3, 4, 'exam', 1, 20, 15, 2), -(4, 1, 3, 5, 'exam', 1, 20, 15, 2), -(5, 1, 1, 6, 'credit', 1, 15, 15, 1), -(6, 1, 2, 8, 'credit', 1, 10, 10, 2), -(7, 1, 2, 1, 'credit', 1, 10, 10, 1); - --- --- Дамп данных таблицы `disciplines_groups` --- - -INSERT INTO `disciplines_groups` (`ID`, `DisciplineID`, `StudyGroupID`) VALUES -(1, 1, 3), -(2, 2, 1), -(3, 2, 2), -(4, 2, 3), -(5, 3, 1), -(6, 3, 2), -(7, 3, 3), -(8, 4, 1), -(9, 4, 2), -(10, 4, 3), -(11, 5, 1), -(12, 5, 2), -(13, 6, 2); - -- -- Дамп данных таблицы `students` -- @@ -171,83 +153,39 @@ INSERT INTO `students` (`ID`, `StudyGroupID`, `AccountID`, `LastName`, `FirstNam (15, 3, 15, 'student5_c1g3', 'First', 'Second'), (16, 4, 16, 'student1_c2g1', 'First', 'Second'); + + + + -- --- Дамп данных таблицы `disciplines_students` +-- Дамп данных таблицы `teachers` -- -INSERT INTO `disciplines_students` (`ID`, `DisciplineID`, `StudentID`, `Type`) VALUES -(1, 5, 1, 'detach'), -(2, 5, 6, 'detach'), -(3, 6, 6, 'detach'), -(4, 6, 7, 'detach'), -(5, 1, 15, 'detach'), -(6, 2, 3, 'detach'), -(7, 2, 4, 'detach'), -(8, 2, 4, 'detach'), -(9, 2, 3, 'detach'), -(10, 2, 4, 'detach'), -(11, 2, 5, 'detach'), -(12, 2, 8, 'detach'), -(13, 2, 9, 'detach'), -(14, 2, 9, 'detach'), -(15, 2, 8, 'detach'), -(16, 2, 9, 'detach'), -(17, 2, 10, 'detach'), -(18, 2, 12, 'detach'), -(19, 2, 13, 'detach'), -(20, 2, 14, 'detach'), -(21, 2, 14, 'detach'), -(22, 2, 12, 'detach'), -(23, 2, 13, 'detach'), -(24, 2, 14, 'detach'), -(25, 2, 15, 'detach'), -(26, 3, 1, 'detach'), -(27, 3, 2, 'detach'), -(28, 3, 5, 'detach'), -(29, 3, 11, 'detach'), -(30, 3, 12, 'detach'), -(31, 3, 12, 'detach'), -(32, 3, 1, 'detach'), -(33, 3, 2, 'detach'), -(34, 3, 5, 'detach'), -(35, 3, 11, 'detach'), -(36, 3, 14, 'detach'), -(37, 3, 15, 'detach'), -(38, 3, 6, 'detach'), -(39, 3, 7, 'detach'), -(40, 3, 9, 'detach'), -(41, 3, 9, 'detach'), -(42, 3, 6, 'detach'), -(43, 3, 7, 'detach'), -(44, 3, 9, 'detach'), -(45, 3, 10, 'detach'), -(46, 4, 1, 'detach'), -(47, 4, 2, 'detach'), -(48, 4, 3, 'detach'), -(49, 4, 4, 'detach'), -(50, 4, 7, 'detach'), -(51, 4, 8, 'detach'), -(52, 4, 9, 'detach'), -(53, 4, 11, 'detach'), -(54, 4, 12, 'detach'), -(55, 4, 12, 'detach'), -(56, 4, 1, 'detach'), -(57, 4, 2, 'detach'), -(58, 4, 3, 'detach'), -(59, 4, 4, 'detach'), -(60, 4, 7, 'detach'), -(61, 4, 8, 'detach'), -(62, 4, 9, 'detach'), -(63, 4, 11, 'detach'), -(64, 4, 12, 'detach'), -(65, 4, 13, 'detach'), -(66, 1, 15, 'detach'), -(67, 6, 11, 'attach'), -(68, 1, 6, 'attach'), -(69, 1, 6, 'attach'), -(70, 6, 11, 'attach'), -(71, 1, 6, 'attach'), -(72, 1, 16, 'attach'); +INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `JobPositionID`, `DepartmentID`, `AccountID`) VALUES +(1, 'teacher1', 'First', 'Second', 1, 1, 17), +(2, 'teacher2', 'First', 'Second', 2, 1, 18), +(3, 'teacher3', 'First', 'Second', 3, 2, 19), +(4, 'teacher4', 'First', 'Second', 3, 2, 20), +(5, 'teacher5', 'First', 'Second', 3, 2, 21), +(6, 'teacher6', 'First', 'Second', 13, 1, 22), +(7, 'teacher7', 'First', 'Second', 13, 1, 23), +(8, 'teacher8', 'First', 'Second', 8, 2, 24); + + + +-- +-- Дамп данных таблицы `disciplines` +-- + +INSERT INTO `disciplines` (`ID`, `Grade`, `SubjectID`, `AuthorID`, `ExamType`, `SemesterID`, `PracticeCount`, `LectionCount`, `FacultyID`) VALUES +(1, 1, 4, 1, 'exam', 1, 20, 20, 1), +(2, 1, 3, 3, 'exam', 1, 20, 15, 1), +(3, 1, 3, 4, 'exam', 1, 20, 15, 1), +(4, 1, 3, 5, 'exam', 1, 20, 15, 1), +(5, 1, 1, 6, 'credit', 1, 15, 15, 1), +(6, 1, 2, 8, 'credit', 1, 10, 10, 1), +(7, 1, 2, 1, 'credit', 1, 10, 10, 1); + -- -- Дамп данных таблицы `disciplines_teachers` @@ -266,24 +204,26 @@ INSERT INTO `disciplines_teachers` (`ID`, `DisciplineID`, `TeacherID`) VALUES (10, 7, 1); -- --- Дамп данных таблицы `job_positions` +-- Дамп данных таблицы `disciplines_groups` -- -INSERT INTO `job_positions` (`ID`, `Name`) VALUES -(1, 'Аспирант'), -(2, 'Ассистент'), -(3, 'Ведущий научный сотрудник'), -(4, 'Главный научный сотрудник'), -(5, 'Докторант'), -(6, 'Доцент'), -(7, 'Младший научный сотрудник'), -(8, 'Научный сотрудник'), -(9, 'Преподаватель'), -(10, 'Профессор'), -(11, 'Старший преподаватель'), -(12, 'Стажер'), -(13, 'Старший научный сотрудник'), -(14, 'Доцент'); +INSERT INTO `disciplines_groups` (`ID`, `DisciplineID`, `StudyGroupID`) VALUES +(1, 1, 3), +(2, 2, 1), +(3, 2, 2), +(4, 2, 3), +(5, 3, 1), +(6, 3, 2), +(7, 3, 3), +(8, 4, 1), +(9, 4, 2), +(10, 4, 3), +(11, 5, 1), +(12, 5, 2), +(13, 6, 2); + + + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index 62630c5a5ccf1bc24d1cdd48b7fd44a25466dd24..e5601727861bb205fc26679a3ec77a1957b01f5a 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -296,7 +296,8 @@ BEGIN study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID - WHERE students.StudyGroupID = StudyGroupID; + WHERE students.StudyGroupID = StudyGroupID + ORDER BY students.LastName ASC, students.FirstName ASC, students.SecondName ASC; END // @@ -317,7 +318,8 @@ BEGIN FROM `students` INNER JOIN `study_groups` ON study_groups.ID = students.StudyGroupID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID - WHERE specializations.FacultyID = FacultyID; + WHERE specializations.FacultyID = FacultyID + ORDER BY students.LastName ASC, students.FirstName ASC, students.SecondName ASC; END // @@ -339,7 +341,8 @@ BEGIN FROM `teachers` INNER JOIN `departments` ON departments.ID = teachers.DepartmentID INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID - WHERE departments.FacultyID = FacultyID; + WHERE departments.FacultyID = FacultyID + ORDER BY teachers.LastName ASC, teachers.FirstName ASC, teachers.SecondName ASC; END // @@ -360,7 +363,8 @@ BEGIN FROM `teachers` INNER JOIN `departments` ON departments.ID = teachers.DepartmentID INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID - WHERE departments.ID = DepartmentID; + WHERE departments.ID = DepartmentID + ORDER BY teachers.LastName ASC, teachers.FirstName ASC, teachers.SecondName ASC; END // @@ -371,7 +375,8 @@ CREATE PROCEDURE `GetJobPositions` ( ) BEGIN SELECT job_positions.ID, job_positions.Name - FROM `job_positions`; + FROM `job_positions` + ORDER BY job_positions.Name; END // @@ -1001,6 +1006,24 @@ END // -- ------------------------------------------------------------------------------------------- +DROP FUNCTION IF EXISTS InternalCheckRate// +CREATE FUNCTION `InternalCheckRate`( `DiscID` INT + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + SELECT rating_table.ID + INTO checker + FROM `rating_table` + INNER JOIN `submodules` ON submodules.ID = rating_table.SubModuleID + INNER JOIN `modules` ON submodules.ModuleID = modules.ID AND + modules.DisciplineID = DiscID + LIMIT 1; + RETURN (checker IS NOT NULL AND checker > 0); + +END // + + DROP PROCEDURE IF EXISTS GetDisciplineInfoByID// CREATE PROCEDURE `GetDisciplineInfoByID`( IN `DiscID` INT ) NO SQL @@ -1015,12 +1038,15 @@ BEGIN subjects.ID AS 'SubjectID', subjects.Name AS 'SubjectName', subjects.Abbr AS 'SubjectAbbr', - departments.ID AS 'DepID', + faculties.ID AS 'DepID', departments.Name AS 'DepName', - departments.FacultyID AS 'FacultyID' + departments.FacultyID AS 'FacultyID', + InternalCheckRate(DiscID) AS 'isLocked' FROM `disciplines` INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID - INNER JOIN `departments` ON departments.ID = disciplines.DepartmentID + INNER JOIN `faculties` ON faculties.ID = disciplines.FacultyID + INNER JOIN `teachers` ON disciplines.AuthorID = teachers.ID + INNER JOIN `departments` ON departments.ID = teachers.DepartmentID WHERE disciplines.ID = DiscID; END // @@ -1036,11 +1062,11 @@ BEGIN teachers.SecondName AS 'TeacherSecond', job_positions.ID AS 'JobPositionID', job_positions.Name AS 'JobPositionName', - departments.ID AS 'DepartmentID', - departments.Name AS 'DepartmentName', + departments.ID AS 'DepID', + departments.Name AS 'DepName', faculties.ID AS 'FacultyID', faculties.Name AS 'FacultyName', - faculties.Abbr AS 'FacultyAbbreviation' + faculties.Abbr AS 'FacultyAbbr' FROM `disciplines_teachers` INNER JOIN `teachers` ON teachers.ID = disciplines_teachers.TeacherID INNER JOIN `departments` ON departments.ID = teachers.DepartmentID @@ -1462,7 +1488,8 @@ BEGIN SELECT disciplines_teachers.ID INTO checker FROM `disciplines` - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = BindingTeacher + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND + disciplines_teachers.TeacherID = BindingTeacher WHERE disciplines.ID = DisciplineID LIMIT 1; IF checker > 0 THEN @@ -1513,7 +1540,7 @@ CREATE FUNCTION `AddDiscipline` ( `TeacherID` INT, `ExamType` VARCHAR(30), `LectionCount` INT, `PracticeCount` INT, - `DepartmentID` INT + `FacultyID` INT ) RETURNS int(11) NO SQL BEGIN @@ -1524,10 +1551,10 @@ BEGIN RETURN -1; END IF; - SELECT departments.ID + SELECT faculties.ID INTO checker - FROM `departments` - WHERE departments.ID = DepartmentID + FROM `faculties` + WHERE faculties.ID = FacultyID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; @@ -1552,8 +1579,8 @@ BEGIN disciplines.LectionCount, disciplines.PracticeCount, disciplines.SemesterID, - disciplines.DepartmentID ) - VALUES ( TeacherID, Grade, SubjectID, ExamType, LectionCount, PracticeCount, semID, DepartmentID ); + disciplines.FacultyID ) + VALUES ( TeacherID, Grade, SubjectID, ExamType, LectionCount, PracticeCount, semID, FacultyID ); -- RETURN ( SELECT disciplines.ID -- FROM `disciplines` @@ -1571,6 +1598,8 @@ BEGIN disciplines_teachers.TeacherID ) VALUES ( checker, TeacherID ); + SET semID = AddModuleExam(TeacherID, checker); + RETURN checker; @@ -1638,7 +1667,8 @@ BEGIN SELECT disciplines_teachers.ID INTO checker FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID + WHERE disciplines_teachers.DisciplineID = DisciplineID AND + disciplines_teachers.TeacherID = TeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; @@ -1666,7 +1696,8 @@ BEGIN END IF; DELETE FROM `disciplines_students` - WHERE disciplines_students.ID IN + WHERE disciplines_students.DisciplineID = DisciplineID AND + disciplines_students.StudentID IN ( SELECT students.ID FROM `students` WHERE students.StudyGroupID = StudyGroupID @@ -1691,24 +1722,26 @@ CREATE FUNCTION `BindStudent` ( `TeacherID` INT, NO SQL BEGIN DECLARE checker, SG, temp INT; - - SELECT students.StudyGroupID - INTO SG - FROM `students` - WHERE students.ID = StudentID - LIMIT 1; - SELECT disciplines_teachers.ID INTO checker FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID + WHERE disciplines_teachers.DisciplineID = DisciplineID AND + disciplines_teachers.TeacherID = TeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; END IF; - - + + SELECT students.StudyGroupID + INTO SG + FROM `students` + WHERE students.ID = StudentID + LIMIT 1; + IF NOT (SG > 0) THEN + RETURN -1; + END IF; + SELECT disciplines_groups.ID INTO temp FROM `disciplines_groups` @@ -1747,7 +1780,8 @@ BEGIN SELECT disciplines_teachers.ID INTO checker FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID + WHERE disciplines_teachers.DisciplineID = DisciplineID AND + disciplines_teachers.TeacherID = TeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; @@ -1767,6 +1801,15 @@ BEGIN WHERE disciplines_groups.DisciplineID = DisciplineID AND disciplines_groups.StudyGroupID = StudyGroupID; + DELETE FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = DisciplineID AND + disciplines_students.Type = 'detach' AND + disciplines_students.StudentID IN + ( SELECT students.ID + FROM `students` + WHERE students.StudyGroupID = StudyGroupID + ); + RETURN 0; END // @@ -1787,7 +1830,9 @@ BEGIN FROM `students` WHERE students.ID = StudentID LIMIT 1; - + IF NOT (SG > 0) THEN + RETURN -1; + END IF; SELECT disciplines_teachers.ID INTO checker diff --git a/db/Structure.sql b/db/Structure.sql index 03ce1f70eb20eed4784d730dc11f6d334fc0311e..538f20b89910bbf406a0c529f9042be69bbc186b 100644 --- a/db/Structure.sql +++ b/db/Structure.sql @@ -81,12 +81,12 @@ CREATE TABLE IF NOT EXISTS `disciplines` ( `SemesterID` int(11) NOT NULL, `PracticeCount` int(11) NOT NULL DEFAULT '0', `LectionCount` int(11) NOT NULL DEFAULT '0', - `DepartmentID` int(11) NOT NULL, + `FacultyID` int(11) NOT NULL, PRIMARY KEY (`ID`), KEY `SubjectID` (`SubjectID`), KEY `TeacherID` (`AuthorID`), KEY `SemesterID` (`SemesterID`), - KEY `DepartmentID` (`DepartmentID`) + KEY `FacultyID` (`FacultyID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -386,17 +386,22 @@ INSERT INTO `user_roles` (`ID`, `Type`, `RoleName`, `Mark`) VALUES -- INSERT INTO `page_access` (`ID`, `Pagename`, `Bitmask`) VALUES -(NULL, 'common:index', 7), -(NULL, 'common:settings', 7), -(NULL, 'teacher:index', 6), -(NULL, 'teacher:settings', 6), -(NULL, 'teacher:map:create', 6), -(NULL, 'teacher:map:edit', 6), -(NULL, 'teacher:rating', 6), -(NULL, 'admin:common', 4), -(NULL, 'student:index', 1), -(NULL, 'student:settings', 1), -(NULL, 'student:subject', 1); +(1, 'common:index', 7), +(2, 'common:settings', 7), +(3, 'teacher:index', 6), +(4, 'teacher:settings', 6), +(5, 'teacher:map:create', 6), +(6, 'teacher:map:edit', 6), +(7, 'teacher:rating', 6), +(8, 'admin:common', 4), +(9, 'student:index', 1), +(10, 'student:settings', 1), +(11, 'student:subject', 1), +(12, 'teacher:map:discipline', 6), +(13, 'teacher:map:structure', 6), +(14, 'teacher:map:groups', 6), +(15, 'teacher:map:students', 6), +(16, 'teacher:map:teachers', 6); -- -- Ограничения внешнего ключа сохраненных таблиц @@ -421,7 +426,7 @@ ALTER TABLE `disciplines` ADD CONSTRAINT `disciplines_ibfk_2` FOREIGN KEY (`SubjectID`) REFERENCES `subjects` (`ID`), ADD CONSTRAINT `disciplines_ibfk_4` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`), ADD CONSTRAINT `disciplines_ibfk_5` FOREIGN KEY (`AuthorID`) REFERENCES `teachers` (`ID`), - ADD CONSTRAINT `disciplines_ibfk_6` FOREIGN KEY (`DepartmentID`) REFERENCES `departments` (`ID`); + ADD CONSTRAINT `disciplines_ibfk_6` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`); -- -- Ограничения внешнего ключа таблицы `disciplines_groups`