From 53ebb37bf8a91296e6c4da7cfdc34adea0fab74c Mon Sep 17 00:00:00 2001 From: PavelBegunkov <asml.Silence@gmail.com> Date: Sun, 31 Aug 2014 17:10:44 +0400 Subject: [PATCH] Grades --- db/Sample.sql | 16 +++- db/StoredProcedures.sql | 158 ++++++++++++++++++++++++++-------------- db/Structure.sql | 32 ++++++-- 3 files changed, 142 insertions(+), 64 deletions(-) diff --git a/db/Sample.sql b/db/Sample.sql index b0a385c2d..7b4a7b52e 100644 --- a/db/Sample.sql +++ b/db/Sample.sql @@ -20,7 +20,17 @@ SET time_zone = "+00:00"; -- База данных: `Sample2` -- - +-- +-- Дамп данных таблицы `grades` +-- +INSERT INTO `grades` (`ID`, `Grade`, `Degree`) VALUES +(1, 1, 'bachelor'), +(2, 2, 'bachelor'), +(3, 3, 'bachelor'), +(4, 4, 'bachelor'), +(5, 5, 'specialist'), +(6, 1, 'master'), +(7, 2, 'master'); -- -- Дамп данных таблицы `job_positions` @@ -129,7 +139,7 @@ INSERT INTO `specializations` (`ID`, `Name`, `Abbr`, `FacultyID`) VALUES -- Дамп данных таблицы `study_groups` -- -INSERT INTO `study_groups` (`ID`, `Grade`, `GroupNum`, `SpecializationID`, `Name`) VALUES +INSERT INTO `study_groups` (`ID`, `GradeID`, `GroupNum`, `SpecializationID`, `Name`) VALUES (1, 1, 1, 1, NULL), (2, 1, 2, 1, NULL), (3, 1, 3, 2, NULL), @@ -171,7 +181,7 @@ INSERT INTO `teachers` (`ID`, `LastName`, `FirstName`, `SecondName`, `JobPositio -- Дамп данных таблицы `disciplines` -- -INSERT INTO `disciplines` (`ID`, `Grade`, `SubjectID`, `AuthorID`, `ExamType`, `SemesterID`, `PracticeCount`, `LectionCount`, `FacultyID`) VALUES +INSERT INTO `disciplines` (`ID`, `GradeID`, `SubjectID`, `AuthorID`, `ExamType`, `SemesterID`, `PracticeCount`, `LectionCount`, `FacultyID`) VALUES (1, 1, 1, 1, 'exam', 1, 0, 36, 1), (2, 1, 5, 2, 'exam', 1, 18, 36, 1), (3, 1, 2, 1, 'credit', 1, 18, 0, 1), diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index cd70d2354..22faf6f24 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -244,7 +244,7 @@ END // DROP PROCEDURE IF EXISTS GetStudyGroups// -CREATE PROCEDURE `GetStudyGroups` ( IN `Grade` INT, +CREATE PROCEDURE `GetStudyGroups` ( IN `GradeID` INT, IN `FacultyID` INT ) NO SQL @@ -257,14 +257,14 @@ BEGIN specializations.FacultyID AS 'FacultyID' FROM `study_groups` INNER JOIN `specializations` ON specializations.ID = study_groups.SpecializationID - WHERE ( Grade = 0 OR study_groups.Grade = Grade ) AND + WHERE ( GradeID = 0 OR study_groups.GradeID = GradeID ) AND specializations.FacultyID = FacultyID - ORDER BY specializations.ID ASC, study_groups.Grade ASC, study_groups.GroupNum ASC; + ORDER BY specializations.ID ASC, grades.ID ASC, study_groups.GroupNum ASC; END // DROP PROCEDURE IF EXISTS GetStudyGroupsOrdByGroups// -CREATE PROCEDURE `GetStudyGroupsOrdByGroups` ( IN `Grade` INT, +CREATE PROCEDURE `GetStudyGroupsOrdByGroups` ( IN `GradeID` INT, IN `FacultyID` INT ) NO SQL @@ -277,7 +277,7 @@ BEGIN specializations.FacultyID AS 'FacultyID' FROM `study_groups` INNER JOIN `specializations` ON specializations.ID = study_groups.SpecializationID - WHERE study_groups.Grade = Grade AND + WHERE study_groups.GradeID = GradeID AND specializations.FacultyID = FacultyID ORDER BY study_groups.GroupNum ASC; END // @@ -293,11 +293,14 @@ BEGIN students.FirstName AS 'StudentFirst', students.SecondName AS 'StudentSecond', students.AccountID AS 'StudentAccID', - study_groups.ID AS 'GroupID', - study_groups.Grade AS 'GroupGrade', - study_groups.GroupNum AS 'GroupNum' + study_groups.ID AS 'GroupID', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', + study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID + INNER JOIN `grades` ON study_groups.GradeID = grades.ID WHERE students.StudyGroupID = StudyGroupID ORDER BY students.LastName ASC, students.FirstName ASC, students.SecondName ASC; @@ -315,10 +318,13 @@ BEGIN students.SecondName AS 'StudentSecond', students.AccountID AS 'StudentAccID', study_groups.ID AS 'GroupID', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON study_groups.ID = students.StudyGroupID + INNER JOIN `grades` ON study_groups.GradeID = grades.ID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID WHERE specializations.FacultyID = FacultyID ORDER BY students.LastName ASC, students.FirstName ASC, students.SecondName ASC; @@ -388,7 +394,9 @@ CREATE PROCEDURE `GetGroupsForDiscipline` ( IN `DisciplineID` INT ) BEGIN SELECT disciplines_groups.ID AS 'DiscGroupID', study_groups.ID AS 'GroupID', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum', study_groups.Name AS 'GroupName', specializations.ID AS 'SpecID', @@ -397,15 +405,16 @@ BEGIN FROM `disciplines_groups` INNER JOIN `study_groups` ON study_groups.ID = disciplines_groups.StudyGroupID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID + INNER JOIN `grades` ON study_groups.GradeID = grades.ID WHERE disciplines_groups.DisciplineID = DisciplineID - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC; END // DROP PROCEDURE IF EXISTS GetStudentsByGrade// -CREATE PROCEDURE `GetStudentsByGrade` ( IN `Grade` INT, +CREATE PROCEDURE `GetStudentsByGrade` ( IN `GradeID` INT, IN `FacultyID` INT ) NO SQL BEGIN @@ -415,13 +424,15 @@ BEGIN students.SecondName AS 'StudentSecond', students.AccountID AS 'StudentAccID', study_groups.ID AS 'GroupID', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum', disciplines_students.Type AS 'Type' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID - WHERE study_groups.Grade = Grade AND + WHERE study_groups.GradeID = GradeID AND specializations.FacultyID = FacultyID ORDER BY students.LastName ASC, students.FirstName ASC, students.SecondName ASC; @@ -514,7 +525,9 @@ BEGIN students.FirstName AS 'First', students.SecondName AS 'Second', study_groups.ID AS 'GroupID', - study_groups.Grade AS 'StudentGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'StudentGrade', + grades.Degree AS 'StudentDegree', study_groups.GroupNum AS 'GroupNum', study_groups.Name AS 'GroupName', specializations.ID AS 'SpecID', @@ -735,7 +748,7 @@ DROP FUNCTION IF EXISTS CreateStudent// CREATE FUNCTION `CreateStudent`( `Last` VARCHAR(30) CHARSET utf8, `First` VARCHAR(30) CHARSET utf8, `Second` VARCHAR(30) CHARSET utf8, - `Grade` INT, + `GradeID` INT, `GroupN` INT, `FacultyID` INT, `Code` VARCHAR(40) CHARSET utf8 @@ -748,7 +761,7 @@ BEGIN INTO StudyGroupID FROM `study_groups` INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID - WHERE study_groups.Grade = Grade AND + WHERE study_groups.GradeID = GradeID AND study_groups.GroupNum = GroupN AND specializations.FacultyID = FacultyID LIMIT 1; @@ -963,7 +976,7 @@ END // DROP PROCEDURE IF EXISTS SearchStudents// -CREATE PROCEDURE `SearchStudents` ( IN `Grade` INT, +CREATE PROCEDURE `SearchStudents` ( IN `GradeID` INT, IN `GroupN` INT, IN `FacultyID` INT, IN `Last` VARCHAR(30) CHARSET utf8, @@ -976,18 +989,21 @@ BEGIN students.LastName AS 'StudentLast', students.FirstName AS 'StudentFirst', students.SecondName AS 'StudentSecond', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID - WHERE ( Grade = 0 OR study_groups.Grade = Grade) AND + INNER JOIN `grades` ON study_groups.GradeID = GradeID + WHERE ( GradeID = 0 OR study_groups.GradeID = GradeID) AND ( GroupN = 0 OR study_groups.GroupNum = GroupN) AND ( FacultyID = 0 OR specializations.FacultyID = FacultyID) AND ( students.LastName LIKE CONCAT(Last,"%") ) AND ( students.FirstName LIKE CONCAT(First,"%") ) AND ( students.SecondName LIKE CONCAT(Second,"%") ) - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC; END // @@ -997,7 +1013,7 @@ END // DROP PROCEDURE IF EXISTS SearchStudentsNew// -CREATE PROCEDURE `SearchStudentsNew` ( IN `Grade` INT, +CREATE PROCEDURE `SearchStudentsNew` ( IN `GradeID` INT, IN `GroupN` INT, IN `FacultyID` INT, IN `Last` VARCHAR(30) CHARSET utf8, @@ -1011,16 +1027,19 @@ BEGIN students.LastName AS 'StudentLast', students.FirstName AS 'StudentFirst', students.SecondName AS 'StudentSecond', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID INNER JOIN `specializations` ON study_groups.SpecializationID = specializations.ID + INNER JOIN `grades` ON study_groups.GradeID = GradeID LEFT JOIN `disciplines_students` ON students.ID = disciplines_students.StudentID AND DisciplineID = disciplines_students.DisciplineID LEFT JOIN `disciplines_groups` ON disciplines_groups.StudyGroupID = study_groups.ID AND DisciplineID = disciplines_groups.DisciplineID - WHERE ( Grade = 0 OR study_groups.Grade = Grade) AND + WHERE ( GradeID = 0 OR study_groups.GradeID = GradeID) AND ( GroupN = 0 OR study_groups.GroupNum = GroupN) AND ( FacultyID = 0 OR specializations.FacultyID = FacultyID) AND ( students.LastName LIKE CONCAT(Last,"%") ) AND @@ -1030,19 +1049,19 @@ BEGIN ( disciplines_groups.ID IS NULL AND disciplines_students.Type IS NULL ) ) - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC; END // DROP PROCEDURE IF EXISTS getStudentsNotAttendingDiscipline// -CREATE PROCEDURE `getStudentsNotAttendingDiscipline` ( IN `Grade` INT, - IN `StudyGroupID` INT, - IN `FacultyID` INT, - IN `Last` VARCHAR(30) CHARSET utf8, - IN `First` VARCHAR(30) CHARSET utf8, - IN `Second` VARCHAR(30) CHARSET utf8, - IN `DisciplineID` INT +CREATE PROCEDURE `getStudentsNotAttendingDiscipline` ( IN `GradeID` INT, + IN `StudyGroupID` INT, + IN `FacultyID` INT, + IN `Last` VARCHAR(30) CHARSET utf8, + IN `First` VARCHAR(30) CHARSET utf8, + IN `Second` VARCHAR(30) CHARSET utf8, + IN `DisciplineID` INT ) NO SQL BEGIN @@ -1051,7 +1070,9 @@ BEGIN students.FirstName AS 'StudentFirst', students.SecondName AS 'StudentSecond', study_groups.ID AS 'GroupID', - study_groups.Grade AS 'GroupGrade', + grades.ID AS 'GradeID', + grades.Grade AS 'GroupGrade', + grades.Degree AS 'GroupDegree', study_groups.GroupNum AS 'GroupNum' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID @@ -1060,7 +1081,7 @@ BEGIN DisciplineID = disciplines_students.DisciplineID LEFT JOIN `disciplines_groups` ON disciplines_groups.StudyGroupID = study_groups.ID AND DisciplineID = disciplines_groups.DisciplineID - WHERE ( Grade = 0 OR study_groups.Grade = Grade) AND + WHERE ( GradeID = 0 OR study_groups.GradeID = GradeID) AND ( StudyGroupID = 0 OR study_groups.ID = StudyGroupID) AND ( FacultyID = 0 OR specializations.FacultyID = FacultyID) AND ( students.LastName LIKE CONCAT(Last,"%") ) AND @@ -1070,7 +1091,7 @@ BEGIN ( disciplines_groups.ID IS NULL AND disciplines_students.Type IS NULL ) ) - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC; END // @@ -1109,7 +1130,9 @@ CREATE PROCEDURE `GetDisciplineInfoByID`( IN `DiscID` INT ) BEGIN -- TODO: Inline InternalCheckRate SELECT disciplines.AuthorID, - disciplines.Grade AS 'DisciplineGrade', + disciplines.GradeID AS 'DisciplineGradeID', + grades.Grade AS 'DisciplineGrade', + grades.Degree AS 'DisciplineDegree', disciplines.ExamType, disciplines.LectionCount, disciplines.PracticeCount, @@ -1125,7 +1148,8 @@ BEGIN INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID INNER JOIN `faculties` ON faculties.ID = disciplines.FacultyID INNER JOIN `teachers` ON disciplines.AuthorID = teachers.ID - INNER JOIN `departments` ON departments.ID = teachers.DepartmentID + INNER JOIN `departments` ON departments.ID = teachers.DepartmentID + INNER JOIN `grades` ON grades.ID = disciplines.GradeID WHERE disciplines.ID = DiscID; END // @@ -1188,13 +1212,17 @@ BEGIN SELECT DISTINCT disciplines.ID AS 'DisciplineID', disciplines.ExamType AS 'DisciplineType', - disciplines.Grade AS 'DisciplineGrade', + disciplines.GradeID AS 'DisciplineGradeID', + grades.Grade AS 'DisciplineGrade', + grades.Degree AS 'DisciplineDegree', subjects.ID AS 'SubjectID', subjects.Name AS 'SubjectName', disciplines_teachers.ID AS 'DisciplineTeacherID', study_groups.ID AS 'StudyGroupID', study_groups.GroupNum AS 'StudyGroupNum', - study_groups.Grade AS 'StudyGroupGrade', + grades2.ID AS 'StudyGroupGradeID', + grades2.Grade AS 'StudyGroupGrade', + grades2.Degree AS 'StudyGroupDegree', study_groups.Name AS 'StudyGroupName', (TeacherID = disciplines.AuthorID) AS 'isAuthor', (modules.ID IS NOT NULL) AS 'isMapCreated' @@ -1202,13 +1230,15 @@ BEGIN FROM `disciplines_groups` RIGHT JOIN `disciplines` ON disciplines_groups.DisciplineID = disciplines.ID OR disciplines_groups.DisciplineID IS NULL + INNER JOIN `grades` ON grades.ID = disciplines.GradeID INNER JOIN `disciplines_teachers` ON disciplines.ID = disciplines_teachers.DisciplineID AND disciplines_teachers.TeacherID = TeacherID INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID LEFT JOIN `study_groups` ON study_groups.ID = disciplines_groups.StudyGroupID LEFT JOIN `modules` ON disciplines.ID = modules.DisciplineID + LEFT JOIN `grades` grades2 ON grades2.ID = study_groups.GradeID WHERE disciplines.SemesterID = semID - ORDER BY disciplines.Grade ASC, + ORDER BY grades.ID ASC, subjects.Name ASC, study_groups.GroupNum ASC; END // @@ -1238,18 +1268,21 @@ BEGIN students.FirstName, students.SecondName, study_groups.ID AS 'GroupID', - study_groups.Grade, + grades.ID AS 'GradeID', + grades.Grade, + grades.Degree AS 'Degree', study_groups.GroupNum, disciplines_students.Type AS 'Type' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID + INNER JOIN `grades` ON grades.ID = study_groups.GradeID 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_groups.StudyGroupID IS NOT NULL OR disciplines_students.StudentID IS NOT NULL - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC, students.LastName ASC, students.FirstName ASC, students.SecondName ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC, students.LastName ASC, students.FirstName ASC, students.SecondName ASC; ELSE SELECT NULL AS 'StudentID', @@ -1502,11 +1535,14 @@ BEGIN students.LastName, students.FirstName, students.SecondName, - study_groups.Grade, + grades.ID AS 'GradeID', + grades.Grade, + grades.Degree AS 'Degree', study_groups.GroupNum, (disciplines_students.Type IS NOT NULL OR disciplines_students.Type = 'attach') AS 'isAttached' FROM `students` INNER JOIN `study_groups` ON students.StudyGroupID = study_groups.ID + INNER JOIN `grades` ON grades.ID = study_groups.GradeID 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 @@ -1515,7 +1551,7 @@ BEGIN ( ( disciplines_students.Type IS NULL OR disciplines_students.Type != 'detach' ) AND disciplines_groups.StudyGroupID IS NOT NULL ) - ORDER BY study_groups.Grade ASC, study_groups.GroupNum ASC, students.LastName ASC, students.FirstName ASC, students.SecondName ASC; + ORDER BY grades.ID ASC, study_groups.GroupNum ASC, students.LastName ASC, students.FirstName ASC, students.SecondName ASC; ELSE SELECT NULL AS 'StudentID', NULL AS 'LastName', @@ -1608,7 +1644,7 @@ END // DROP FUNCTION IF EXISTS AddDiscipline// CREATE FUNCTION `AddDiscipline` ( `TeacherID` INT, - `Grade` INT, + `GradeID` INT, `SubjectID` INT, `ExamType` VARCHAR(30), `LectionCount` INT, @@ -1620,10 +1656,16 @@ BEGIN DECLARE semID, checker INT; SET semID = GetCurSemesterID(); - IF NOT (Grade > 0) THEN + SELECT grades.ID + INTO checker + FROM `grades` + WHERE grades.ID = GradeID + LIMIT 1; + IF NOT (checker > 0) THEN RETURN -1; END IF; + SET checker = -1; SELECT faculties.ID INTO checker FROM `faculties` @@ -1646,14 +1688,14 @@ BEGIN INSERT INTO `disciplines` ( disciplines.AuthorID, - disciplines.Grade, + disciplines.GradeID, disciplines.SubjectID, disciplines.ExamType, disciplines.LectionCount, disciplines.PracticeCount, disciplines.SemesterID, disciplines.FacultyID ) - VALUES ( TeacherID, Grade, SubjectID, ExamType, LectionCount, PracticeCount, semID, FacultyID ); + VALUES ( TeacherID, GradeID, SubjectID, ExamType, LectionCount, PracticeCount, semID, FacultyID ); -- RETURN ( SELECT disciplines.ID -- FROM `disciplines` @@ -1719,18 +1761,22 @@ END // DROP FUNCTION IF EXISTS ChangeDisciplineGrade// CREATE FUNCTION `ChangeDisciplineGrade` ( `TeacherID` INT, `DisciplineID` INT, - `Grade` INT + `GradeID` INT ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; - - -- TODO: Grade - IF NOT (Grade > 0) THEN + SELECT grades.ID + INTO checker + FROM `grades` + WHERE grades.ID = GradeID + LIMIT 1; + IF NOT (checker > 0) THEN RETURN -1; - END IF; + END IF; + SET checker = -1; SELECT disciplines.ID INTO checker FROM `disciplines` @@ -1746,13 +1792,13 @@ BEGIN RETURN -1; END IF; - SELECT disciplines.Grade + SELECT disciplines.GradeID INTO checker FROM `disciplines` WHERE disciplines.ID = DisciplineID LIMIT 1; - IF checker != Grade THEN + IF checker != GradeID THEN DELETE FROM `disciplines_groups` WHERE disciplines_groups.DisciplineID = DisciplineID; @@ -1762,7 +1808,7 @@ BEGIN UPDATE `disciplines` - SET disciplines.Grade = Grade + SET disciplines.GradeID = GradeID WHERE disciplines.ID = DisciplineID; RETURN 0; diff --git a/db/Structure.sql b/db/Structure.sql index b669520c6..e8ae646b8 100644 --- a/db/Structure.sql +++ b/db/Structure.sql @@ -78,7 +78,7 @@ CREATE TABLE IF NOT EXISTS `departments` ( CREATE TABLE IF NOT EXISTS `disciplines` ( `ID` int(11) NOT NULL AUTO_INCREMENT, - `Grade` int(11) NOT NULL, + `GradeID` int(11) NOT NULL, `SubjectID` int(11) NOT NULL, `AuthorID` int(11) NOT NULL, `ExamType` enum('exam','credit') NOT NULL, @@ -87,6 +87,7 @@ CREATE TABLE IF NOT EXISTS `disciplines` ( `LectionCount` int(11) NOT NULL DEFAULT '0', `FacultyID` int(11) NOT NULL, PRIMARY KEY (`ID`), + KEY `GradeID` (`GradeID`), KEY `SubjectID` (`SubjectID`), KEY `TeacherID` (`AuthorID`), KEY `SemesterID` (`SemesterID`), @@ -309,12 +310,13 @@ CREATE TABLE IF NOT EXISTS `students` ( CREATE TABLE IF NOT EXISTS `study_groups` ( `ID` int(11) NOT NULL AUTO_INCREMENT, - `Grade` int(11) NOT NULL, + `GradeID` int(11) NOT NULL, `GroupNum` int(11) NOT NULL, `SpecializationID` int(11) NOT NULL, `Name` varchar(50) DEFAULT NULL, PRIMARY KEY (`ID`), - UNIQUE KEY `Grade` (`Grade`,`GroupNum`,`SpecializationID`), + UNIQUE KEY `GradeID_2` (`GradeID`,`GroupNum`,`SpecializationID`), + KEY `GradeID` (`GradeID`), KEY `SpecializtionID` (`SpecializationID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -351,6 +353,24 @@ CREATE TABLE IF NOT EXISTS `submodules` ( KEY `ModuleID` (`ModuleID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +-- -------------------------------------------------------- + +-- +-- Структура таблицы `grades` +-- + +CREATE TABLE IF NOT EXISTS `grades` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `Grade` int(11) NOT NULL, + `Degree` enum('bachelor','master','specialist') NOT NULL, + PRIMARY KEY (`ID`), + UNIQUE KEY `Grade_2` (`Grade`,`Degree`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + -- -------------------------------------------------------- -- @@ -443,7 +463,8 @@ ALTER TABLE `disciplines` ADD CONSTRAINT `disciplines_ibfk_2` FOREIGN KEY (`SubjectID`) REFERENCES `subjects` (`ID`), ADD CONSTRAINT `disciplines_ibfk_4` FOREIGN KEY (`SemesterID`) REFERENCES `semesters` (`ID`), ADD CONSTRAINT `disciplines_ibfk_5` FOREIGN KEY (`AuthorID`) REFERENCES `teachers` (`ID`), - ADD CONSTRAINT `disciplines_ibfk_6` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`); + ADD CONSTRAINT `disciplines_ibfk_6` FOREIGN KEY (`FacultyID`) REFERENCES `faculties` (`ID`), + ADD CONSTRAINT `disciplines_ibfk_7` FOREIGN KEY (`GradeID`) REFERENCES `grades` (`ID`); -- -- Ограничения внешнего ключа таблицы `disciplines_groups` @@ -510,7 +531,8 @@ ALTER TABLE `students` -- Ограничения внешнего ключа таблицы `study_groups` -- ALTER TABLE `study_groups` - ADD CONSTRAINT `study_groups_ibfk_4` FOREIGN KEY (`SpecializationID`) REFERENCES `specializations` (`ID`); + ADD CONSTRAINT `study_groups_ibfk_4` FOREIGN KEY (`SpecializationID`) REFERENCES `specializations` (`ID`), + ADD CONSTRAINT `study_groups_ibfk_5` FOREIGN KEY (`GradeID`) REFERENCES `grades` (`ID`); -- -- Ограничения внешнего ключа таблицы `submodules` -- GitLab