diff --git a/db/DatabaseSample.sql b/db/DatabaseSample.sql deleted file mode 100644 index b140de937b225eac028138571961ddb2a822c023..0000000000000000000000000000000000000000 --- a/db/DatabaseSample.sql +++ /dev/null @@ -1,750 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.0.10 --- http://www.phpmyadmin.net --- --- РҐРѕСЃС‚: 127.0.0.1:3306 --- Время создания: РђРІРі 13 2014 Рі., 00:42 --- Версия сервера: 5.5.37-log --- Версия PHP: 5.3.28 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; - --- --- База данных: `Sample` --- - --- -------------------------------------------------------- - --- --- Структура таблицы `accounts` --- - -CREATE TABLE IF NOT EXISTS `accounts` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Login` varchar(50) DEFAULT NULL, - `Password` varchar(64) DEFAULT NULL, - `E-Mail` varchar(255) DEFAULT NULL, - `Type` enum('student','teacher') NOT NULL, - `ActivationCode` varchar(40) DEFAULT NULL, - `isEnabled` tinyint(1) NOT NULL DEFAULT '1', - `UserAgent` text, - PRIMARY KEY (`ID`), - UNIQUE KEY `E-Mail` (`E-Mail`), - UNIQUE KEY `Login` (`Login`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; - --- --- Дамп данных таблицы `accounts` --- - -INSERT INTO `accounts` (`ID`, `Login`, `Password`, `E-Mail`, `Type`, `ActivationCode`, `isEnabled`, `UserAgent`) VALUES -(1, NULL, NULL, NULL, 'student', 'code1', 1, NULL), -(2, NULL, NULL, NULL, 'student', 'code2', 1, NULL), -(3, NULL, NULL, NULL, 'student', 'code3', 1, NULL), -(4, NULL, NULL, NULL, 'student', 'code4', 1, NULL), -(5, NULL, NULL, NULL, 'teacher', 'code5', 1, NULL), -(6, NULL, NULL, NULL, 'teacher', 'code6', 1, NULL), -(7, NULL, NULL, NULL, 'teacher', 'code7', 1, NULL), -(8, NULL, NULL, NULL, 'teacher', 'code8', 1, NULL), -(9, NULL, NULL, NULL, 'student', 'code9', 1, NULL), -(10, NULL, NULL, NULL, 'student', 'code10', 1, NULL); - - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups` --- - -CREATE TABLE IF NOT EXISTS `attending_groups` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) DEFAULT NULL, - `SemesterID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `SemesterID` (`SemesterID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; - --- --- Дамп данных таблицы `attending_groups` --- - -INSERT INTO `attending_groups` (`ID`, `Name`, `SemesterID`) VALUES -(1, 'Full', 2), -(2, 'Plus', 2), -(3, 'Minus', 2); - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups_bases` --- - -CREATE TABLE IF NOT EXISTS `attending_groups_bases` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `StudyGroupID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `StudyGroupID` (`StudyGroupID`), - KEY `AttendingGroupID` (`AttendingGroupID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; - --- --- Дамп данных таблицы `attending_groups_bases` --- - -INSERT INTO `attending_groups_bases` (`ID`, `AttendingGroupID`, `StudyGroupID`) VALUES -(1, 1, 1), -(2, 2, 2), -(3, 3, 1); - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups_pool` --- - -CREATE TABLE IF NOT EXISTS `attending_groups_pool` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `StudentID` int(11) NOT NULL, - `Type` enum('attach','detach') NOT NULL, - PRIMARY KEY (`ID`), - KEY `AttendingGroupID` (`AttendingGroupID`), - KEY `StudentID` (`StudentID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `attending_groups_pool` --- - -INSERT INTO `attending_groups_pool` (`ID`, `AttendingGroupID`, `StudentID`, `Type`) VALUES -(1, 2, 3, 'attach'), -(2, 3, 3, 'detach'); - --- -------------------------------------------------------- - --- --- Структура таблицы `classrooms` --- - -CREATE TABLE IF NOT EXISTS `classrooms` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) NOT NULL, - `Capacity` int(11) DEFAULT NULL, - `FacultyID` int(11) NOT NULL, - `Export` enum('true','false') NOT NULL DEFAULT 'false', - PRIMARY KEY (`ID`), - KEY `FacultyID` (`FacultyID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `classrooms` --- - -INSERT INTO `classrooms` (`ID`, `Name`, `Capacity`, `FacultyID`, `Export`) VALUES -(1, '202', NULL, 1, 'false'), -(2, '102', NULL, 1, 'false'); - --- -------------------------------------------------------- - --- --- Структура таблицы `classroom_sets` --- - -CREATE TABLE IF NOT EXISTS `classroom_sets` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) DEFAULT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `classroom_sets` --- - -INSERT INTO `classroom_sets` (`ID`, `Name`) VALUES -(1, '202'), -(2, '102'); - --- -------------------------------------------------------- - --- --- Структура таблицы `classroom_sets_pool` --- - -CREATE TABLE IF NOT EXISTS `classroom_sets_pool` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `ClassroomSetID` int(11) NOT NULL, - `ClassroomID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `ClassroomID` (`ClassroomID`), - KEY `ClassroomSetID` (`ClassroomSetID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `classroom_sets_pool` --- - -INSERT INTO `classroom_sets_pool` (`ID`, `ClassroomSetID`, `ClassroomID`) VALUES -(1, 1, 1), -(2, 2, 2); - --- -------------------------------------------------------- - --- --- Структура таблицы `disciplines` --- - -CREATE TABLE IF NOT EXISTS `disciplines` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Grade` int(11) NOT NULL, - `SubjectID` int(11) NOT NULL, - `AuthorID` int(11) NOT NULL, - `ExamType` enum('exam','credit') NOT NULL, - `SemesterID` int(11) NOT NULL, - `PracticeCount` int(11) NOT NULL DEFAULT '0', - `LectionCount` int(11) NOT NULL DEFAULT '0', - `Type` enum('general','special','choosen') NOT NULL DEFAULT 'general', - PRIMARY KEY (`ID`), - KEY `SubjectID` (`SubjectID`), - KEY `TeacherID` (`AuthorID`), - KEY `SemesterID` (`SemesterID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; - --- --- Дамп данных таблицы `disciplines` --- - -INSERT INTO `disciplines` (`ID`, `Grade`, `SubjectID`, `AuthorID`, `ExamType`, `SemesterID`, `PracticeCount`, `LectionCount`, `Type`) VALUES -(1, 1, 1, 3, 'exam', 2, 0, 0, 'general'), -(2, 1, 2, 3, 'credit', 2, 0, 0, 'general'), -(3, 2, 3, 5, 'exam', 2, 0, 0, 'general'), -(4, 1, 4, 3, 'credit', 2, 5, 4, 'general'), -(6, 1, 1, 3, 'exam', 2, 0, 0, 'general'); - --- -------------------------------------------------------- - --- --- Структура таблицы `disciplines_teachers` --- - -CREATE TABLE IF NOT EXISTS `disciplines_teachers` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `DisciplineID` int(11) NOT NULL, - `TeacherID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `DisciplineID` (`DisciplineID`), - KEY `AccountID` (`TeacherID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; - --- --- Дамп данных таблицы `disciplines_teachers` --- - -INSERT INTO `disciplines_teachers` (`ID`, `DisciplineID`, `TeacherID`) VALUES -(1, 1, 3), -(2, 1, 4), -(3, 2, 3), -(4, 3, 5), -(5, 4, 3); - --- -------------------------------------------------------- - --- --- Структура таблицы `faculties` --- - -CREATE TABLE IF NOT EXISTS `faculties` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(100) NOT NULL, - `Abbr` varchar(20) NOT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `faculties` --- - -INSERT INTO `faculties` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Математика Механика Рё РљРќ', 'МехМат'), -(2, 'Юридический факультет', 'ЮрФак'); - --- -------------------------------------------------------- - --- --- Структура таблицы `general_settings` --- - -CREATE TABLE IF NOT EXISTS `general_settings` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Val` int(11) DEFAULT NULL, - `ValS` varchar(300) DEFAULT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `general_settings` --- - -INSERT INTO `general_settings` (`ID`, `Val`, `ValS`) VALUES -(1, 2, NULL), -(2, NULL, NULL); - --- -------------------------------------------------------- - --- --- Структура таблицы `lessons` --- - -CREATE TABLE IF NOT EXISTS `lessons` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `DisciplineTeacherID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `DisciplineID` (`DisciplineTeacherID`), - KEY `AttendingGroupID` (`AttendingGroupID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; - --- --- Дамп данных таблицы `lessons` --- - -INSERT INTO `lessons` (`ID`, `AttendingGroupID`, `DisciplineTeacherID`) VALUES -(1, 1, 1), -(2, 1, 2), -(3, 1, 3), -(4, 2, 4); - --- -------------------------------------------------------- - --- --- Структура таблицы `logs` --- - -CREATE TABLE IF NOT EXISTS `logs` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `RatingTableID` int(11) NOT NULL, - `AccountID` int(11) NOT NULL, - `OldValue` int(11) NOT NULL, - `NewValue` int(11) NOT NULL, - `Date` datetime NOT NULL, - PRIMARY KEY (`ID`), - KEY `RatingTableID` (`RatingTableID`), - KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `logs` --- - -INSERT INTO `logs` (`ID`, `RatingTableID`, `AccountID`, `OldValue`, `NewValue`, `Date`) VALUES -(1, 3, 5, 6, 7, '2014-07-27 14:25:08'), -(2, 3, 5, 7, 8, '2014-07-27 20:58:49'); - --- -------------------------------------------------------- - --- --- Структура таблицы `modules` --- - -CREATE TABLE IF NOT EXISTS `modules` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) NOT NULL, - `OrderNum` int(11) NOT NULL, - `DisciplineID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - UNIQUE KEY `OrderNum` (`OrderNum`,`DisciplineID`), - KEY `DisciplineID` (`DisciplineID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; - --- --- Дамп данных таблицы `modules` --- - -INSERT INTO `modules` (`ID`, `Name`, `OrderNum`, `DisciplineID`) VALUES -(3, 'Теория пределов', 2, 1), -(4, 'Дифференцирование', 1, 1), -(5, 'Модуль1', 1, 2), -(6, 'Модуль1', 1, 3), -(7, 'Модуль1', 1, 4), -(8, 'NewModule', 666, 1), -(13, 'ывк', 5, 1), -(14, 'sdhr', 13, 1); - --- -------------------------------------------------------- - --- --- Структура таблицы `rating_table` --- - -CREATE TABLE IF NOT EXISTS `rating_table` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `StudentID` int(11) NOT NULL, - `TeacherID` int(11) NOT NULL, - `SubmoduleID` int(11) NOT NULL, - `Rate` int(11) NOT NULL, - `Date` date NOT NULL, - PRIMARY KEY (`ID`), - KEY `StudentID` (`StudentID`), - KEY `SubmoduleID` (`SubmoduleID`), - KEY `TeacherID` (`TeacherID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; - --- --- Дамп данных таблицы `rating_table` --- - -INSERT INTO `rating_table` (`ID`, `StudentID`, `TeacherID`, `SubmoduleID`, `Rate`, `Date`) VALUES -(1, 3, 3, 5, 4, '2014-07-02'), -(3, 3, 3, 6, 8, '2014-07-27'), -(4, 3, 3, 7, 4, '2014-07-27'); - --- -------------------------------------------------------- - --- --- Структура таблицы `requests` --- - -CREATE TABLE IF NOT EXISTS `requests` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AccountID` int(11) DEFAULT NULL, - `Information` text NOT NULL, - `Date` date NOT NULL, - `Status` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`ID`), - KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `schedule` --- - -CREATE TABLE IF NOT EXISTS `schedule` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `LessonID` int(11) NOT NULL, - `Day` int(11) NOT NULL, - `LessonTimeID` int(11) NOT NULL, - `ClassroomSetID` int(11) NOT NULL, - `SubgroupCount` int(11) NOT NULL, - `SubgroupNum` int(11) NOT NULL, - `WeekSplit` enum('full','up','down') NOT NULL DEFAULT 'full', - `LesType` int(11) NOT NULL, - `Notice` varchar(30) NOT NULL, - PRIMARY KEY (`ID`), - KEY `LessonID` (`LessonID`), - KEY `ClassroomSetID` (`ClassroomSetID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `semesters` --- - -CREATE TABLE IF NOT EXISTS `semesters` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Year` int(11) NOT NULL, - `Num` int(11) NOT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `semesters` --- - -INSERT INTO `semesters` (`ID`, `Year`, `Num`) VALUES -(2, 2014, 1); - --- -------------------------------------------------------- - --- --- Структура таблицы `specializations` --- - -CREATE TABLE IF NOT EXISTS `specializations` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) NOT NULL, - `Abbr` varchar(20) NOT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `specializations` --- - -INSERT INTO `specializations` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Прикладная математика Рё информатика', 'РџРњРёР'), -(2, 'Рнформационные технологии', 'РРў'); - --- -------------------------------------------------------- - --- --- Структура таблицы `students` --- - -CREATE TABLE IF NOT EXISTS `students` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `StudyGroupID` int(11) NOT NULL, - `AccountID` int(11) NOT NULL, - `LastName` varchar(30) NOT NULL, - `FirstName` varchar(30) NOT NULL, - `SecondName` varchar(30) DEFAULT NULL, - PRIMARY KEY (`ID`), - KEY `StudyGroupID` (`StudyGroupID`), - KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; - --- --- Дамп данных таблицы `students` --- - -INSERT INTO `students` (`ID`, `StudyGroupID`, `AccountID`, `LastName`, `FirstName`, `SecondName`) VALUES -(3, 1, 1, 'Сыроежкин', 'Сергей', 'Александрович'), -(4, 1, 2, 'Селезнева', 'Алиса', 'Сергеевна'), -(5, 2, 3, 'Камеррер', 'Максим', 'Владимирович'), -(6, 2, 4, 'Пен', 'Питер', NULL), -(7, 1, 9, 'Наина', 'Киевна', 'Горыныч'), -(9, 3, 10, 'Бэггинс', 'Бильбо', NULL); - --- -------------------------------------------------------- - --- --- Структура таблицы `study_groups` --- - -CREATE TABLE IF NOT EXISTS `study_groups` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Grade` int(11) NOT NULL, - `GroupNum` int(11) NOT NULL, - `SpecializationID` int(11) NOT NULL, - `FacultyID` int(11) NOT NULL, - `Name` varchar(50) DEFAULT NULL, - PRIMARY KEY (`ID`), - KEY `SpecializtionID` (`SpecializationID`), - KEY `FacultyID` (`FacultyID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; - --- --- Дамп данных таблицы `study_groups` --- - -INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `FacultyID`, `Name`) VALUES -(1, 1, 2, 1, 1, 'SomeGroupName'), -(2, 2, 7, 2, 1, NULL), -(3, 5, 5, 1, 1, 'New'); - --- -------------------------------------------------------- - --- --- Структура таблицы `subjects` --- - -CREATE TABLE IF NOT EXISTS `subjects` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) NOT NULL, - `Abbr` varchar(20) DEFAULT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; - --- --- Дамп данных таблицы `subjects` --- - -INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Математический анализ', 'Матан'), -(2, 'Конституционное право', 'РљРџ'), -(3, 'Операционные системы', 'РћРЎ'), -(4, 'Рстория', 'Рстория'); - --- -------------------------------------------------------- - --- --- Структура таблицы `submodules` --- - -CREATE TABLE IF NOT EXISTS `submodules` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `ModuleID` int(11) NOT NULL, - `MaxRate` int(11) NOT NULL, - `OrderNum` int(11) NOT NULL, - `Name` varchar(50) NOT NULL, - `Description` varchar(200) DEFAULT NULL, - `Type` enum('CurrentControl','LandmarkControl') NOT NULL DEFAULT 'CurrentControl', - PRIMARY KEY (`ID`), - UNIQUE KEY `ModuleID_2` (`ModuleID`,`OrderNum`), - KEY `ModuleID` (`ModuleID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; - --- --- Дамп данных таблицы `submodules` --- - -INSERT INTO `submodules` (`ID`, `ModuleID`, `MaxRate`, `OrderNum`, `Name`, `Description`, `Type`) VALUES -(5, 3, 12, 2, 'Контрольная работа', NULL, 'LandmarkControl'), -(6, 3, 20, 1, 'Коллоквиум', '', 'CurrentControl'), -(7, 4, 20, 1, 'РґР·', '', 'CurrentControl'), -(9, 6, 20, 1, 'РґР·', '', 'CurrentControl'), -(10, 6, 10, 2, 'Тест', '', 'CurrentControl'), -(11, 7, 20, 1, 'Коллоквиум', '', 'CurrentControl'), -(12, 7, 15, 2, 'Активность РЅР° занятиях', '', 'CurrentControl'); - --- -------------------------------------------------------- - --- --- Структура таблицы `teachers` --- - -CREATE TABLE IF NOT EXISTS `teachers` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `LastName` varchar(30) NOT NULL, - `FirstName` varchar(30) NOT NULL, - `SecondName` varchar(30) DEFAULT NULL, - `Degree` varchar(50) DEFAULT NULL, - `FacultyID` int(11) NOT NULL, - `AccountID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `FacultyID` (`FacultyID`), - KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; - --- --- Дамп данных таблицы `teachers` --- - -INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `Degree`, `FacultyID`, `AccountID`) VALUES -(3, 'Менделеев', 'Дмитрий', 'Рванович', NULL, 1, 5), -(4, 'Лермонтов', 'Михаил', 'Юрьевич', NULL, 1, 6), -(5, 'Крузенштерн', 'Рван', 'Федорович', NULL, 2, 7), -(6, 'Лобачевский', 'Николай', 'Рванович', NULL, 1, 8); - --- --- Ограничения внешнего ключа сохраненных таблиц --- - --- --- Ограничения внешнего ключа таблицы `attending_groups` --- -ALTER TABLE `attending_groups` - ADD CONSTRAINT `attending_groups_ibfk_1` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`); - --- --- Ограничения внешнего ключа таблицы `attending_groups_bases` --- -ALTER TABLE `attending_groups_bases` - ADD CONSTRAINT `attending_groups_bases_ibfk_1` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `attending_groups_bases_ibfk_2` FOREIGN KEY (`StudyGroupID`) REFERENCES `study_groups` (`ID`); - --- --- Ограничения внешнего ключа таблицы `attending_groups_pool` --- -ALTER TABLE `attending_groups_pool` - ADD CONSTRAINT `attending_groups_pool_ibfk_1` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `attending_groups_pool_ibfk_2` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`); - --- --- Ограничения внешнего ключа таблицы `classrooms` --- -ALTER TABLE `classrooms` - ADD CONSTRAINT `classrooms_ibfk_1` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`); - --- --- Ограничения внешнего ключа таблицы `classroom_sets_pool` --- -ALTER TABLE `classroom_sets_pool` - ADD CONSTRAINT `classroom_sets_pool_ibfk_1` FOREIGN KEY (`ClassroomID`) REFERENCES `classrooms` (`ID`), - ADD CONSTRAINT `classroom_sets_pool_ibfk_2` FOREIGN KEY (`ClassroomSetID`) REFERENCES `classroom_sets` (`ID`); - --- --- Ограничения внешнего ключа таблицы `disciplines` --- -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`); - --- --- Ограничения внешнего ключа таблицы `disciplines_teachers` --- -ALTER TABLE `disciplines_teachers` - ADD CONSTRAINT `disciplines_teachers_ibfk_1` FOREIGN KEY (`DisciplineID`) REFERENCES `disciplines` (`ID`), - ADD CONSTRAINT `disciplines_teachers_ibfk_2` FOREIGN KEY (`TeacherID`) REFERENCES `teachers` (`ID`); - --- --- Ограничения внешнего ключа таблицы `lessons` --- -ALTER TABLE `lessons` - ADD CONSTRAINT `lessons_ibfk_6` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `lessons_ibfk_7` FOREIGN KEY (`DisciplineTeacherID`) REFERENCES `disciplines_teachers` (`ID`); - --- --- Ограничения внешнего ключа таблицы `logs` --- -ALTER TABLE `logs` - ADD CONSTRAINT `logs_ibfk_1` FOREIGN KEY (`RatingTableID`) REFERENCES `rating_table` (`ID`), - ADD CONSTRAINT `logs_ibfk_2` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`); - --- --- Ограничения внешнего ключа таблицы `modules` --- -ALTER TABLE `modules` - ADD CONSTRAINT `modules_ibfk_2` FOREIGN KEY (`DisciplineID`) REFERENCES `disciplines` (`ID`); - --- --- Ограничения внешнего ключа таблицы `rating_table` --- -ALTER TABLE `rating_table` - ADD CONSTRAINT `rating_table_ibfk_1` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`), - ADD CONSTRAINT `rating_table_ibfk_3` FOREIGN KEY (`SubmoduleID`) REFERENCES `submodules` (`ID`), - ADD CONSTRAINT `rating_table_ibfk_4` FOREIGN KEY (`TeacherID`) REFERENCES `teachers` (`ID`); - --- --- Ограничения внешнего ключа таблицы `requests` --- -ALTER TABLE `requests` - ADD CONSTRAINT `requests_ibfk_1` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL; - --- --- Ограничения внешнего ключа таблицы `schedule` --- -ALTER TABLE `schedule` - ADD CONSTRAINT `schedule_ibfk_1` FOREIGN KEY (`LessonID`) REFERENCES `lessons` (`ID`), - ADD CONSTRAINT `schedule_ibfk_2` FOREIGN KEY (`ClassroomSetID`) REFERENCES `classroom_sets` (`ID`); - --- --- Ограничения внешнего ключа таблицы `students` --- -ALTER TABLE `students` - ADD CONSTRAINT `students_ibfk_1` FOREIGN KEY (`StudyGroupID`) REFERENCES `study_groups` (`ID`), - ADD CONSTRAINT `students_ibfk_2` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`); - --- --- Ограничения внешнего ключа таблицы `study_groups` --- -ALTER TABLE `study_groups` - ADD CONSTRAINT `study_groups_ibfk_2` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`), - ADD CONSTRAINT `study_groups_ibfk_4` FOREIGN KEY (`SpecializationID`) REFERENCES `specializations` (`ID`); - --- --- Ограничения внешнего ключа таблицы `submodules` --- -ALTER TABLE `submodules` - ADD CONSTRAINT `submodules_ibfk_1` FOREIGN KEY (`ModuleID`) REFERENCES `modules` (`ID`); - --- --- Ограничения внешнего ключа таблицы `teachers` --- -ALTER TABLE `teachers` - ADD CONSTRAINT `teachers_ibfk_1` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`), - ADD CONSTRAINT `teachers_ibfk_2` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`); - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/db/Sample.sql b/db/Sample.sql new file mode 100644 index 0000000000000000000000000000000000000000..ce67be10bc2ad618ee90e4e36a964755faa23f08 --- /dev/null +++ b/db/Sample.sql @@ -0,0 +1,133 @@ +-- phpMyAdmin SQL Dump +-- version 4.0.10 +-- http://www.phpmyadmin.net +-- +-- РҐРѕСЃС‚: 127.0.0.1:3306 +-- Время создания: РђРІРі 22 2014 Рі., 14:07 +-- Версия сервера: 5.5.37-log +-- Версия PHP: 5.3.28 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- База данных: `Sample2` +-- + +-- +-- Дамп данных таблицы `accounts` +-- + +INSERT INTO `accounts` (`ID`, `Login`, `Password`, `EMail`, `UserRoleID`, `ActivationCode`, `isEnabled`, `UserAgent`) VALUES +(6, 'Abbadon', 'ff6cfea689c242780b084583790e39f5eb03bb91', 'solidovic@gmail.com', 2, NULL, 1, NULL), +(7, NULL, NULL, NULL, 1, 'code2', 1, NULL); + +-- +-- Дамп данных таблицы `degrees` +-- + +INSERT INTO `degrees` (`ID`, `Name`) VALUES +(1, 'Аспирант'), +(2, 'Ассистент'), +(3, 'Ведущий научный сотрудник'), +(4, 'Главный научный сотрудник'), +(5, 'Докторант'), +(6, 'Доцент'), +(7, 'Младший научный сотрудник'), +(8, 'Научный сотрудник'), +(9, 'Преподаватель'), +(10, 'Профессор'), +(11, 'Старший преподаватель'), +(12, 'Стажер'), +(13, 'Старший научный сотрудник'), +(14, 'Доцент'); + +-- +-- Дамп данных таблицы `departments` +-- + +INSERT INTO `departments` (`ID`, `Name`, `FacultyID`) VALUES +(1, 'Кафедра математического анализа', 1), +(2, 'Кафедра магического анализа', 1); + +-- +-- Дамп данных таблицы `faculties` +-- + +INSERT INTO `faculties` (`ID`, `Name`, `Abbr`) VALUES +(1, 'Математика Механика Рё РљРќ', 'МехМат'), +(2, 'Юридический факультет', 'ЮрФак'); + +-- +-- Дамп данных таблицы `general_settings` +-- + +INSERT INTO `general_settings` (`ID`, `Val`, `ValS`) VALUES +(1, 1, NULL), +(2, NULL, 'hfkshfkjdshkjfsdj'); + +-- +-- Дамп данных таблицы `semesters` +-- + +INSERT INTO `semesters` (`ID`, `Year`, `Num`) VALUES +(1, 2014, 1); + +-- +-- Дамп данных таблицы `specializations` +-- + +INSERT INTO `specializations` (`ID`, `Name`, `Abbr`, `FacultyID`) VALUES +(1, 'Прикладная математика Рё информатика', 'РџРњРёР', 1), +(2, 'Рнформационные технологии', 'РРў', 1), +(3, 'Математика', 'Матем', 1), +(4, 'Механика', 'Механика', 1); + +-- +-- Дамп данных таблицы `students` +-- + +INSERT INTO `students` (`ID`, `StudyGroupID`, `AccountID`, `LastName`, `FirstName`, `SecondName`) VALUES +(1, 1, 7, 'Рванов', 'Рван', 'Рванович'); + +-- +-- Дамп данных таблицы `study_groups` +-- + +INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `Name`) VALUES +(1, 1, 1, 1, NULL); + +-- +-- Дамп данных таблицы `subjects` +-- + +INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES +(1, 'Математический анализ', 'Матан'), +(2, 'Конституционное право', 'РљРџ'), +(3, 'Операционные системы', 'РћРЎ'), +(4, 'Рстория', 'Рстория'); + +-- +-- Дамп данных таблицы `teachers` +-- + +INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `DegreeID`, `DepartmentID`, `AccountID`) VALUES +(1, 'Колобок', 'Фазиль', 'Евреивич', 9, 1, 6); + +-- +-- Дамп данных таблицы `user_roles` +-- + +INSERT INTO `user_roles` (`ID`, `Type`, `Role`, `Mark`) VALUES +(1, 'student', 'common', 0), +(2, 'teacher', 'common', 0); + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index ef6ac33e4af02f12a9487c25fc616c19a025a259..d116e3e9ca799187a1e124e5b3c5760fd010e131 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1,41 +1,104 @@ - +DELIMITER // +-- ------------------------------------------------------------------------------------------- -- ====== Common ======= -- +-- ------------------------------------------------------------------------------------------- -- Desc: Получает ID текущего семестра -- Note: uses by another functions -DROP FUNCTION IF EXISTS GetCurSemesterID;// -CREATE FUNCTION `GetCurSemesterID`( ) RETURNS int(11) +DROP FUNCTION IF EXISTS GetCurSemesterID// +CREATE FUNCTION `GetCurSemesterID` ( ) RETURNS int(11) + NO SQL +BEGIN + RETURN ( SELECT general_settings.Val + FROM `general_settings` + WHERE general_settings.ID = 1 + LIMIT 1 + ); +END // + + + + +DROP FUNCTION IF EXISTS SetCurSemesterID// +CREATE FUNCTION `SetCurSemesterID` ( `SemesterID` INT + ) RETURNS int(11) NO SQL BEGIN - RETURN (SELECT general_settings.Val FROM `general_settings` WHERE general_settings.ID = 1 ); + DECLARE checker INT; + + SELECT semesters.ID + INTO checker + FROM `semesters` + WHERE semesters.ID = SemesterID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + UPDATE `general_settings` + SET general_settings.Val = SemesterID + WHERE general_settings.ID = 1; + RETURN 0; END // + + + -- Desc: Получает ID семестра -- Note: uses by another functions -DROP FUNCTION IF EXISTS GetSemesterID;// -CREATE FUNCTION `GetSemesterID`( `Year` INT, `Num` INT ) RETURNS int(11) +DROP FUNCTION IF EXISTS GetSemesterID// +CREATE FUNCTION `GetSemesterID` ( `Year` INT, + `Num` INT + ) RETURNS int(11) NO SQL BEGIN - RETURN (SELECT semesters.ID FROM `semesters` WHERE semesters.Year = Year AND semesters.Num = Num ); + RETURN ( SELECT semesters.ID + FROM `semesters` + WHERE semesters.Year = Year AND + semesters.Num = Num + LIMIT 1 + ); END // + + -- Desc: Получает информацию Рѕ текущем семестре -DROP PROCEDURE IF EXISTS GetCurSemesterInfo;// -CREATE PROCEDURE `GetCurSemesterInfo`( ) +DROP PROCEDURE IF EXISTS GetCurSemesterInfo// +CREATE PROCEDURE `GetCurSemesterInfo` ( ) NO SQL BEGIN - SELECT semesters.ID, - semesters.Num, - semesters.Year + SELECT semesters.ID AS 'SemesterID', + semesters.Num As 'SemesterNum', + semesters.Year As 'SemesterYear' FROM `general_settings` - INNER JOIN `semesters` ON general_settings.Val = semesters.ID + INNER JOIN `semesters` ON general_settings.Val = semesters.ID WHERE general_settings.ID = 1; END // -DROP FUNCTION IF EXISTS SetHashKey;// -CREATE FUNCTION `SetHashKey`( `Value` VARCHAR(300) ) RETURNS int(11) + + + + +DROP PROCEDURE IF EXISTS GetSemesterInfo// +CREATE PROCEDURE `GetSemesterInfo` ( IN `SemesterID` INT + ) + NO SQL +BEGIN + SELECT semesters.Num As 'SemesterNum', + semesters.Year As 'SemesterYear' + FROM `semesters` + WHERE semesters.ID = SemesterID; +END // + + + + + +DROP FUNCTION IF EXISTS SetHashKey// +CREATE FUNCTION `SetHashKey` ( `Value` VARCHAR(300) + ) RETURNS int(11) NO SQL BEGIN UPDATE `general_settings` @@ -44,157 +107,339 @@ BEGIN RETURN 0; END // -DROP FUNCTION IF EXISTS GetHashKey;// -CREATE FUNCTION `GetHashKey`() RETURNS varchar(300) CHARSET utf8 + + + +DROP FUNCTION IF EXISTS GetHashKey// +CREATE FUNCTION `GetHashKey` ( ) RETURNS varchar(300) CHARSET utf8 NO SQL BEGIN - RETURN ( SELECT general_settings.ValS - FROM `general_settings` + RETURN ( SELECT general_settings.ValS + FROM `general_settings` WHERE general_settings.ID = 2 - ); + ); +END // + + + + +DROP FUNCTION IF EXISTS SetBitmaskByPagename// +CREATE FUNCTION `SetBitmaskByPagename` ( `Pagename` TEXT CHARSET utf8, + `Mask` INT + ) RETURNS int(11) + NO SQL +BEGIN + UPDATE `page_access` + SET page_access.Bitmask = Mask + WHERE page_access.Pagename = Pagename + LIMIT 1; + RETURN 0; +END // + + + + + +DROP FUNCTION IF EXISTS GetBitmaskByPagename// +CREATE FUNCTION `GetBitmaskByPagename` ( `Pagename` TEXT CHARSET utf8 + ) RETURNS int(11) + NO SQL +BEGIN + RETURN ( SELECT page_access.Bitmask + FROM `page_access` + WHERE page_access.Pagename = Pagename + ); END // -DROP PROCEDURE IF EXISTS GetSubjectList;// -CREATE PROCEDURE `GetSubjectList`( ) + + + + +-- ------------------------------------------------------------------------------------------- +-- ====== base getters====== +-- ------------------------------------------------------------------------------------------- + +DROP PROCEDURE IF EXISTS GetSubjects// +CREATE PROCEDURE `GetSubjects` ( ) NO SQL BEGIN - SELECT subjects.ID, - subjects.Name, - subjects.Abbr + SELECT subjects.ID AS 'SubjectID', + subjects.Name AS 'SubjectName', + subjects.Abbr AS 'SubjectAbbr' FROM `subjects` ORDER BY subjects.Name ASC; END // +DROP PROCEDURE IF EXISTS GetFaculties// +CREATE PROCEDURE `GetFaculties` ( ) + NO SQL +BEGIN + SELECT faculties.ID AS 'FacultyID', + faculties.Name AS 'FacultyName', + faculties.Abbr AS 'FacultyAbbr' + FROM `faculties`; +END // + + +DROP PROCEDURE IF EXISTS GetDepartments// +CREATE PROCEDURE `GetDepartments` ( ) + NO SQL +BEGIN + SELECT departments.ID AS 'DepID', + departments.Name AS 'DepName', + faculties.ID AS 'FacultyID', + faculties.Name AS 'FacultyName', + faculties.Abbr AS 'FacultyAbbr' + FROM `departments` + INNER JOIN `faculties` ON faculties.ID = departments.FacultyID; + +END // + + +DROP PROCEDURE IF EXISTS GetDepartmentsByFaculty// +CREATE PROCEDURE `GetDepartmentsByFaculty` ( IN `FacultyID` INT + ) + NO SQL +BEGIN + SELECT departments.ID AS 'DepID', + departments.Name AS 'DepName' + FROM `departments` + WHERE departments.FacultyID = FacultyID; +END // + + + +DROP PROCEDURE IF EXISTS GetSpecializations// +CREATE PROCEDURE `GetSpecializations` ( IN `FacultyID` INT + ) + NO SQL +BEGIN + SELECT specializations.ID AS 'SpecID', + specializations.Name AS 'SpecName', + specializations.Abbr AS 'SpecAbbr', + specializations.FacultyID AS 'FacultyID' + FROM `specializations` + WHERE specializations.FacultyID = FacultyID + ORDER BY subjects.Name ASC; +END // + + -DROP PROCEDURE IF EXISTS GetStudyGroups;// -CREATE PROCEDURE `GetStudyGroups`( IN `Grade` INT, - IN `FacultyID` INT ) +DROP PROCEDURE IF EXISTS GetStudyGroups// +CREATE PROCEDURE `GetStudyGroups` ( IN `Grade` INT, + IN `FacultyID` INT + ) NO SQL BEGIN - SELECT study_groups.ID, - study_groups.GroupNum, - specializations.ID AS 'SpecID', - specializations.Name AS 'SpecName', - specializations.Abbr AS 'SpecAbbr' + SELECT study_groups.ID AS 'GroupID', + study_groups.GroupNum AS 'GroupNum', + specializations.ID AS 'SpecID', + specializations.Name AS 'SpecName', + specializations.Abbr AS 'SpecAbbr', + specializations.FacultyID AS 'FacultyID' FROM `study_groups` INNER JOIN `specializations` ON specializations.ID = study_groups.SpecializationID - WHERE study_groups.Grade = Grade AND study_groups.FacultyID = FacultyID; - + WHERE study_groups.Grade = Grade AND + specializations.FacultyID = FacultyID; END // -DROP PROCEDURE IF EXISTS GetStudentsByStudyGroups;// -CREATE PROCEDURE `GetStudentsByStudyGroups`( IN `StudyGroupID` INT ) +DROP PROCEDURE IF EXISTS GetStudentsByStudyGroups// +CREATE PROCEDURE `GetStudentsByStudyGroups` ( IN `StudyGroupID` INT + ) NO SQL BEGIN SELECT students.ID AS 'StudentID', - students.LastName, - students.FirstName, - students.SecondName + students.LastName AS 'StudentLast', + students.FirstName AS 'StudentFirst', + students.SecondName AS 'StudentSecond' FROM `students` WHERE students.StudyGroupID = StudyGroupID; END // +DROP PROCEDURE IF EXISTS GetStudentsByFaculty// +CREATE PROCEDURE `GetStudentsByFaculty` ( IN `FacultyID` INT + ) + NO SQL +BEGIN + SELECT students.ID AS 'StudentID', + students.LastName AS 'StudentLast', + students.FirstName AS 'StudentFirst', + students.SecondName AS 'StudentSecond' + 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; + +END // + + + +DROP PROCEDURE IF EXISTS GetTeachersByFaculty// +CREATE PROCEDURE `GetTeachersByFaculty` ( IN `FacultyID` INT + ) + NO SQL +BEGIN + SELECT teachers.ID AS 'TeacherID', + teachers.LastName AS 'TeacherLast', + teachers.FirstName AS 'TeacherFirst', + teachers.SecondName AS 'TeacherSecond', + degrees.Name AS 'DegreeName', + departments.ID AS 'DepID', + departments.Name AS 'DepName' + FROM `teachers` + INNER JOIN `departments` ON departments.ID = teachers.DepartmentID + INNER JOIN `degrees` ON degrees.ID = teachers.DegreeID + WHERE departments.FacultyID = FacultyID; + +END // + + +DROP PROCEDURE IF EXISTS GetTeachersByDepartment// +CREATE PROCEDURE `GetTeachersByDepartment` ( IN `FacultyID` INT + ) + NO SQL +BEGIN + SELECT teachers.ID AS 'TeacherID', + teachers.LastName AS 'TeacherLast', + teachers.FirstName AS 'TeacherFirst', + teachers.SecondName AS 'TeacherSecond', + degrees.Name AS 'DegreeName', + departments.ID AS 'DepartmentID', + departments.Name AS 'DepartmentName' + FROM `teachers` + INNER JOIN `departments` ON departments.ID = teachers.DepartmentID + INNER JOIN `degrees` ON degrees.ID = teachers.DegreeID + WHERE departments.FacultyID = FacultyID; + +END // + + + + --- ====== Работа СЃ аккаунтами ====== + + +-- ------------------------------------------------------------------------------------------- +-- ====== Работа СЃ аккаунтами ====== +-- ------------------------------------------------------------------------------------------- + -- Desc: Количество аккаунтов СЃ данным РєРѕРґРѕРј активации -- Note: uses by another functions -DROP FUNCTION IF EXISTS GetAccNumByCode;// -CREATE FUNCTION `GetAccNumByCode`( `Code` VARCHAR(40) CHARSET utf8 ) RETURNS int(11) +DROP FUNCTION IF EXISTS GetAccCountByCode// +CREATE FUNCTION `GetAccCountByCode` ( `Code` VARCHAR(40) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - RETURN (SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.ActivationCode = Code ); + RETURN ( SELECT COUNT(accounts.ID) + FROM `accounts` + WHERE accounts.ActivationCode = Code + ); END // -- Desc: Количество аккаунтов СЃ данным логином -DROP FUNCTION IF EXISTS GetAccNumByLogin; // -CREATE FUNCTION `GetAccNumByLogin`(`Login` VARCHAR(50) CHARSET utf8) RETURNS int(11) +DROP FUNCTION IF EXISTS GetAccCountByMail // +CREATE FUNCTION `GetAccCountByMail` ( `Mail` VARCHAR(50) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - RETURN ( SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.Login = Login ); + RETURN ( SELECT COUNT(accounts.ID) + FROM `accounts` + WHERE accounts.EMail = Mail + ); END // --- Desc: Количество аккаунтов СЃ данным e-mail -DROP FUNCTION IF EXISTS GetAccNumByMail; // -CREATE FUNCTION `GetAccNumByMail`(`Mail` VARCHAR(255) CHARSET utf8) RETURNS int(11) +-- Desc: Количество аккаунтов СЃ данным логином +DROP FUNCTION IF EXISTS GetAccCountByLogin// +CREATE FUNCTION `GetAccCountByLogin` ( `Login` VARCHAR(50) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - RETURN ( SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.`E-Mail` = Mail ); + RETURN ( SELECT COUNT(accounts.ID) + FROM `accounts` + WHERE accounts.Login = Login + ); END // -DROP PROCEDURE IF EXISTS GetAccInfoByID; // -CREATE PROCEDURE `GetAccInfoByID`(IN `UserID` VARCHAR(50) CHARSET utf8 ) +DROP PROCEDURE IF EXISTS GetAccInfoByID// +CREATE PROCEDURE `GetAccInfoByID` ( IN `UserID` VARCHAR(50) CHARSET utf8 + ) NO SQL BEGIN - SELECT accounts.ID, - accounts.`Login`, - accounts.`E-Mail`, - accounts.Type, + SELECT accounts.ID AS 'AccID', + accounts.Login AS 'AccLogin', + accounts.EMail AS 'AccEMail', + user_roles.Type AS 'AccType', + user_roles.Role AS 'AccRole', accounts.isEnabled, ( accounts.ActivationCode IS NULL) AS 'isActivated', - accounts.UserAgent - FROM accounts - WHERE accounts.`ID` = UserID; + accounts.UserAgent + FROM `accounts` + INNER JOIN `user_roles` ON accounts.UserRoleID = user_roles.ID + WHERE accounts.ID = UserID; END // - - - - -- Desc: - UserID => FirstName, SecondName, LastName, StudyGroup (РІСЃСЏ информация, РІ С‚.С‡. Рё специализация (РџРњ, РРў, etc.)) (РІ зав. РѕС‚ AccountType) -- Note: 1) если аккаунт существует, то всегда можно получить UserID, AccountType, LastName, FirstName -- иначе UserID = NULL (как Рё РІСЃРµ остальные) -- 2) Degree Сѓ преподавателя Рё LastName РјРѕРіСѓС‚ быть NULL -DROP PROCEDURE IF EXISTS GetPersonalInfoByID; // -CREATE PROCEDURE `GetPersonalInfoByID`(IN `UserID` INT ) +DROP PROCEDURE IF EXISTS GetPersonalInfoByID// +CREATE PROCEDURE `GetPersonalInfoByID` ( IN `UserID` INT + ) NO SQL BEGIN - DECLARE varType INT; - SELECT accounts.Type FROM accounts WHERE accounts.ID = UserID LIMIT 1 INTO varType; - IF varType = 1 THEN + DECLARE accType INT; + SELECT accounts.Type + INTO accType + FROM accounts + WHERE accounts.ID = UserID + LIMIT 1; + + + IF accType = 1 THEN SELECT students.ID AS 'StudentID', - students.LastName, - students.FirstName, - students.SecondName, - study_groups.ID AS 'StudyGroupID', - study_groups.Grade AS 'Grade', - study_groups.GroupNum AS 'Group', - study_groups.Name AS 'StudyGroupName', + students.LastName AS 'StudentLast', + students.FirstName AS 'StudentFirst', + students.SecondName AS 'StudentSecond', + study_groups.ID AS 'GroupID', + study_groups.Grade AS 'StudentGrade', + study_groups.GroupNum AS 'GroupNum', + study_groups.Name AS 'GroupName', specializations.ID AS 'SpecID', specializations.Name AS 'SpecName', specializations.Abbr AS 'SpecAbbr', faculties.ID AS 'FacultyID', faculties.Name AS 'FacultyName', - faculties.Abbr AS 'FacultyAbbreviation' + faculties.Abbr AS 'FacultyAbbr' FROM `students` - INNER JOIN study_groups ON students.StudyGroupID = study_groups.ID - INNER JOIN faculties ON study_groups.FacultyID = faculties.ID - INNER JOIN specializations ON study_groups.SpecializationID = specializations.ID + INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID + INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID + INNER JOIN `faculties` ON specializations.FacultyID = faculties.ID WHERE students.AccountID = UserID; ELSE SELECT teachers.ID AS 'TeacherID', - teachers.LastName, - teachers.FirstName, - teachers.SecondName, - degrees.Name AS 'Degree', - departments.ID AS 'DepartmentID', - departments.Name AS 'DepartmentName', + teachers.LastName AS 'TeacherLast', + teachers.FirstName AS 'TeacherFirst', + teachers.SecondName AS 'TeacherSecond', + degrees.Name AS 'DegreeName', + 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 `teachers` INNER JOIN `departments` ON departments.ID = teachers.DepartmentID INNER JOIN `faculties` ON departments.FacultyID = faculties.ID @@ -207,66 +452,83 @@ END // -- Desc: Активация аккаунта (внесение данных изменений РІ поля Login, E-Mail, Password + обнуление activation_code Рё снятие флага isActivated). РљСЂРѕРјРµ того, также установка AccountType РІ зависимости РѕС‚ связанной СЃ РЅРёРј информации. -DROP FUNCTION IF EXISTS ActivateAccount; // -CREATE FUNCTION `ActivateAccount`(`Code` VARCHAR(40) CHARSET utf8, `Login` VARCHAR(50) CHARSET utf8, `Mail` VARCHAR(32) CHARSET utf8, `Password` VARCHAR(255) CHARSET utf8) RETURNS int(11) +DROP FUNCTION IF EXISTS ActivateAccount// +CREATE FUNCTION `ActivateAccount` ( `Code` VARCHAR(40) CHARSET utf8, + `Login` VARCHAR(50) CHARSET utf8, + `Mail` VARCHAR(32) CHARSET utf8, + `Password` VARCHAR(255) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE checker INT; - DECLARE UserID INT; - SELECT COUNT(accounts.ID) INTO checker FROM accounts WHERE accounts.ActivationCode = Code; - IF ( Password IS NULL ) THEN + DECLARE checker, UserID INT; + + SELECT COUNT(accounts.ID) + INTO checker + FROM accounts + WHERE accounts.ActivationCode = Code; + IF checker != 1 THEN + RETURN -1; + END IF; + + IF Password IS NULL THEN return -2; END IF; - IF checker = 1 THEN - SELECT accounts.ID - INTO UserID - FROM `accounts` - WHERE accounts.ActivationCode = Code; - - UPDATE `accounts` - SET accounts.Login = Login , - accounts.Password = Password , - accounts.`E-Mail` = Mail , - accounts.ActivationCode = NULL - WHERE accounts.ID = UserID ; - - RETURN UserID; - ELSE - RETURN -1; - END IF; + SELECT accounts.ID + INTO UserID + FROM `accounts` + WHERE accounts.ActivationCode = Code; + + UPDATE `accounts` + SET accounts.Login = Login , + accounts.Password = Password , + accounts.EMail = Mail , + accounts.ActivationCode = NULL + WHERE accounts.ID = UserID ; + + RETURN UserID; + END // -- Desc: - Рзменение пароля для данной учетной записи -DROP FUNCTION IF EXISTS ChangePassword; // -CREATE FUNCTION `ChangePassword`(`UserID` INT, `Password` VARCHAR(255) CHARSET utf8) RETURNS int(11) +DROP FUNCTION IF EXISTS ChangePassword// +CREATE FUNCTION `ChangePassword` ( `UserID` INT, + `Password` VARCHAR(255) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; - SET checker = ( SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.ID = UserID ); - - IF checker = 1 THEN - UPDATE accounts - SET accounts.Password = Password - WHERE ID = UserID; - - RETURN 0; - ELSE - RETURN -1; - END IF; + + SELECT COUNT(accounts.ID) + INTO checker + FROM `accounts` + WHERE accounts.ID = UserID; + IF checker != 1 THEN + RETURN -1; + END IF; + + UPDATE `accounts` + SET accounts.Password = Password + WHERE accounts.ID = UserID; + END // -- Desc: - Рзменение логина для данной учетной записи -DROP FUNCTION IF EXISTS ChangeLogin; // -CREATE FUNCTION `ChangeLogin`(`UserID` INT, `Login` VARCHAR(50) CHARSET utf8) RETURNS int(11) +DROP FUNCTION IF EXISTS ChangeLogin// +CREATE FUNCTION `ChangeLogin` ( `UserID` INT, + `Login` VARCHAR(50) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; - SET checker = ( SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.ID = UserID ); + SELECT COUNT(accounts.ID) + INTO checker + FROM `accounts` + WHERE accounts.ID = UserID; IF checker != 1 THEN RETURN -1; END IF; @@ -274,28 +536,34 @@ BEGIN SET checker = -1; SELECT accounts.ID INTO checker - FROM accounts + FROM `accounts` WHERE accounts.Login = Login LIMIT 1; IF checker > 0 THEN RETURN -1; END IF; - UPDATE accounts + UPDATE `accounts` SET accounts.Login = Login - WHERE ID = UserID; + WHERE accounts.ID = UserID; RETURN 0; END // -- Desc: - Рзменение e-mail для данной учетной записи -DROP FUNCTION IF EXISTS ChangeMail; // -CREATE FUNCTION `ChangeMail`(`UserID` INT, `mailN` VARCHAR(32) CHARSET utf8) RETURNS int(11) +DROP FUNCTION IF EXISTS ChangeMail// +CREATE FUNCTION `ChangeMail` ( `UserID` INT, + `EMail` VARCHAR(32) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; - SET checker = ( SELECT COUNT(accounts.ID) FROM accounts WHERE accounts.ID = UserID ); + + SELECT COUNT(accounts.ID) + INTO checker + FROM `accounts` + WHERE accounts.ID = UserID; IF checker != 1 THEN RETURN -1; END IF; @@ -304,7 +572,7 @@ BEGIN SELECT accounts.ID INTO checker FROM accounts - WHERE accounts.`E-Mail` = mailN + WHERE accounts.EMail = EMail LIMIT 1; IF checker > 0 THEN RETURN -1; @@ -312,7 +580,7 @@ BEGIN UPDATE accounts - SET accounts.`E-Mail` = mailN + SET accounts.EMail = EMail WHERE ID = UserID; RETURN 0; @@ -321,12 +589,49 @@ END // +DROP FUNCTION IF EXISTS SignIn// +CREATE FUNCTION `SignIn`( `Login` VARCHAR(255) CHARSET utf8, + `Password` VARCHAR(64) CHARSET utf8 + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE curID INT; + SELECT accounts.ID + INTO curID + FROM `accounts` + WHERE accounts.Password = Password AND + ( accounts.Login = Login OR + accounts.EMail = Login ) + + LIMIT 1; + + IF curID > 0 THEN + RETURN curID; + ELSE + RETURN -1; + END IF; + +END // + + + + + + + + + + + +-- ------------------------------------------------------------------------------------------- +-- ====== Common fillers ========= +-- ------------------------------------------------------------------------------------------- -- Desc: Добавление РЅРѕРІРѕРіРѕ студента -DROP FUNCTION IF EXISTS CreateStudent; // +DROP FUNCTION IF EXISTS CreateStudent// CREATE FUNCTION `CreateStudent`( `Last` VARCHAR(30) CHARSET utf8, `First` VARCHAR(30) CHARSET utf8, `Second` VARCHAR(30) CHARSET utf8, @@ -334,151 +639,162 @@ CREATE FUNCTION `CreateStudent`( `Last` VARCHAR(30) CHARSET utf8, `GroupN` INT, `FacultyID` INT, `Code` VARCHAR(40) CHARSET utf8 - ) RETURNS int(11) + ) RETURNS int(11) NO SQL BEGIN - DECLARE curID, StudyGroupID INT; - SET StudyGroupID = -1; + DECLARE curID, StudyGroupID, RoleID INT; + SELECT user_roles.ID + INTO RoleID + FROM `user_roles` + WHERE user_roles.Type = 'student' AND + user_roles.Role = 'common' + LIMIT 1; + IF NOT (RoleID > 0) THEN + RETURN -1; + END IF; + SELECT study_groups.ID INTO StudyGroupID FROM `study_groups` - WHERE (study_groups.Grade = Grade ) AND - ( study_groups.GroupNum = GroupN ) AND - ( study_groups.FacultyID = FacultyID ) + WHERE study_groups.Grade = Grade AND + study_groups.GroupNum = GroupN AND + study_groups.FacultyID = FacultyID LIMIT 1; + IF NOT (StudyGroupID > 0) THEN + RETURN -1; + END IF; - IF ( (StudyGroupID > -1) AND ( Code IS NOT NULL ) ) THEN - INSERT INTO `accounts` ( accounts.Login , accounts.Password , accounts.`E-Mail`, accounts.Type, accounts.ActivationCode ) - VALUES ( NULL, NULL, NULL, 'student', Code); + INSERT INTO `accounts` ( accounts.Login , accounts.Password , accounts.EMail, accounts.UserRoleID, accounts.ActivationCode ) + VALUES ( NULL, NULL, NULL, RoleID, Code); - SELECT accounts.ID - INTO curID - FROM `accounts` - WHERE accounts.ActivationCode = Code; - - INSERT INTO `students` (students.StudyGroupID, students.AccountID, students.LastName, students.FirstName, students.SecondName) - VALUES (StudyGroupID, curID, Last, First, Second); - - RETURN 0; - + SELECT accounts.ID + INTO curID + FROM `accounts` + WHERE accounts.ActivationCode = Code; + + INSERT INTO `students` (students.StudyGroupID, students.AccountID, students.LastName, students.FirstName, students.SecondName) + VALUES (StudyGroupID, curID, Last, First, Second); + RETURN 0; - END IF; - RETURN -1; END // -DROP FUNCTION IF EXISTS CreateTeacher; // -CREATE FUNCTION `CreateTeacher`( `Last` VARCHAR(30) CHARSET utf8, - `First` VARCHAR(30) CHARSET utf8, - `Second` VARCHAR(30) CHARSET utf8, +DROP FUNCTION IF EXISTS CreateTeacher// +CREATE FUNCTION `CreateTeacher`( `Last` VARCHAR(30) CHARSET utf8, + `First` VARCHAR(30) CHARSET utf8, + `Second` VARCHAR(30) CHARSET utf8, `DegreeID` INT, `DepartmentID` INT, - `Code` VARCHAR(40) CHARSET utf8 - ) RETURNS int(11) + `Code` VARCHAR(40) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE curID, StudyGroupID, checker INT; + DECLARE curID, checker, RoleID INT; + + SELECT user_roles.ID + INTO RoleID + FROM `user_roles` + WHERE user_roles.Type = 'teachers' AND + user_roles.Role = 'common' + LIMIT 1; + IF NOT (RoleID > 0) THEN + RETURN -1; + END IF; SELECT departments.ID INTO checker FROM `departments` WHERE departments.ID = DepartmentID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; + SET checker = -1; SELECT degrees.ID INTO checker FROM `degrees` WHERE degrees.ID = DegreeID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - IF Code IS NOT NULL THEN + IF Code IS NULL THEN + RETURN -1; + END IF; - INSERT INTO `accounts` ( accounts.Login , accounts.Password , accounts.`E-Mail`, accounts.Type, accounts.ActivationCode ) - VALUES ( NULL, NULL, NULL, 'teacher', Code); - - SELECT accounts.ID INTO curID - FROM `accounts` - WHERE accounts.ActivationCode = Code; - - INSERT INTO `teachers` ( teachers.AccountID, - teachers.LastName, - teachers.FirstName, - teachers.SecondName, - teachers.DegreeID, - teachers.DepartmentID) - VALUES (curID, Last, First, Second, DegreeID, DepartmentID); - RETURN 0; + INSERT INTO `accounts` ( accounts.Login , accounts.Password , accounts.EMail, accounts.UserRoleID, accounts.ActivationCode ) + VALUES ( NULL, NULL, NULL, RoleID, Code); + + SELECT accounts.ID INTO curID + FROM `accounts` + WHERE accounts.ActivationCode = Code; + + INSERT INTO `teachers` ( teachers.AccountID, + teachers.LastName, + teachers.FirstName, + teachers.SecondName, + teachers.DegreeID, + teachers.DepartmentID) + VALUES (curID, Last, First, Second, DegreeID, DepartmentID); + + RETURN 0; - END IF; - RETURN -1; END // -DROP FUNCTION IF EXISTS SignIn; // -CREATE FUNCTION `SignIn`( `Login` VARCHAR(255) CHARSET utf8, - `Password` VARCHAR(64) CHARSET utf8 - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE curID INT; - SELECT accounts.ID - INTO curID - FROM `accounts` - WHERE (accounts.Login = Login OR accounts.`E-Mail` = Login) AND - accounts.Password = Password - LIMIT 1; - IF curID > 0 THEN - RETURN curID; - ELSE - RETURN -1; - END IF; -END // --- ======Студенты========= -DROP FUNCTION IF EXISTS GetRateForDisc; // -CREATE FUNCTION `GetRateForDisc`(`StudentID` INT, `DisciplineID` INT) RETURNS int(11) + + + +-- ------------------------------------------------------------------------------------------- +-- ======Студенты========= +-- ------------------------------------------------------------------------------------------- + + +DROP FUNCTION IF EXISTS GetRateForDisc// +CREATE FUNCTION `GetRateForDisc` ( `StudentID` INT, + `DisciplineID` INT + ) RETURNS int(11) NO SQL BEGIN RETURN ( SELECT SUM(rating_table.Rate) - FROM `modules` - CROSS JOIN `submodules` ON submodules.ModuleID = modules.ID - CROSS JOIN `rating_table` ON rating_table.StudentID = StudentID AND - rating_table.SubmoduleID = submodules.ID - WHERE modules.DisciplineID = DisciplineID + FROM `rating_table` + INNER JOIN `submodules` ON rating_table.SubmoduleID = submodules.ID + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + WHERE rating_table.StudentID = StudentID AND + modules.DisciplineID = DisciplineID ); END // -DROP FUNCTION IF EXISTS GetMaxRateForDisc; // -CREATE FUNCTION `GetMaxRateForDisc`(`StudentID` INT, `DisciplineID` INT) RETURNS int(11) +DROP FUNCTION IF EXISTS GetMaxRateForDisc// +CREATE FUNCTION `GetMaxRateForDisc` ( `StudentID` INT, + `DisciplineID` INT + ) RETURNS int(11) NO SQL BEGIN - RETURN ( SELECT SUM(submodules.MaxRate) - FROM `modules` - CROSS JOIN `submodules` ON submodules.ModuleID = modules.ID - CROSS JOIN `rating_table` ON rating_table.StudentID = StudentID AND - rating_table.SubmoduleID = submodules.ID - WHERE modules.DisciplineID = DisciplineID + RETURN ( SELECT SUM(rating_table.MaxRate) + FROM `rating_table` + INNER JOIN `submodules` ON rating_table.SubmoduleID = submodules.ID + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + WHERE rating_table.StudentID = StudentID AND + modules.DisciplineID = DisciplineID ); END // @@ -486,7 +802,7 @@ END // -- Desc: Р’СЃРµ РєСѓСЂСЃС‹, РЅР° которые подписан данный студент + преподаватель РєСѓСЂСЃР° + тип контроля (экзамен/зачет) + баллы + максимальное количество баллов РЅР° данный момент (IN: StudentID). -DROP PROCEDURE IF EXISTS GetDisciplinesForStudent; // +DROP PROCEDURE IF EXISTS GetDisciplinesForStudent// CREATE PROCEDURE `GetDisciplinesForStudent`(IN `StudentID` INT) NO SQL BEGIN @@ -494,49 +810,49 @@ BEGIN SELECT students.StudyGroupID INTO groupID FROM `students` WHERE students.ID = StudentID LIMIT 1; SET semID = GetCurSemesterID(); - SELECT DISTINCT disciplines.ID AS 'DisciplineID', - subjects.ID AS 'SubjectID', - subjects.Name AS 'SubjectName', + SELECT DISTINCT disciplines.ID AS 'DisciplineID', + subjects.ID AS 'SubjectID', + subjects.Name AS 'SubjectName', disciplines.ExamType, + teachers.LastName AS 'TeacherLast', + teachers.FirstName AS 'TeacherFirst', + teachers.SecondName AS 'TeacherSecond', GetRateForDisc(StudentID, `disciplines`.`ID` ) AS 'Rate', GetMaxRateForDisc(StudentID, `disciplines`.`ID` ) AS 'MaxCurrentRate' FROM `disciplines` - INNER JOIN `subjects` ON disciplines.SubjectID = subjects.ID - CROSS JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID AND - attending_groups.SemesterID = semID - LEFT JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = attending_groups.ID AND - attending_groups_bases.StudyGroupID = groupID - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = attending_groups.ID AND - attending_groups_pool.StudentID = StudentID + INNER JOIN `subjects` ON disciplines.SubjectID = subjects.ID + INNER JOIN `teachers` ON disciplines.AuthorID = teachers.ID + LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND + disciplines_groups.StudyGroupID = groupID + LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = disciplines.ID AND + disciplines_students.StudentID = StudentID WHERE disciplines.SemesterID = semID AND - attending_groups.SemesterID = semID AND - ( attending_groups_pool.Type = 'attach' OR - ( (attending_groups_pool.Type is NULL OR attending_groups_pool.Type != 'detach') AND - attending_groups_bases.StudyGroupID IS NOT NULL AND - attending_groups_bases.StudyGroupID = groupID + ( disciplines_students.Type = 'attach' OR + ( disciplines_students.Type != 'detach' AND + disciplines_groups.StudyGroupID = groupID ) ) - ORDER BY disciplines.ExamType ASC, Rate DESC; + ORDER BY disciplines.ExamType ASC, Rate DESC; END // -- Decs: Полная информация РїРѕ модулям/подмодулям для данного студента РїРѕ данному РєСѓСЂСЃСѓ (заголовки модулей, максимальное количество баллов Р·Р° подмодуль) -DROP PROCEDURE IF EXISTS GetSubjectMapForStudent; // -CREATE PROCEDURE `GetSubjectMapForStudent`(IN `StudentID` INT, IN `SubjectID` INT) +DROP PROCEDURE IF EXISTS GetMapForStudent// +CREATE PROCEDURE `GetMapForStudent` ( IN `StudentID` INT, + IN `SubjectID` INT + ) BEGIN DECLARE groupID, semID INT; SELECT students.StudyGroupID INTO groupID FROM `students` WHERE students.ID = StudentID LIMIT 1; SET semID = GetCurSemesterID(); - SELECT modules.ID AS 'ModuleID', - modules.Name AS 'ModuleName', - submodules.ID AS 'SubmoduleID', - submodules.Name AS 'SubModuleName', - submodules.Description AS 'SubmoduleDescription', - submodules.MaxRate, + SELECT modules.ID AS 'ModuleID', + modules.Name AS 'ModuleName', + submodules.ID AS 'SubmoduleID', + submodules.Name AS 'SubModuleName', + submodules.Description AS 'SubmoduleDescription', + submodules.MaxRate, submodules.Type AS 'SubmoduleControl', rating_table.Rate, rating_table.Date @@ -544,23 +860,17 @@ BEGIN INNER JOIN `modules` ON submodules.ModuleID = modules.ID LEFT JOIN `rating_table` ON submodules.ID = rating_table.SubModuleID AND rating_table.StudentID = StudentID WHERE modules.DisciplineID IN - ( SELECT DISTINCT disciplines.ID - FROM `disciplines` - CROSS JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID AND - attending_groups.SemesterID = semID - LEFT JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = attending_groups.ID AND - attending_groups_bases.StudyGroupID = groupID - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = attending_groups.ID AND - attending_groups_pool.StudentID = StudentID - WHERE disciplines.SubjectID = SubjectID AND - disciplines.SemesterID = semID AND - attending_groups.SemesterID = semID AND - ( attending_groups_pool.Type = 'attach' OR - ( (attending_groups_pool.Type is NULL OR attending_groups_pool.Type != 'detach') AND - attending_groups_bases.StudyGroupID IS NOT NULL AND - attending_groups_bases.StudyGroupID = groupID + ( SELECT DISTINCT disciplines.ID + FROM `disciplines_teachers` + INNER JOIN `disciplines` ON disciplines_teachers.DisciplineID = disciplines.ID + LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND + disciplines_groups.StudyGroupID = groupID + LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = disciplines.ID AND + disciplines_students.StudentID = StudentID + WHERE disciplines.SemesterID = semID AND + ( disciplines_students.Type = 'attach' OR + ( disciplines_students.Type != 'detach' AND + disciplines_groups.StudyGroupID = groupID ) ) ) @@ -568,11 +878,27 @@ BEGIN END // --- ======= Преподаватели ======= -DROP PROCEDURE IF EXISTS GetDisciplineInfoByID; // + + + + + + + + + + + + +-- ------------------------------------------------------------------------------------------- +-- ======= Преподаватели ======= +-- ------------------------------------------------------------------------------------------- + + +DROP PROCEDURE IF EXISTS GetDisciplineInfoByID// CREATE PROCEDURE `GetDisciplineInfoByID`(IN `DiscID` INT) NO SQL BEGIN @@ -594,15 +920,15 @@ BEGIN END // -DROP PROCEDURE IF EXISTS GetTeachersForDiscipline; // +DROP PROCEDURE IF EXISTS GetTeachersForDiscipline// CREATE PROCEDURE `GetTeachersForDiscipline`(IN `DiscID` INT) NO SQL BEGIN SELECT teachers.ID AS 'TeacherID', - teachers.LastName, - teachers.FirstName, - teachers.SecondName, + teachers.LastName AS 'TeacherLast', + teachers.FirstName AS 'TeacherFirst', + teachers.SecondName AS 'TeacherSecond', degrees.ID AS 'DegreeID', degrees.Name AS 'Degree', departments.ID AS 'DepartmentID', @@ -623,11 +949,11 @@ END // -- Desc: Вывод всех РєСѓСЂСЃРѕРІ (ID РєСѓСЂСЃР°, название РєСѓСЂСЃР°, базовая студ.РіСЂСѓРїРїР°-слушатель), которые ведет преподаватель -DROP PROCEDURE IF EXISTS GetDisciplinesForTeacher; // +DROP PROCEDURE IF EXISTS GetDisciplinesForTeacher// CREATE PROCEDURE `GetDisciplinesForTeacher`(IN `TeacherID` INT) NO SQL BEGIN - DECLARE groupID, semID INT; + DECLARE semID INT; SET semID = GetCurSemesterID(); SELECT DISTINCT disciplines.ID AS 'DisciplineID', @@ -639,48 +965,16 @@ BEGIN study_groups.GroupNum AS 'StudyGroupNum', study_groups.Grade AS 'StudyGroupGrade', study_groups.Name AS 'StudyGroupName' - FROM `disciplines_teachers` - INNER JOIN `disciplines` ON disciplines.ID = disciplines_teachers.DisciplineID - INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID - CROSS JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = attending_groups.ID - INNER JOIN `study_groups` ON study_groups.ID = attending_groups_bases.StudyGroupID - WHERE disciplines_teachers.TeacherID = TeacherID AND - disciplines.SemesterID = semID - ORDER BY subjects.ID ASC, - disciplines.ID ASC, - study_groups.Grade ASC, - study_groups.GroupNum ASC; -END // - - - --- Desc: Вывод всех РЈРљР” (ID РЈРљР” [СЏ же надеюсь, что Сѓ нас РЈРљР” хранятся РІ РІРёРґРµ конкретных осязаемых сущностей?], которые неявно прикреплены Рє преподавателю -DROP PROCEDURE IF EXISTS GetMapsForTeacher; // -CREATE PROCEDURE `GetMapsForTeacher`(IN `TeacherID` INT) - NO SQL -BEGIN - DECLARE semID INT; - SET semID = GetCurSemesterID(); - - SELECT subjects.ID AS 'SubjectID', - subjects.Name AS 'SubjectName', - modules.ID AS 'ModuleID', - modules.Name AS 'ModuleName', - submodules.ID AS 'SubmoduleID', - submodules.Name AS 'SubModuleName', - submodules.Description AS 'SubmoduleDescription', - submodules.MaxRate AS 'MaxRate', - submodules.Type AS 'SubmoduleControl' - FROM `disciplines_teachers` - INNER JOIN `disciplines` ON disciplines_teachers.DisciplineID = disciplines.ID - INNER JOIN `subjects` ON disciplines.SubjectID = subjects.ID - CROSS JOIN `modules` ON modules.DisciplineID = disciplines.ID - CROSS JOIN `submodules` ON submodules.ModuleID = modules.ID - WHERE disciplines_teachers.TeacherID = TeacherID AND disciplines.SemesterID = semID - ORDER BY modules.OrderNum ASC, - submodules.OrderNum ASC; + FROM `disciplines_groups` + INNER JOIN `disciplines` ON disciplines_groups.DisciplineID = disciplines.ID + INNER JOIN `disciplines_teachers` ON disciplines.ID = disciplines_teachers.DisciplineID AND + disciplines.TeacherID = TeacherID + INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID + INNER JOIN `study_groups` ON study_groups.ID = disciplines_groups.StudyGroupID + WHERE disciplines.SemesterID = semID + ORDER BY disciplines.Grade ASC, + subjects.Name ASC, + study_groups.GroupNum ASC; END // @@ -688,39 +982,10 @@ END // - - -DROP FUNCTION IF EXISTS InternalOccurrenceChecker ; // -CREATE FUNCTION `InternalOccurrenceChecker` ( `StudentID` INT, - `AG_ID` INT ) - RETURNS int(11) - NO SQL -BEGIN - - DECLARE mID INT; - SET mID = 0; - SELECT students.ID - INTO mID - FROM `students` - INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID - LEFT JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = AG_ID AND attending_groups_bases.StudyGroupID = study_groups.ID - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = AG_ID AND attending_groups_pool.StudentID = StudentID - WHERE students.ID = StudentID AND - (( attending_groups_pool.Type IS NOT NULL AND attending_groups_pool.Type = 'attach') OR - ( (attending_groups_pool.Type IS NULL OR attending_groups_pool.Type != 'detach') AND attending_groups_bases.ID is NOT NULL) - ) - LIMIT 1; - - RETURN (mID>0); - -END // - - - --- Вывод всех студентов, которые слушают данный РєСѓСЂСЃ данного преподавателя -DROP PROCEDURE IF EXISTS GetStudentsForDiscipline; // -CREATE PROCEDURE `GetStudentsForDiscipline`(IN `TeacherID` INT, - IN `DisciplineID` INT ) +DROP PROCEDURE IF EXISTS GetStudentsForDiscipline// +CREATE PROCEDURE `GetStudentsForDiscipline` ( IN `TeacherID` INT, + IN `DisciplineID` INT + ) NO SQL BEGIN DECLARE checker INT; @@ -733,28 +998,24 @@ BEGIN LIMIT 1; IF checker > 0 THEN + SELECT DISTINCT students.ID AS 'StudentID', students.LastName, students.FirstName, students.SecondName, study_groups.Grade, study_groups.GroupNum, - (attending_groups_pool.StudentID IS NOT NULL) AS 'isAttached' - - FROM `disciplines_teachers` - INNER JOIN `disciplines` ON disciplines.ID = disciplines_teachers.DisciplineID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID - CROSS JOIN `students` ON InternalOccurrenceChecker(students.ID, attending_groups.ID) = TRUE - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = attending_groups.ID AND attending_groups_pool.StudentID = students.ID - INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID - WHERE disciplines_teachers.TeacherID = TeacherID AND - disciplines_teachers.DisciplineID = DisciplineID - ORDER BY study_groups.Grade ASC, - study_groups.GroupNum ASC, - students.LastName ASC, - students.FirstName ASC, - students.SecondName ASC; + (disciplines_students.StudentID IS NOT NULL) AS 'isAttached' + FROM `students` + INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID + LEFT JOIN `disciplines_groups` ON DisciplineID = disciplines_groups.DisciplineID AND + study_groups.ID = disciplines_groups.StudyGroupID + LEFT JOIN `disciplines_students` ON DisciplineID = disciplines_students.DisciplineID AND + students.ID = disciplines_students.StudentID + WHERE disciplines_students.Type = 'attach' OR + ( disciplines_students.Type != 'detach' AND + disciplines_groups.StudyGroupID IS NOT NULL + ); ELSE SELECT NULL AS 'StudentID', NULL AS 'LastName', @@ -770,11 +1031,11 @@ END // - -- Вывод всех модулей/подмодулей для данного РєСѓСЂСЃР° данного преподавателя -DROP PROCEDURE IF EXISTS GetMapForDiscipline; // -CREATE PROCEDURE `GetMapForDiscipline`( IN `TeacherID` INT, - IN `DisciplineID` INT ) +DROP PROCEDURE IF EXISTS GetMapForDiscipline// +CREATE PROCEDURE `GetMapForDiscipline` ( IN `TeacherID` INT, + IN `DisciplineID` INT + ) NO SQL BEGIN DECLARE checker INT; @@ -796,11 +1057,10 @@ BEGIN submodules.Description AS 'SubmoduleDescription', submodules.MaxRate, submodules.Type AS 'SubmoduleControl' - FROM `disciplines` + FROM `modules` + RIGHT JOIN `submodules` ON modules.ID = submodules.ModuleID + INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID INNER JOIN `subjects` ON disciplines.SubjectID = subjects.ID - CROSS JOIN `modules` ON modules.DisciplineID = disciplines.ID - CROSS JOIN `submodules` ON submodules.ModuleID = modules.ID - WHERE disciplines.ID = DisciplineID ORDER BY modules.OrderNum ASC, submodules.OrderNum ASC; ELSE @@ -818,6 +1078,8 @@ END // + + -- Добавление баллов Рє данному студенту DROP FUNCTION IF EXISTS SetStudentRate; // CREATE FUNCTION `SetStudentRate`( `TeacherID` INT, @@ -842,7 +1104,8 @@ BEGIN SELECT disciplines.ID INTO checker FROM `disciplines` - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND + disciplines_teachers.TeacherID = TeacherID WHERE disciplines.ID = discID LIMIT 1; @@ -862,22 +1125,14 @@ BEGIN SELECT disciplines.ID INTO checker FROM `disciplines` - CROSS JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID AND - attending_groups.SemesterID = semID - LEFT JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = attending_groups.ID AND - attending_groups_bases.StudyGroupID = groupID - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = attending_groups.ID AND - attending_groups_pool.StudentID = StudentID + LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND + disciplines_groups.StudyGroupID = groupID + LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = disciplines.ID AND + disciplines_students.StudentID = StudentID WHERE disciplines.SubjectID = SubjectID AND disciplines.SemesterID = semID AND - attending_groups.SemesterID = semID AND - ( attending_groups_pool.Type = 'attach' OR - ( (attending_groups_pool.Type is NULL OR attending_groups_pool.Type != 'detach') AND - attending_groups_bases.StudyGroupID IS NOT NULL AND - attending_groups_bases.StudyGroupID = groupID - ) + ( disciplines_students.Type = 'attach' OR + (disciplines_students.Type != 'detach' AND disciplines_groups.StudyGroupID = groupID ) ) LIMIT 1; @@ -886,21 +1141,19 @@ BEGIN VALUES ( StudentID, TeacherID, SubmoduleID, Rate, CURDATE() ); RETURN 0; END IF; - RETURN -3; END IF; - RETURN checker; END IF; RETURN -1; END // -- Рзменение баллов для данного студента -DROP FUNCTION IF EXISTS ChangeStudentRate; // +DROP FUNCTION IF EXISTS ChangeStudentRate// CREATE FUNCTION `ChangeStudentRate` ( `TeacherID` INT, `StudentID` INT, `SubmoduleID` INT, - `Rate` INT ) - RETURNS int(11) + `Rate` INT + ) RETURNS int(11) NO SQL BEGIN DECLARE checker, discID, OldVal, accID, groupID, rateID, semID INT; @@ -939,22 +1192,14 @@ BEGIN SELECT disciplines.ID INTO checker FROM `disciplines` - CROSS JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID - CROSS JOIN `lessons` ON lessons.DisciplineTeacherID = disciplines_teachers.ID - INNER JOIN `attending_groups` ON attending_groups.ID = lessons.AttendingGroupID AND - attending_groups.SemesterID = semID - LEFT JOIN `attending_groups_bases` ON attending_groups_bases.AttendingGroupID = attending_groups.ID AND - attending_groups_bases.StudyGroupID = groupID - LEFT JOIN `attending_groups_pool` ON attending_groups_pool.AttendingGroupID = attending_groups.ID AND - attending_groups_pool.StudentID = StudentID + LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND + disciplines_groups.StudyGroupID = groupID + LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = disciplines.ID AND + disciplines_students.StudentID = StudentID WHERE disciplines.SubjectID = SubjectID AND disciplines.SemesterID = semID AND - attending_groups.SemesterID = semID AND - ( attending_groups_pool.Type = 'attach' OR - ( (attending_groups_pool.Type is NULL OR attending_groups_pool.Type != 'detach') AND - attending_groups_bases.StudyGroupID IS NOT NULL AND - attending_groups_bases.StudyGroupID = groupID - ) + ( disciplines_students.Type = 'attach' OR + (disciplines_students.Type != 'detach' AND disciplines_groups.StudyGroupID = groupID ) ) LIMIT 1; @@ -992,16 +1237,43 @@ END // --- ====== РЈРљР” ============= -- -DROP FUNCTION IF EXISTS BindTeacher; // -CREATE FUNCTION `BindTeacher`( `BindingTeacher` INT, + + + + + + + + + +-- ------------------------------------------------------------------------------------------- +-- ====== disciplines ============= -- +-- ------------------------------------------------------------------------------------------- + + +DROP FUNCTION IF EXISTS BindTeacher// +CREATE FUNCTION `BindTeacher`( `AccessedTeacher` INT, + `BindingTeacher` INT, `DisciplineID` INT ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; + SELECT disciplines.ID + INTO checker + FROM `disciplines` + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND + disciplines_teachers.TeacherID = AccessedTeacher + WHERE disciplines.ID = discID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + + SET checker = -1; SELECT disciplines_teachers.ID INTO checker @@ -1022,17 +1294,43 @@ BEGIN END // +DROP FUNCTION IF EXISTS UnbindTeacher// +CREATE FUNCTION `UnbindTeacher` ( `AccessedTeacher` INT, + `BindingTeacher` INT, + `DisciplineID` INT + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SET checker = -1; + SELECT disciplines.ID + INTO checker + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = AccessedTeacher + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + DELETE FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = DisciplineID AND + disciplines_teachers.TeacherID = BindingTeacher; + RETURN 0; + +END // + -DROP FUNCTION IF EXISTS AddDiscipline; // -CREATE FUNCTION `AddDiscipline`( `TeacherID` INT, +DROP FUNCTION IF EXISTS AddDiscipline// +CREATE FUNCTION `AddDiscipline` ( `TeacherID` INT, `Grade` INT, `SubjectID` INT, `ExamType` VARCHAR(30), `LectionCount` INT, `PracticeCount` INT, `DepartmentID` INT - ) - RETURNS int(11) + ) RETURNS int(11) NO SQL BEGIN DECLARE semID, checker INT; @@ -1047,7 +1345,7 @@ BEGIN FROM `departments` WHERE departments.ID = DepartmentID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; @@ -1057,7 +1355,7 @@ BEGIN FROM `subjects` WHERE subjects.ID = SubjectID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; @@ -1096,16 +1394,15 @@ END // -DROP FUNCTION IF EXISTS ChangeDiscipline; // -CREATE FUNCTION `ChangeDiscipline`( `TeacherID` INT, - `DisciplineID` INT, - `ExamType` VARCHAR(30), - `LectionCount` INT, - `PracticeCount` INT, - `Grade` INT, - `SubjectID` INT - ) - RETURNS int(11) +DROP FUNCTION IF EXISTS ChangeDiscipline// +CREATE FUNCTION `ChangeDiscipline` ( `TeacherID` INT, + `DisciplineID` INT, + `ExamType` VARCHAR(30), + `LectionCount` INT, + `PracticeCount` INT, + `Grade` INT, + `SubjectID` INT + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; @@ -1115,8 +1412,7 @@ BEGIN FROM `disciplines_teachers` WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID LIMIT 1; - - IF checker IS NULL OR checker <=0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; @@ -1146,225 +1442,237 @@ BEGIN END // - --- Внесение изменений РІ подмодуль (MaxRate, TItle, Description, Order Рё С‚.Рґ.), который неявно прикреплен Рє преподавателю -DROP FUNCTION IF EXISTS ChangeSubmodule; // -CREATE FUNCTION `ChangeSubmodule`( `TeacherID` INT, - `SubmoduleID` INT, - `MaxRate` INT, - `OrderNum` INT, - `Name` VARCHAR(50), - `Description` VARCHAR(200), - `ControlType` VARCHAR(30) - ) RETURNS int(11) +DROP FUNCTION IF EXISTS BindGroup// +CREATE FUNCTION `BindGroup` ( `TeacherID` INT, + `DisciplineID` INt, + `StudyGroupID` INT + ) RETURNS int(11) NO SQL -BEGIN +BEGIN DECLARE checker INT; - SELECT modules.ID + SELECT disciplines_teachers.ID INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID + FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; SET checker = -1; - SELECT submodules.ID + SELECT study_groups.ID + INTO checker + FROM `study_groups` + WHERE study_groups.ID = StudyGroupID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + SET checker = -1; + SELECT disciplines_groups.ID INTO checker - FROM `submodules` - WHERE submodules.ModuleID = checker AND submodules.OrderNum = OrderNum + FROM `disciplines_groups` + WHERE disciplines_groups.StudyGroupID = StudyGroupID AND + disciplines_groups.DisciplineID = DisciplineID LIMIT 1; IF checker > 0 THEN - RETURN -1; - END IF; + RETURN 0; + END IF; + + INSERT INTO `disciplines_groups` ( disciplines_groups.DisciplineID, + disciplines_groups.StudyGroupID + ) + VALUES ( DisciplineID, StudyGroupID ); - UPDATE `submodules` - SET submodules.MaxRate = MaxRate, - submodules.OrderNum = OrderNum, - submodules.Name = Name, - submodules.Description = Description, - submodules.Type = ControlType - WHERE submodules.ID = SubmoduleID; RETURN 0; + END // -DROP FUNCTION IF EXISTS ChangeSubmoduleControlType; // -CREATE FUNCTION `ChangeSubmoduleControlType`( `TeacherID` INT, - `SubmoduleID` INT, - `ControlType` VARCHAR(30) - ) RETURNS int(11) + + +DROP FUNCTION IF EXISTS BindStudent// +CREATE FUNCTION `BindStudent` ( `TeacherID` INT, + `DisciplineID` INt, + `StudentID` INT + ) RETURNS int(11) NO SQL -BEGIN - DECLARE checker INT; +BEGIN + DECLARE checker, SG, temp INT; - SELECT submodules.ID + SELECT students.StudyGroupID + INTO SG + FROM `students` + WHERE students.ID = StudentID + LIMIT 1; + + + SELECT disciplines_teachers.ID INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID + FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID LIMIT 1; - - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - UPDATE `submodules` - SET submodules.Type = ControlType - WHERE submodules.ID = SubmoduleID; + + SELECT disciplines_groups.ID + INTO temp + FROM `disciplines_groups` + WHERE disciplines_groups.DisciplineID = DisciplineID AND + disciplines_groups.StudyGroupID = SG + LIMIT 1; + + + IF temp > 0 THEN + DELETE FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = DisciplineID AND + disciplines_students.StudentID = StudentID; + ELSE + INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID, + disciplines_students.StudentID, + disciplines_students.Type + ) + VALUES ( DisciplineID, StudentID, 'attach'); + + END IF; RETURN 0; + END // -DROP FUNCTION IF EXISTS ChangeSubmoduleMaxRate; // -CREATE FUNCTION `ChangeSubmoduleMaxRate`( `TeacherID` INT, - `SubmoduleID` INT, - `MaxRate` INT - ) RETURNS int(11) + +DROP FUNCTION IF EXISTS UnbindGroup// +CREATE FUNCTION `UnbindGroup` ( `TeacherID` INT, + `DisciplineID` INt, + `StudyGroupID` INT + ) RETURNS int(11) NO SQL -BEGIN +BEGIN DECLARE checker INT; - SELECT submodules.ID + SELECT disciplines_teachers.ID INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID + FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - UPDATE `submodules` - SET submodules.MaxRate = MaxRate - WHERE submodules.ID = SubmoduleID; + SET checker = -1; + SELECT study_groups.ID + INTO checker + FROM `study_groups` + WHERE study_groups.ID = StudyGroupID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + DELETE FROM `disciplines_groups` + WHERE disciplines_groups.DisciplineID = DisciplineID AND + disciplines_groups.StudyGroupID = StudyGroupID; + RETURN 0; + END // -DROP FUNCTION IF EXISTS ChangeSubmoduleOrder; // -CREATE FUNCTION `ChangeSubmoduleOrder`( `TeacherID` INT, - `SubmoduleID` INT, - `OrderNum` INT - ) RETURNS int(11) + +DROP FUNCTION IF EXISTS UnbindStudent// +CREATE FUNCTION `UnbindStudent` ( `TeacherID` INT, + `DisciplineID` INt, + `StudentID` INT + ) RETURNS int(11) NO SQL -BEGIN - DECLARE checker INT; +BEGIN + DECLARE checker, SG, temp INT; - SELECT modules.ID + SELECT students.StudyGroupID + INTO SG + FROM `students` + WHERE students.ID = StudentID + LIMIT 1; + + + SELECT disciplines_teachers.ID INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID + FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - SET checker = -1; - SELECT submodules.ID - INTO checker - FROM `submodules` - WHERE submodules.ModuleID = checker AND submodules.OrderNum = OrderNum + SELECT disciplines_groups.ID + INTO temp + FROM `disciplines_groups` + WHERE disciplines_groups.DisciplineID = DisciplineID AND + disciplines_groups.StudyGroupID = SG LIMIT 1; - IF checker > 0 THEN - RETURN -1; - END IF; - UPDATE `submodules` - SET submodules.OrderNum = OrderNum - WHERE submodules.ID = SubmoduleID; + IF temp > 0 THEN + INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID, + disciplines_students.StudentID, + disciplines_students.Type + ) + VALUES ( DisciplineID, StudentID, 'detach'); + + ELSE + DELETE FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = DisciplineID AND + disciplines_students.StudentID = StudentID; + + END IF; RETURN 0; + END // -DROP FUNCTION IF EXISTS ChangeSubmoduleName; // -CREATE FUNCTION `ChangeSubmoduleName`( `TeacherID` INT, - `SubmoduleID` INT, - `Name` VARCHAR(50) - ) RETURNS int(11) + + + + + + + + + + + + + +-- ------------------------------------------------------------------------------------------- +-- ====== Modules ============= -- +-- ------------------------------------------------------------------------------------------- + + + + +-- Внесение изменений РІ модуль (Title, Order Рё С‚.Рґ.), который неявно прикреплен Рє преподавателю +DROP FUNCTION IF EXISTS ChangeModule// +CREATE FUNCTION `ChangeModule` ( `TeacherID` INT, + `ModuleID` INT, + `OrderNum` INT, + `Name` VARCHAR(50) + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; - SELECT submodules.ID - INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID - LIMIT 1; - - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; - END IF; - - UPDATE `submodules` - SET submodules.Name = Name - WHERE submodules.ID = SubmoduleID; - RETURN 0; -END // - -DROP FUNCTION IF EXISTS ChangeSubmoduleDescription; // -CREATE FUNCTION `ChangeSubmoduleDescription`( `TeacherID` INT, - `SubmoduleID` INT, - `Description` VARCHAR(200) - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker INT; - - SELECT submodules.ID - INTO checker - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE submodules.ID = SubmoduleID - LIMIT 1; - - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; - END IF; - - UPDATE `submodules` - SET submodules.Description = Description - WHERE submodules.ID = SubmoduleID; - RETURN 0; -END // - - --- Внесение изменений РІ модуль (Title, Order Рё С‚.Рґ.), который неявно прикреплен Рє преподавателю -DROP FUNCTION IF EXISTS ChangeModule; // -CREATE FUNCTION `ChangeModule`( `TeacherID` INT, - `ModuleID` INT, - `OrderNum` INT, - `Name` VARCHAR(50) ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker INT; - - SELECT disciplines.ID + SELECT disciplines.ID INTO checker FROM `modules` INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID WHERE modules.ID = ModuleID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; SET checker = -1; @@ -1384,11 +1692,11 @@ BEGIN END // -DROP FUNCTION IF EXISTS ChangeModuleName; // -CREATE FUNCTION `ChangeModuleName`( `TeacherID` INT, - `ModuleID` INT, - `Name` VARCHAR(50) - ) RETURNS int(11) +DROP FUNCTION IF EXISTS ChangeModuleName// +CREATE FUNCTION `ChangeModuleName` ( `TeacherID` INT, + `ModuleID` INT, + `Name` VARCHAR(50) + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; @@ -1400,9 +1708,8 @@ BEGIN INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID WHERE modules.ID = ModuleID LIMIT 1; - - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; UPDATE `modules` @@ -1411,11 +1718,11 @@ BEGIN RETURN 0; END // -DROP FUNCTION IF EXISTS ChangeModuleOrder; // +DROP FUNCTION IF EXISTS ChangeModuleOrder// CREATE FUNCTION `ChangeModuleOrder` ( `TeacherID` INT, `ModuleID` INT, `OrderNum` INT - ) RETURNS int(11) + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; @@ -1427,8 +1734,8 @@ BEGIN INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID WHERE modules.ID = ModuleID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; SET checker = -1; @@ -1447,12 +1754,12 @@ BEGIN END // -- Добавление РЅРѕРІРѕРіРѕ модуля -DROP FUNCTION IF EXISTS AddModule; // -CREATE FUNCTION `AddModule`( `TeacherID` INT, +DROP FUNCTION IF EXISTS AddModule// +CREATE FUNCTION `AddModule` ( `TeacherID` INT, `DisciplineID` INT, `OrderNum` INT, - `Name` VARCHAR(50) ) - RETURNS int(11) + `Name` VARCHAR(50) + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; @@ -1463,8 +1770,8 @@ BEGIN INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND disciplines_teachers.DisciplineID = disciplines.ID WHERE disciplines.ID = DisciplineID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; SET checker = -1; @@ -1490,104 +1797,330 @@ BEGIN END // - -- Добавление РЅРѕРІРѕРіРѕ подмодуля Рє данному модулю -DROP FUNCTION IF EXISTS AddSubmodule; // -CREATE FUNCTION `AddSubmodule`( `TeacherID` INT, - `ModuleID` INT, - `MaxRate` INT, - `OrderNum` INT, - `Name` VARCHAR(50), - `Description` VARCHAR(200), - `ControlType` VARCHAR(30) - - ) RETURNS int(11) +DROP FUNCTION IF EXISTS DeleteModule// +CREATE FUNCTION `DeleteModule` ( `TeacherID` INT, + `ModuleID` INT + ) RETURNS int(11) NO SQL BEGIN - DECLARE checker INT; - - SELECT modules.ID + + DECLARE checker INT; + + SELECT disciplines.ID INTO checker FROM `modules` INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND disciplines_teachers.DisciplineID = disciplines.ID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND + disciplines_teachers.DisciplineID = disciplines.ID WHERE modules.ID = ModuleID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; + SET checker = -1; SELECT submodules.ID INTO checker FROM `submodules` - WHERE submodules.ModuleID = ModuleID AND submodules.OrderNum = OrderNum + WHERE submodules.ModuleID = ModuleID LIMIT 1; IF checker > 0 THEN RETURN -1; - END IF; + END IF; - INSERT INTO `submodules` ( submodules.ModuleID, submodules.MaxRate, submodules.OrderNum, submodules.Name, submodules.Description, submodules.Type ) - VALUES ( ModuleID, MaxRate, OrderNum, Name, Description, ControlType); - - RETURN ( SELECT submodules.ID - FROM `submodules` - WHERE submodules.ModuleID = ModuleID AND - submodules.OrderNum = OrderNum - ); + + DELETE FROM `modules` + WHERE modules.ID = ModuleID; + + + RETURN 0; END // --- Добавление РЅРѕРІРѕРіРѕ подмодуля Рє данному модулю -DROP FUNCTION IF EXISTS DeleteModule; // -CREATE FUNCTION `DeleteModule`( `TeacherID` INT, - `ModuleID` INT - ) RETURNS int(11) + +DROP FUNCTION IF EXISTS SwapModuleOrder// +CREATE FUNCTION `SwapModuleOrder` ( `TeacherID` INT, + `ModuleID1` INT, + `ModuleID2` INT + ) RETURNS int(11) NO SQL BEGIN + DECLARE checker, ord1, ord2, disc1, disc2 INT; + + SELECT COUNT(modules.ID) + INTO checker + FROM `modules` + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE modules.ID = ModuleID1 OR modules.ID = ModuleID2 + LIMIT 2; + IF checker != 2 THEN + RETURN -1; + END IF; - DECLARE checker INT; + SELECT modules.OrderNum, + modules.DisciplineID + INTO ord1, disc1 + FROM `modules` + WHERE modules.ID = ModuleID1 + LIMIT 1; - SELECT disciplines.ID - INTO checker + SELECT modules.OrderNum, + modules.DisciplineID + INTO ord2, disc2 FROM `modules` - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND - disciplines_teachers.DisciplineID = disciplines.ID - WHERE modules.ID = ModuleID + WHERE modules.ID = ModuleID2 LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN + + IF disc1 != disc2 THEN RETURN -1; END IF; + UPDATE `modules` + SET modules.OrderNum = 13666 + WHERE modules.ID = ModuleID1; + + UPDATE `modules` + SET modules.OrderNum = ord1 + WHERE modules.ID = ModuleID2; + + UPDATE `modules` + SET modules.OrderNum = ord2 + WHERE modules.ID = ModuleID1; + + RETURN 0; +END // + + + + + + + + + + + + + + + + + + + + + + +-- ------------------------------------------------------------------------------------------- +-- ====== Submodules ============= -- +-- ------------------------------------------------------------------------------------------- + + +-- Внесение изменений РІ подмодуль (MaxRate, TItle, Description, Order Рё С‚.Рґ.), который неявно прикреплен Рє преподавателю +DROP FUNCTION IF EXISTS ChangeSubmodule// +CREATE FUNCTION `ChangeSubmodule` ( `TeacherID` INT, + `SubmoduleID` INT, + `MaxRate` INT, + `OrderNum` INT, + `Name` VARCHAR(50), + `Description` VARCHAR(200), + `ControlType` VARCHAR(30) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT modules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; SET checker = -1; SELECT submodules.ID INTO checker FROM `submodules` - WHERE submodules.ModuleID = ModuleID + WHERE submodules.ModuleID = checker AND submodules.OrderNum = OrderNum LIMIT 1; IF checker > 0 THEN RETURN -1; + END IF; + + UPDATE `submodules` + SET submodules.MaxRate = MaxRate, + submodules.OrderNum = OrderNum, + submodules.Name = Name, + submodules.Description = Description, + submodules.Type = ControlType + WHERE submodules.ID = SubmoduleID; + RETURN 0; +END // + +DROP FUNCTION IF EXISTS ChangeSubmoduleControlType// +CREATE FUNCTION `ChangeSubmoduleControlType`( `TeacherID` INT, + `SubmoduleID` INT, + `ControlType` VARCHAR(30) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT submodules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; + UPDATE `submodules` + SET submodules.Type = ControlType + WHERE submodules.ID = SubmoduleID; + RETURN 0; +END // - DELETE FROM `modules` - WHERE modules.ID = ModuleID; +DROP FUNCTION IF EXISTS ChangeSubmoduleMaxRate// +CREATE FUNCTION `ChangeSubmoduleMaxRate` ( `TeacherID` INT, + `SubmoduleID` INT, + `MaxRate` INT + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT submodules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + UPDATE `submodules` + SET submodules.MaxRate = MaxRate + WHERE submodules.ID = SubmoduleID; + RETURN 0; +END // + +DROP FUNCTION IF EXISTS ChangeSubmoduleOrder// +CREATE FUNCTION `ChangeSubmoduleOrder` ( `TeacherID` INT, + `SubmoduleID` INT, + `OrderNum` INT + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT modules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + + SET checker = -1; + SELECT submodules.ID + INTO checker + FROM `submodules` + WHERE submodules.ModuleID = checker AND submodules.OrderNum = OrderNum + LIMIT 1; + IF checker > 0 THEN + RETURN -1; + END IF; + UPDATE `submodules` + SET submodules.OrderNum = OrderNum + WHERE submodules.ID = SubmoduleID; RETURN 0; END // +DROP FUNCTION IF EXISTS ChangeSubmoduleName// +CREATE FUNCTION `ChangeSubmoduleName` ( `TeacherID` INT, + `SubmoduleID` INT, + `Name` VARCHAR(50) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT submodules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; --- Добавление РЅРѕРІРѕРіРѕ подмодуля Рє данному модулю -DROP FUNCTION IF EXISTS DeleteSubmodule; // -CREATE FUNCTION `DeleteSubmodule`( `TeacherID` INT, - `SubmoduleID` INT - ) RETURNS int(11) + UPDATE `submodules` + SET submodules.Name = Name + WHERE submodules.ID = SubmoduleID; + RETURN 0; +END // + +DROP FUNCTION IF EXISTS ChangeSubmoduleDescription// +CREATE FUNCTION `ChangeSubmoduleDescription` ( `TeacherID` INT, + `SubmoduleID` INT, + `Description` VARCHAR(200) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT submodules.ID + INTO checker + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID + WHERE submodules.ID = SubmoduleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + UPDATE `submodules` + SET submodules.Description = Description + WHERE submodules.ID = SubmoduleID; + RETURN 0; +END // + + + +DROP FUNCTION IF EXISTS DeleteSubmodule// +CREATE FUNCTION `DeleteSubmodule` ( `TeacherID` INT, + `SubmoduleID` INT + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; @@ -1600,8 +2133,8 @@ BEGIN INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND disciplines_teachers.DisciplineID = disciplines.ID WHERE submodules.ID = SubmoduleID LIMIT 1; - IF checker IS NULL OR checker <= 0 THEN - RETURN -1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; @@ -1625,14 +2158,56 @@ BEGIN END // +DROP FUNCTION IF EXISTS AddSubmodule// +CREATE FUNCTION `AddSubmodule` ( `TeacherID` INT, + `ModuleID` INT, + `MaxRate` INT, + `OrderNum` INT, + `Name` VARCHAR(50), + `Description` VARCHAR(200), + `ControlType` VARCHAR(30) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT modules.ID + INTO checker + FROM `modules` + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines_teachers` ON disciplines_teachers.TeacherID = TeacherID AND disciplines_teachers.DisciplineID = disciplines.ID + WHERE modules.ID = ModuleID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + SET checker = -1; + SELECT submodules.ID + INTO checker + FROM `submodules` + WHERE submodules.ModuleID = ModuleID AND submodules.OrderNum = OrderNum + LIMIT 1; + IF checker > 0 THEN + RETURN -1; + END IF; -DROP FUNCTION IF EXISTS SwapSubmoduleOrder; // + INSERT INTO `submodules` ( submodules.ModuleID, submodules.MaxRate, submodules.OrderNum, submodules.Name, submodules.Description, submodules.Type ) + VALUES ( ModuleID, MaxRate, OrderNum, Name, Description, ControlType); + + RETURN ( SELECT submodules.ID + FROM `submodules` + WHERE submodules.ModuleID = ModuleID AND + submodules.OrderNum = OrderNum + ); +END // + + +DROP FUNCTION IF EXISTS SwapSubmoduleOrder// CREATE FUNCTION `SwapSubmoduleOrder`( `TeacherID` INT, `SubmoduleID1` INT, `SubmoduleID2` INT - ) RETURNS int(11) NO SQL BEGIN @@ -1684,113 +2259,69 @@ END // -DROP FUNCTION IF EXISTS SwapModuleOrder; // -CREATE FUNCTION `SwapModuleOrder` ( `TeacherID` INT, - `ModuleID1` INT, - `ModuleID2` INT - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker, ord1, ord2, disc1, disc2 INT; - - SELECT COUNT(modules.ID) - INTO checker - FROM `modules` - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND disciplines_teachers.TeacherID = TeacherID - WHERE modules.ID = ModuleID1 OR modules.ID = ModuleID2 - LIMIT 2; - IF checker != 2 THEN - RETURN -1; - END IF; - SELECT modules.OrderNum, - modules.DisciplineID - INTO ord1, disc1 - FROM `modules` - WHERE modules.ID = ModuleID1 - LIMIT 1; - - SELECT modules.OrderNum, - modules.DisciplineID - INTO ord2, disc2 - FROM `modules` - WHERE modules.ID = ModuleID2 - LIMIT 1; - IF disc1 != disc2 THEN - RETURN -1; - END IF; - UPDATE `modules` - SET modules.OrderNum = 13666 - WHERE modules.ID = ModuleID1; - UPDATE `modules` - SET modules.OrderNum = ord1 - WHERE modules.ID = ModuleID2; - UPDATE `modules` - SET modules.OrderNum = ord2 - WHERE modules.ID = ModuleID1; - - RETURN 0; -END // +-- ------------------------------------------------------------------------------------------- -- ====== Requests ======= -- - - -DROP PROCEDURE IF EXISTS GetLastRequests; // -CREATE PROCEDURE `GetLastRequests`( IN `CountN` INT ) - NO SQL -BEGIN - DECLARE offsetN, allNum, countClone INT; - SELECT COUNT(requests.ID) INTO allNum FROM `requests`; - SET countClone = CountN; - IF CountN = -1 THEN - SET countClone = allNum; - END IF; - - SET offsetN = allNum - CountN; - IF offsetN < 0 THEN - SET offsetN = 0; - END IF; - - SELECT requests.ID, - requests.AccountID, - requests.Information, - requests.Date, - requests.Status - FROM `requests` - WHERE requests.Status = 0 - LIMIT countClone OFFSET offsetN; - -END // - - -DROP PROCEDURE IF EXISTS GetFirstRequests ; // -CREATE PROCEDURE `GetFirstRequests`( IN `CountN` INT ) - NO SQL -BEGIN - DECLARE allNum, countClone INT; - SELECT COUNT(requests.ID) INTO allNum FROM `requests`; - SET countClone = CountN; - IF CountN = -1 THEN - SET countClone = allNum; - END IF; - - SELECT requests.ID, - requests.AccountID, - requests.Information, - requests.Date, - requests.Status - FROM `requests` - WHERE requests.Status = 0 - LIMIT countClone; - -END // - - - - +-- ------------------------------------------------------------------------------------------- + +-- DROP PROCEDURE IF EXISTS GetLastRequests// +-- CREATE PROCEDURE `GetLastRequests` ( IN `CountN` INT +-- ) +-- NO SQL +-- BEGIN +-- DECLARE offsetN, allNum, countClone INT; +-- SELECT COUNT(requests.ID) INTO allNum FROM `requests`; +-- SET countClone = CountN; +-- IF CountN = -1 THEN +-- SET countClone = allNum; +-- END IF; + +-- SET offsetN = allNum - CountN; +-- IF offsetN < 0 THEN +-- SET offsetN = 0; +-- END IF; + +-- SELECT requests.ID, +-- requests.AccountID, +-- requests.Information, +-- requests.Date, +-- requests.Status +-- FROM `requests` +-- WHERE requests.Status = 0 +-- LIMIT countClone OFFSET offsetN; + +-- END // + + +-- DROP PROCEDURE IF EXISTS GetFirstRequests// +-- CREATE PROCEDURE `GetFirstRequests` ( IN `CountN` INT +-- ) +-- NO SQL +-- BEGIN +-- DECLARE allNum, countClone INT; +-- SELECT COUNT(requests.ID) INTO allNum FROM `requests`; +-- SET countClone = CountN; +-- IF CountN = -1 THEN +-- SET countClone = allNum; +-- END IF; + +-- SELECT requests.ID, +-- requests.AccountID, +-- requests.Information, +-- requests.Date, +-- requests.Status +-- FROM `requests` +-- WHERE requests.Status = 0 +-- LIMIT countClone; +-- END // + + + + +DELIMITER ; \ No newline at end of file diff --git a/db/NewEmpty.sql b/db/Structure.sql similarity index 56% rename from db/NewEmpty.sql rename to db/Structure.sql index 068aa054dddd2fd7e6db98e55099e05c413559f8..07c6d13a2be18b5d1087da42977031c125a14e33 100644 --- a/db/NewEmpty.sql +++ b/db/Structure.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- РҐРѕСЃС‚: 127.0.0.1:3306 --- Время создания: РђРІРі 20 2014 Рі., 23:32 +-- Время создания: РђРІРі 22 2014 Рі., 14:07 -- Версия сервера: 5.5.37-log -- Версия PHP: 5.3.28 @@ -17,7 +17,7 @@ SET time_zone = "+00:00"; /*!40101 SET NAMES utf8 */; -- --- База данных: `Sample3` +-- База данных: `Sample2` -- -- -------------------------------------------------------- @@ -30,111 +30,15 @@ CREATE TABLE IF NOT EXISTS `accounts` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Login` varchar(50) DEFAULT NULL, `Password` varchar(64) DEFAULT NULL, - `E-Mail` varchar(255) DEFAULT NULL, - `Type` enum('student','teacher') NOT NULL, + `EMail` varchar(255) DEFAULT NULL, + `UserRoleID` int(11) NOT NULL, `ActivationCode` varchar(40) DEFAULT NULL, `isEnabled` tinyint(1) NOT NULL DEFAULT '1', `UserAgent` text, PRIMARY KEY (`ID`), - UNIQUE KEY `E-Mail` (`E-Mail`), - UNIQUE KEY `Login` (`Login`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; - --- --- Дамп данных таблицы `accounts` --- - -INSERT INTO `accounts` (`ID`, `Login`, `Password`, `E-Mail`, `Type`, `ActivationCode`, `isEnabled`, `UserAgent`) VALUES -(6, 'Abbadon', 'ff6cfea689c242780b084583790e39f5eb03bb91', 'solidovic@gmail.com', 'teacher', NULL, 1, NULL), -(7, NULL, NULL, NULL, 'student', 'code2', 1, NULL); - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups` --- - -CREATE TABLE IF NOT EXISTS `attending_groups` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) DEFAULT NULL, - `SemesterID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `SemesterID` (`SemesterID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups_bases` --- - -CREATE TABLE IF NOT EXISTS `attending_groups_bases` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `StudyGroupID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `StudyGroupID` (`StudyGroupID`), - KEY `AttendingGroupID` (`AttendingGroupID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `attending_groups_pool` --- - -CREATE TABLE IF NOT EXISTS `attending_groups_pool` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `StudentID` int(11) NOT NULL, - `Type` enum('attach','detach') NOT NULL, - PRIMARY KEY (`ID`), - KEY `AttendingGroupID` (`AttendingGroupID`), - KEY `StudentID` (`StudentID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `classrooms` --- - -CREATE TABLE IF NOT EXISTS `classrooms` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) NOT NULL, - `Capacity` int(11) DEFAULT NULL, - `FacultyID` int(11) NOT NULL, - `Export` enum('true','false') NOT NULL DEFAULT 'false', - PRIMARY KEY (`ID`), - KEY `FacultyID` (`FacultyID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `classroom_sets` --- - -CREATE TABLE IF NOT EXISTS `classroom_sets` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `Name` varchar(50) DEFAULT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `classroom_sets_pool` --- - -CREATE TABLE IF NOT EXISTS `classroom_sets_pool` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `ClassroomSetID` int(11) NOT NULL, - `ClassroomID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `ClassroomID` (`ClassroomID`), - KEY `ClassroomSetID` (`ClassroomSetID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + UNIQUE KEY `Login` (`Login`,`EMail`), + KEY `UserRoleID` (`UserRoleID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -146,27 +50,7 @@ CREATE TABLE IF NOT EXISTS `degrees` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(200) NOT NULL, PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; - --- --- Дамп данных таблицы `degrees` --- - -INSERT INTO `degrees` (`ID`, `Name`) VALUES -(1, 'Аспирант'), -(2, 'Ассистент'), -(3, 'Ведущий научный сотрудник'), -(4, 'Главный научный сотрудник'), -(5, 'Докторант'), -(6, 'Доцент'), -(7, 'Младший научный сотрудник'), -(8, 'Научный сотрудник'), -(9, 'Преподаватель'), -(10, 'Профессор'), -(11, 'Старший преподаватель'), -(12, 'Стажер'), -(13, 'Старший научный сотрудник'), -(14, 'Доцент'); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -180,15 +64,7 @@ CREATE TABLE IF NOT EXISTS `departments` ( `FacultyID` int(11) NOT NULL, PRIMARY KEY (`ID`), KEY `FacultyID` (`FacultyID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `departments` --- - -INSERT INTO `departments` (`ID`, `Name`, `FacultyID`) VALUES -(1, 'Кафедра математического анализа', 1), -(2, 'Кафедра магического анализа', 1); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -211,7 +87,38 @@ CREATE TABLE IF NOT EXISTS `disciplines` ( KEY `TeacherID` (`AuthorID`), KEY `SemesterID` (`SemesterID`), KEY `DepartmentID` (`DepartmentID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Структура таблицы `disciplines_groups` +-- + +CREATE TABLE IF NOT EXISTS `disciplines_groups` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `DisciplineID` int(11) NOT NULL, + `StudyGroupID` int(11) NOT NULL, + PRIMARY KEY (`ID`), + KEY `DisciplineID` (`DisciplineID`), + KEY `StudyGroupID` (`StudyGroupID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Структура таблицы `disciplines_students` +-- + +CREATE TABLE IF NOT EXISTS `disciplines_students` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `DisciplineID` int(11) NOT NULL, + `StudentID` int(11) NOT NULL, + `Type` enum('attach','detach') NOT NULL, + PRIMARY KEY (`ID`), + KEY `DisciplineID` (`DisciplineID`), + KEY `StudentID` (`StudentID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -224,9 +131,10 @@ CREATE TABLE IF NOT EXISTS `disciplines_teachers` ( `DisciplineID` int(11) NOT NULL, `TeacherID` int(11) NOT NULL, PRIMARY KEY (`ID`), + UNIQUE KEY `DisciplineID_2` (`DisciplineID`,`TeacherID`), KEY `DisciplineID` (`DisciplineID`), KEY `AccountID` (`TeacherID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -239,15 +147,7 @@ CREATE TABLE IF NOT EXISTS `faculties` ( `Name` varchar(100) NOT NULL, `Abbr` varchar(20) NOT NULL, PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `faculties` --- - -INSERT INTO `faculties` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Математика Механика Рё РљРќ', 'МехМат'), -(2, 'Юридический факультет', 'ЮрФак'); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -260,30 +160,7 @@ CREATE TABLE IF NOT EXISTS `general_settings` ( `Val` int(11) DEFAULT NULL, `ValS` varchar(300) DEFAULT NULL, PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; - --- --- Дамп данных таблицы `general_settings` --- - -INSERT INTO `general_settings` (`ID`, `Val`, `ValS`) VALUES -(1, 1, NULL), -(2, NULL, 'hfkshfkjdshkjfsdj'); - --- -------------------------------------------------------- - --- --- Структура таблицы `lessons` --- - -CREATE TABLE IF NOT EXISTS `lessons` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `AttendingGroupID` int(11) NOT NULL, - `DisciplineTeacherID` int(11) NOT NULL, - PRIMARY KEY (`ID`), - KEY `DisciplineID` (`DisciplineTeacherID`), - KEY `AttendingGroupID` (`AttendingGroupID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -301,7 +178,7 @@ CREATE TABLE IF NOT EXISTS `logs` ( PRIMARY KEY (`ID`), KEY `RatingTableID` (`RatingTableID`), KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -317,7 +194,20 @@ CREATE TABLE IF NOT EXISTS `modules` ( PRIMARY KEY (`ID`), UNIQUE KEY `OrderNum` (`OrderNum`,`DisciplineID`), KEY `DisciplineID` (`DisciplineID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Структура таблицы `page_access` +-- + +CREATE TABLE IF NOT EXISTS `page_access` ( + `ID` int(11) NOT NULL, + `Pagename` text NOT NULL, + `Bitmask` int(11) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -336,7 +226,7 @@ CREATE TABLE IF NOT EXISTS `rating_table` ( KEY `StudentID` (`StudentID`), KEY `SubmoduleID` (`SubmoduleID`), KEY `TeacherID` (`TeacherID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -352,29 +242,7 @@ CREATE TABLE IF NOT EXISTS `requests` ( `Status` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Структура таблицы `schedule` --- - -CREATE TABLE IF NOT EXISTS `schedule` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `LessonID` int(11) NOT NULL, - `Day` int(11) NOT NULL, - `LessonTimeID` int(11) NOT NULL, - `ClassroomSetID` int(11) NOT NULL, - `SubgroupCount` int(11) NOT NULL, - `SubgroupNum` int(11) NOT NULL, - `WeekSplit` enum('full','up','down') NOT NULL DEFAULT 'full', - `LesType` int(11) NOT NULL, - `Notice` varchar(30) NOT NULL, - PRIMARY KEY (`ID`), - KEY `LessonID` (`LessonID`), - KEY `ClassroomSetID` (`ClassroomSetID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -387,14 +255,7 @@ CREATE TABLE IF NOT EXISTS `semesters` ( `Year` int(11) NOT NULL, `Num` int(11) NOT NULL, PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; - --- --- Дамп данных таблицы `semesters` --- - -INSERT INTO `semesters` (`ID`, `Year`, `Num`) VALUES -(1, 2014, 1); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -406,18 +267,10 @@ CREATE TABLE IF NOT EXISTS `specializations` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(50) NOT NULL, `Abbr` varchar(20) NOT NULL, - PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; - --- --- Дамп данных таблицы `specializations` --- - -INSERT INTO `specializations` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Прикладная математика Рё информатика', 'РџРњРёР'), -(2, 'Рнформационные технологии', 'РРў'), -(3, 'Математика', 'Матем'), -(4, 'Механика', 'Механика'); + `FacultyID` int(11) NOT NULL, + PRIMARY KEY (`ID`), + KEY `FacultyID` (`FacultyID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -435,14 +288,7 @@ CREATE TABLE IF NOT EXISTS `students` ( PRIMARY KEY (`ID`), KEY `StudyGroupID` (`StudyGroupID`), KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; - --- --- Дамп данных таблицы `students` --- - -INSERT INTO `students` (`ID`, `StudyGroupID`, `AccountID`, `LastName`, `FirstName`, `SecondName`) VALUES -(1, 1, 7, 'Рванов', 'Рван', 'Рванович'); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -455,19 +301,10 @@ CREATE TABLE IF NOT EXISTS `study_groups` ( `Grade` int(11) NOT NULL, `GroupNum` int(11) NOT NULL, `SpecializationID` int(11) NOT NULL, - `FacultyID` int(11) NOT NULL, `Name` varchar(50) DEFAULT NULL, PRIMARY KEY (`ID`), - KEY `SpecializtionID` (`SpecializationID`), - KEY `FacultyID` (`FacultyID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; - --- --- Дамп данных таблицы `study_groups` --- - -INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `FacultyID`, `Name`) VALUES -(1, 1, 1, 1, 1, NULL); + KEY `SpecializtionID` (`SpecializationID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -480,17 +317,7 @@ CREATE TABLE IF NOT EXISTS `subjects` ( `Name` varchar(50) NOT NULL, `Abbr` varchar(20) DEFAULT NULL, PRIMARY KEY (`ID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; - --- --- Дамп данных таблицы `subjects` --- - -INSERT INTO `subjects` (`ID`, `Name`, `Abbr`) VALUES -(1, 'Математический анализ', 'Матан'), -(2, 'Конституционное право', 'РљРџ'), -(3, 'Операционные системы', 'РћРЎ'), -(4, 'Рстория', 'Рстория'); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -509,7 +336,7 @@ CREATE TABLE IF NOT EXISTS `submodules` ( PRIMARY KEY (`ID`), UNIQUE KEY `ModuleID_2` (`ModuleID`,`OrderNum`), KEY `ModuleID` (`ModuleID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -528,51 +355,31 @@ CREATE TABLE IF NOT EXISTS `teachers` ( PRIMARY KEY (`ID`), KEY `FacultyID` (`DepartmentID`), KEY `AccountID` (`AccountID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; - --- --- Дамп данных таблицы `teachers` --- - -INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `DegreeID`, `DepartmentID`, `AccountID`) VALUES -(1, 'Колобок', 'Фазиль', 'Евреивич', 9, 1, 6); +) ENGINE=InnoDB DEFAULT CHARSET=utf8; --- --- Ограничения внешнего ключа сохраненных таблиц --- - --- --- Ограничения внешнего ключа таблицы `attending_groups` --- -ALTER TABLE `attending_groups` - ADD CONSTRAINT `attending_groups_ibfk_1` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`); +-- -------------------------------------------------------- -- --- Ограничения внешнего ключа таблицы `attending_groups_bases` +-- Структура таблицы `user_roles` -- -ALTER TABLE `attending_groups_bases` - ADD CONSTRAINT `attending_groups_bases_ibfk_1` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `attending_groups_bases_ibfk_2` FOREIGN KEY (`StudyGroupID`) REFERENCES `study_groups` (`ID`); --- --- Ограничения внешнего ключа таблицы `attending_groups_pool` --- -ALTER TABLE `attending_groups_pool` - ADD CONSTRAINT `attending_groups_pool_ibfk_1` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `attending_groups_pool_ibfk_2` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`); +CREATE TABLE IF NOT EXISTS `user_roles` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `Type` enum('student','teacher') NOT NULL, + `Role` enum('common','classMonitor','departmentAdmin','admin') NOT NULL, + `Mark` int(11) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- --- Ограничения внешнего ключа таблицы `classrooms` +-- Ограничения внешнего ключа сохраненных таблиц -- -ALTER TABLE `classrooms` - ADD CONSTRAINT `classrooms_ibfk_1` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`); -- --- Ограничения внешнего ключа таблицы `classroom_sets_pool` +-- Ограничения внешнего ключа таблицы `accounts` -- -ALTER TABLE `classroom_sets_pool` - ADD CONSTRAINT `classroom_sets_pool_ibfk_1` FOREIGN KEY (`ClassroomID`) REFERENCES `classrooms` (`ID`), - ADD CONSTRAINT `classroom_sets_pool_ibfk_2` FOREIGN KEY (`ClassroomSetID`) REFERENCES `classroom_sets` (`ID`); +ALTER TABLE `accounts` + ADD CONSTRAINT `accounts_ibfk_1` FOREIGN KEY (`UserRoleID`) REFERENCES `user_roles` (`ID`); -- -- Ограничения внешнего ключа таблицы `departments` @@ -589,6 +396,20 @@ ALTER TABLE `disciplines` ADD CONSTRAINT `disciplines_ibfk_5` FOREIGN KEY (`AuthorID`) REFERENCES `teachers` (`ID`), ADD CONSTRAINT `disciplines_ibfk_6` FOREIGN KEY (`DepartmentID`) REFERENCES `departments` (`ID`); +-- +-- Ограничения внешнего ключа таблицы `disciplines_groups` +-- +ALTER TABLE `disciplines_groups` + ADD CONSTRAINT `disciplines_groups_ibfk_1` FOREIGN KEY (`DisciplineID`) REFERENCES `disciplines` (`ID`), + ADD CONSTRAINT `disciplines_groups_ibfk_2` FOREIGN KEY (`StudyGroupID`) REFERENCES `study_groups` (`ID`); + +-- +-- Ограничения внешнего ключа таблицы `disciplines_students` +-- +ALTER TABLE `disciplines_students` + ADD CONSTRAINT `disciplines_students_ibfk_1` FOREIGN KEY (`DisciplineID`) REFERENCES `disciplines` (`ID`), + ADD CONSTRAINT `disciplines_students_ibfk_2` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`); + -- -- Ограничения внешнего ключа таблицы `disciplines_teachers` -- @@ -596,13 +417,6 @@ ALTER TABLE `disciplines_teachers` ADD CONSTRAINT `disciplines_teachers_ibfk_1` FOREIGN KEY (`DisciplineID`) REFERENCES `disciplines` (`ID`), ADD CONSTRAINT `disciplines_teachers_ibfk_2` FOREIGN KEY (`TeacherID`) REFERENCES `teachers` (`ID`); --- --- Ограничения внешнего ключа таблицы `lessons` --- -ALTER TABLE `lessons` - ADD CONSTRAINT `lessons_ibfk_6` FOREIGN KEY (`AttendingGroupID`) REFERENCES `attending_groups` (`ID`), - ADD CONSTRAINT `lessons_ibfk_7` FOREIGN KEY (`DisciplineTeacherID`) REFERENCES `disciplines_teachers` (`ID`); - -- -- Ограничения внешнего ключа таблицы `logs` -- @@ -631,11 +445,10 @@ ALTER TABLE `requests` ADD CONSTRAINT `requests_ibfk_1` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`) ON DELETE SET NULL ON UPDATE SET NULL; -- --- Ограничения внешнего ключа таблицы `schedule` +-- Ограничения внешнего ключа таблицы `specializations` -- -ALTER TABLE `schedule` - ADD CONSTRAINT `schedule_ibfk_1` FOREIGN KEY (`LessonID`) REFERENCES `lessons` (`ID`), - ADD CONSTRAINT `schedule_ibfk_2` FOREIGN KEY (`ClassroomSetID`) REFERENCES `classroom_sets` (`ID`); +ALTER TABLE `specializations` + ADD CONSTRAINT `specializations_ibfk_1` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`); -- -- Ограничения внешнего ключа таблицы `students` @@ -648,7 +461,6 @@ ALTER TABLE `students` -- Ограничения внешнего ключа таблицы `study_groups` -- ALTER TABLE `study_groups` - ADD CONSTRAINT `study_groups_ibfk_2` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`), ADD CONSTRAINT `study_groups_ibfk_4` FOREIGN KEY (`SpecializationID`) REFERENCES `specializations` (`ID`); --