diff --git a/db/Structure.sql b/db/Structure.sql index a62e171ae0bb4c98eafa4e51fc8300f60d3298c1..327e31acc7b7283f2cb1f77e5b70d0b14442341f 100644 --- a/db/Structure.sql +++ b/db/Structure.sql @@ -364,13 +364,11 @@ CREATE TABLE IF NOT EXISTS `specializations` ( CREATE TABLE IF NOT EXISTS `students` ( `ID` int(11) NOT NULL AUTO_INCREMENT, - `GroupID` int(11) NOT NULL, `AccountID` int(11) NOT NULL, `LastName` varchar(30) CHARACTER SET utf8 NOT NULL, `FirstName` varchar(30) CHARACTER SET utf8 NOT NULL, `SecondName` varchar(30) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (`ID`), - KEY `GroupID` (`GroupID`), KEY `AccountID` (`AccountID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -516,6 +514,27 @@ CREATE TABLE IF NOT EXISTS `recovery_tokens` ( +-- -------------------------------------------------------- + +-- +-- Структура таблицы `students_groups` +-- +CREATE TABLE IF NOT EXISTS `students_groups` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `StudentID` int(11) NOT NULL, + `GroupID` int(11) NOT NULL, + `SemesterID` int(11) NOT NULL, + `IsStudyLeave` tinyint(1) NOT NULL DEFAULT '0', + `Date` date NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `StudentID_2` (`StudentID`,`GroupID`,`SemesterID`), + KEY `SemesterID` (`SemesterID`), + KEY `StudentID` (`StudentID`), + KEY `GroupID` (`GroupID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + -- -- Дамп данных таблицы `user_roles` -- @@ -674,7 +693,6 @@ ALTER TABLE `specializations` -- Ограничения внешнего ключа таблицы `students` -- ALTER TABLE `students` - ADD CONSTRAINT `students_ibfk_1` FOREIGN KEY (`GroupID`) REFERENCES `study_groups` (`ID`), ADD CONSTRAINT `students_ibfk_2` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`); -- @@ -707,6 +725,15 @@ ALTER TABLE `subjects_faculties` ADD CONSTRAINT `subjects_faculties_ibfk_2` FOREIGN KEY (`SubjectID`) REFERENCES `subjects` (`ID`); +-- +-- Ограничения внешнего ключа таблицы `students_groups` +-- +ALTER TABLE `students_groups` + ADD CONSTRAINT `students_groups_ibfk_1` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`), + ADD CONSTRAINT `students_groups_ibfk_2` FOREIGN KEY (`GroupID`) REFERENCES `study_groups` (`ID`), + ADD CONSTRAINT `students_groups_ibfk_3` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`); + + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; diff --git a/db/fix.sql b/db/fix.sql index a8caae05f9e12749047033ee9aa717ec3780fb7d..f4bad018a866e8b8678d0f69a9f29559098438cd 100644 --- a/db/fix.sql +++ b/db/fix.sql @@ -1,6 +1,6 @@ -ALTER TABLE `disciplines` CHANGE LectionCount LectureCount int(11) NOT NULL DEFAULT '0'; - +# 5.03.15 - db refactoring +ALTER TABLE `disciplines` CHANGE LectionCount LectureCount int(11) NOT NULL DEFAULT '0'; ALTER TABLE students DROP FOREIGN KEY students_ibfk_1; ALTER TABLE disciplines_groups DROP FOREIGN KEY disciplines_groups_ibfk_2; @@ -41,3 +41,42 @@ SET modules.OrderNum = 3141592 WHERE modules.OrderNum = 3141692; + + +# 15.03.15 - student's groups memorization + +CREATE TABLE IF NOT EXISTS `students_groups` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `StudentID` int(11) NOT NULL, + `GroupID` int(11) NOT NULL, + `SemesterID` int(11) NOT NULL, + `IsStudyLeave` tinyint(1) NOT NULL DEFAULT '0', + `Date` date NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `StudentID_2` (`StudentID`,`GroupID`,`SemesterID`), + KEY `SemesterID` (`SemesterID`), + KEY `StudentID` (`StudentID`), + KEY `GroupID` (`GroupID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +# constraints +ALTER TABLE `students_groups` + ADD CONSTRAINT `students_groups_ibfk_1` FOREIGN KEY (`StudentID`) REFERENCES `students` (`ID`), + ADD CONSTRAINT `students_groups_ibfk_2` FOREIGN KEY (`GroupID`) REFERENCES `study_groups` (`ID`), + ADD CONSTRAINT `students_groups_ibfk_3` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`); + +# save groups +INSERT INTO `students_groups` (StudentID, GroupID, SemesterID) +SELECT DISTINCT students.ID, students.GroupID, semesters.ID + FROM `students` + CROSS JOIN `semesters`; + +# clear useless data +ALTER TABLE `students` DROP FOREIGN KEY `students_ibfk_1` ; +ALTER TABLE `students` DROP INDEX `GroupID` ; +ALTER TABLE `students` DROP `GroupID` ; + + + +