From edf9891ce37af48c1badd5a009a5f4e70ceb65bd Mon Sep 17 00:00:00 2001
From: PavelBegunkov <asml.Silence@gmail.com>
Date: Fri, 22 Aug 2014 14:09:49 +0400
Subject: [PATCH] HellYeah

---
 db/DatabaseSample.sql              |  750 ----------
 db/Sample.sql                      |  133 ++
 db/StoredProcedures.sql            | 2035 ++++++++++++++++++----------
 db/{NewEmpty.sql => Structure.sql} |  394 ++----
 4 files changed, 1519 insertions(+), 1793 deletions(-)
 delete mode 100644 db/DatabaseSample.sql
 create mode 100644 db/Sample.sql
 rename db/{NewEmpty.sql => Structure.sql} (56%)

diff --git a/db/DatabaseSample.sql b/db/DatabaseSample.sql
deleted file mode 100644
index b140de937..000000000
--- 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 000000000..ce67be10b
--- /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 ef6ac33e4..d116e3e9c 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 068aa054d..07c6d13a2 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`);
 
 --
-- 
GitLab