Skip to content
Snippets Groups Projects
Commit 12d64ad0 authored by Роман Штейнберг's avatar Роман Штейнберг Committed by Artem Konenko
Browse files

ADD: record books usage in db tables

parent 62232a9a
Branches
Tags
No related merge requests found
START TRANSACTION ;
-- --------------------------------------------------------
# rating_table
# 1. создать поле RecordBookID и связи для него
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
ALTER TABLE `rating_table`
ADD COLUMN `RecordBookID` int(11),
DROP FOREIGN KEY `rating_table_ibfk_1`,
ADD CONSTRAINT `rating_table_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UPDATE rating_table As target,
(SELECT students.ID As StudentID, record_books.ID As RecordBookID FROM `students`
INNER JOIN record_books ON students.RecordBookID = record_books.ID) As matching
SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID;
ALTER TABLE `rating_table`
DROP COLUMN `StudentID`;
-- --------------------------------------------------------
# logs_rating
# 1. создать поле RecordBookID и связи для него
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
ALTER TABLE `logs_rating`
ADD COLUMN `RecordBookID` int(11),
DROP FOREIGN KEY `logs_rating_ibfk_1`,
ADD CONSTRAINT `logs_rating_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UPDATE logs_rating As target,
(SELECT students.ID As StudentID, record_books.ID As RecordBookID FROM `students`
INNER JOIN record_books ON students.RecordBookID = record_books.ID) As matching
SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID;
ALTER TABLE `logs_rating`
DROP COLUMN `StudentID`;
-- --------------------------------------------------------
# discipline_students
# 1. создать поле RecordBookID и связи для него
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
ALTER TABLE `discipline_students`
ADD COLUMN `RecordBookID` int(11),
DROP FOREIGN KEY `disciplines_students_ibfk_2`,
ADD CONSTRAINT `disciplines_students_ibfk_2` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UPDATE discipline_students As target,
(SELECT students.ID As StudentID, record_books.ID As RecordBookID FROM `students`
INNER JOIN record_books ON students.RecordBookID = record_books.ID) As matching
SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID;
ALTER TABLE `discipline_students`
DROP COLUMN `StudentID`;
-- --------------------------------------------------------
# logs_bind_students
# 1. создать поле RecordBookID и связи для него
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
ALTER TABLE `logs_binds_students`
ADD COLUMN `RecordBookID` int(11),
DROP FOREIGN KEY `logs_binds_students_ibfk_3`,
ADD CONSTRAINT `logs_binds_students_ibfk_3` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UPDATE logs_binds_students As target,
(SELECT students.ID As StudentID, record_books.ID As RecordBookID FROM `students`
INNER JOIN record_books ON students.RecordBookID = record_books.ID) As matching
SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID;
ALTER TABLE `logs_binds_students`
DROP COLUMN `StudentID`;
-- --------------------------------------------------------
# groups_students
# 1. создать поле RecordBookID и связи для него
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
ALTER TABLE `students_groups`
ADD COLUMN `RecordBookID` int(11),
DROP FOREIGN KEY `students_groups_ibfk_1`,
ADD CONSTRAINT `students_groups_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UPDATE students_groups As target,
(SELECT students.ID As StudentID, record_books.ID As RecordBookID FROM `students`
INNER JOIN record_books ON students.RecordBookID = record_books.ID) As matching
SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID;
ALTER TABLE `students_groups`
DROP COLUMN `StudentID`;
COMMIT ;
\ No newline at end of file
......@@ -2,26 +2,6 @@ START TRANSACTION ;
-- --------------------------------------------------------
--
-- Структура таблицы `students_status`
--
CREATE TABLE IF NOT EXISTS `students_status` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Status` varchar(40) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Status` (`Status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Структура таблицы `students_levels`
--
CREATE TABLE IF NOT EXISTS `students_levels` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`LevelName` varchar(40) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `LevelName` (`LevelName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Структура таблицы `study_form`
--
......@@ -40,15 +20,14 @@ CREATE TABLE IF NOT EXISTS `record_books` (
`StudentID` int(11) NOT NULL,
`ExternalID` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`PlanID` int(11) NOT NULL,
`Status` int(11) NOT NULL,
# `Speciality` int (11) NOT NULL, -- in specializations
# `Level` int(11) NOT NULL, -- in grades
# `Form` int(11) NOT NULL, -- in study_groups
# `Subdivision` int(11) NOT NULL, -- in study_groups
# `Grade` int(11) NOT NULL, -- in study_groups
# `Group` int(11) NOT NULL, -- in study_groups
PRIMARY KEY (`ID`),
UNIQUE KEY `ExternalID` (`ExternalID`),
KEY `StudentID` (`StudentID`),
KEY `PlanID` (`PlanID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
......@@ -91,12 +70,6 @@ CREATE TABLE IF NOT EXISTS `disciplines_exam_type` (
# DROP KEY `StudentID`,
# DROP KEY `StudentID_2`;
#
ALTER TABLE `students_groups`
ADD COLUMN `RecordBookID` int(11) DEFAULT NULL AFTER `StudentID`;
#
ALTER TABLE `students_groups`
ADD CONSTRAINT `students_groups_ibfk_4` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`),
ADD UNIQUE KEY `StudentID_3`(`RecordBookID`, `SemesterID`);
###
#
......
START TRANSACTION ;
-- --------------------------------------------------------
# Добавить колонку Degree в зачетки для упрощения кода миграции
ALTER TABLE `record_books`
ADD COLUMN `Degree` VARCHAR(10),
ADD KEY (`Degree`);
-- --------------------------------------------------------
# generate fake record books
# Заполнить таблицу record_books фейковыми значениями следующего вида:
# fake-<degree>-<studentId>
# <degree> - уровень подготовки (b - бакалавр, m - магистр)
# <studentId> - идентификатор студента
DELIMITER //
CREATE PROCEDURE RecordBooks_Fill()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE vStudentID INT;
DECLARE vDegree VARCHAR(10);
DECLARE vRecordBookNum VARCHAR(50);
DECLARE cur CURSOR FOR
SELECT view_students.StudentID AS StudentID, view_students.Degree AS Degree FROM `view_students`
GROUP BY view_students.Degree, view_students.StudentID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO vStudentID, vDegree;
IF done THEN
LEAVE read_loop;
END IF;
SET vRecordBookNum = REPLACE(REPLACE("fake-<degree>-<studentid>", "<degree>", vDegree),
"<studentid>", vStudentID);
INSERT `record_books` (`StudentID`, `ExternalID`, `PlanID`, `Degree`)
VALUES (vStudentID, vRecordBookNum, 0, vDegree);
END LOOP;
CLOSE cur;
END //
DELIMITER ;
CALL RecordBooks_Fill();
DROP PROCEDURE RecordBooks_Fill;
COMMIT ;
START TRANSACTION;
-- --------------------------------------------------------
# groups_students
# 1. создать поле RecordBookID
# 2. заполнить поле RecordBookID
# Удаление старых связей и создание новых после всех использований этой таблицы
ALTER TABLE `students_groups`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
COMMIT;
START TRANSACTION;
UPDATE `students_groups`
INNER JOIN study_groups on study_groups.ID = students_groups.GroupID
INNER JOIN grades on grades.ID = study_groups.GradeID
INNER JOIN record_books on
record_books.Degree = grades.Degree and
record_books.StudentID = students_groups.StudentID
SET students_groups.RecordBookID = record_books.ID;
COMMIT;
#
# -- --------------------------------------------------------
# # logs_bind_students
# # 1. создать поле RecordBookID и связи для него
# # 2. заполнить поле RecordBookID
# # 3. удалить все связи поля StudentID и потом само поле
#
# ALTER TABLE `logs_binds_students`
# ADD COLUMN `RecordBookID` int(11),
# DROP INDEX `StudentID`,
# ADD CONSTRAINT `logs_binds_students_ibfk_3` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
#
# UPDATE logs_binds_students AS target,
# (SELECT MIN(view_recordbook_for_submodule.StudentID) AS StudentID,
# MIN(view_recordbook_for_submodule.RecordBookID) AS RecordBookID,
# view_recordbook_for_submodule.DisciplineID
# FROM view_recordbook_for_submodule
# GROUP BY view_recordbook_for_submodule.DisciplineID) AS matching
# SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID
# AND target.DisciplineID = matching.DisciplineID;
#
# ALTER TABLE `logs_binds_students`
# DROP COLUMN `StudentID`;
#
# -- --------------------------------------------------------
# # groups_students
# # 1. создать поле RecordBookID и связи для него
# # 2. заполнить поле RecordBookID
# # 3. удалить все связи поля StudentID и потом само поле
#
# ALTER TABLE `students_groups`
# ADD COLUMN `RecordBookID` int(11),
# DROP INDEX `StudentID`,
# DROP INDEX `StudentID_2`,
# ADD CONSTRAINT `students_groups_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`),
# ADD UNIQUE `SemesterID_RecordBookID` (`SemesterID`, `RecordBookID`);
#
#
# UPDATE students_groups AS target,
# (SELECT DISTINCT students_groups.StudentID AS StudentID,
# record_books.ID AS RecordBookID,
# groups.ID AS GroupID
# FROM `students_groups`
# INNER JOIN groups ON groups.ID = students_groups.GroupID,
# INNER JOIN record_books ON record_books.StudentID = students_groups.StudentID
# AND record_books.Degree = groups.Degree) AS matching
# SET target.RecordBookID = matching.RecordBookID WHERE target.StudentID = matching.StudentID
# AND target.GroupID = matching.GroupID;
#
# ALTER TABLE `students_groups`
# DROP COLUMN `StudentID`;
#
# # Удалить временную колонку Degree в зачетках
# ALTER TABLE `record_books`
# DROP COLUMN `Degree`;
#
# # Удалить представление
# DROP VIEW view_recordbook_for_submodule;
START TRANSACTION ;
-- --------------------------------------------------------
# rating_table
# 1. создать поле RecordBookID
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для RecordBookID
ALTER TABLE `rating_table`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
COMMIT ;
LOCK TABLES submodules WRITE, modules READ, disciplines READ, students_groups READ, study_groups READ,
grades READ, record_books WRITE, rating_table WRITE;
UPDATE rating_table
INNER JOIN submodules on submodules.ID = rating_table.SubmoduleID
INNER JOIN modules on modules.ID = submodules.ModuleID
INNER JOIN disciplines on disciplines.ID = modules.DisciplineID
INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
AND students_groups.StudentID = rating_table.StudentID
SET rating_table.RecordBookID = students_groups.RecordBookID;
ALTER TABLE `rating_table`
DROP FOREIGN KEY `rating_table_ibfk_1`,
DROP INDEX `PRIMARY`,
DROP INDEX `StudentID`,
DROP COLUMN `StudentID`;
ALTER TABLE `rating_table`
ADD PRIMARY KEY (`RecordBookID`, `SubmoduleID`),
ADD CONSTRAINT `rating_table_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UNLOCK TABLES;
\ No newline at end of file
START TRANSACTION;
# exam_period_options
# 1. создать поле RecordBookID
ALTER TABLE `exam_period_options`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
# discipline_students
# 1. создать поле RecordBookID
ALTER TABLE `disciplines_students`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
COMMIT;
LOCK TABLES exam_period_options WRITE, disciplines_students WRITE, submodules WRITE, modules READ,
disciplines WRITE, students_groups READ, record_books WRITE;
-- --------------------------------------------------------
# exam_period_options
# 1. создать поле RecordBookID - done
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для поля RecordBookID
UPDATE exam_period_options
INNER JOIN submodules on submodules.ID = exam_period_options.SubmoduleID
INNER JOIN modules on modules.ID = submodules.ModuleID
INNER JOIN disciplines on disciplines.ID = modules.DisciplineID
INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
AND students_groups.StudentID = exam_period_options.StudentID
SET exam_period_options.RecordBookID = students_groups.RecordBookID;
ALTER TABLE `exam_period_options`
DROP FOREIGN KEY `exam_period_options_ibfk_2`,
DROP INDEX `StudentID`,
DROP INDEX `StudentID_2`,
DROP INDEX `StudentID_3`,
DROP FOREIGN KEY `exam_period_options_ibfk_1`,
DROP INDEX `SubmoduleID`,
DROP INDEX `SubmoduleID_2`,
DROP COLUMN `StudentID`;
ALTER TABLE `exam_period_options`
ADD KEY (`SubmoduleID`),
ADD CONSTRAINT `Unique` UNIQUE (`RecordBookID`, `SubmoduleID`),
ADD CONSTRAINT `exam_period_options_ibfk_1` FOREIGN KEY (`SubmoduleID`) REFERENCES `submodules` (`ID`),
ADD CONSTRAINT `exam_period_options_ibfk_2` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
-- --------------------------------------------------------
# discipline_students
# 1. создать поле RecordBookID - done
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для поля RecordBookID
UPDATE `disciplines_students`
INNER JOIN disciplines on disciplines.ID = disciplines_students.DisciplineID
INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
AND students_groups.StudentID = disciplines_students.StudentID
SET disciplines_students.RecordBookID = students_groups.RecordBookID;
ALTER TABLE `disciplines_students`
DROP FOREIGN KEY `disciplines_students_ibfk_2`,
DROP INDEX DisciplineID_2,
DROP INDEX `StudentID`,
DROP COLUMN `StudentID`;
ALTER TABLE `disciplines_students`
ADD CONSTRAINT `Unique` UNIQUE (`RecordBookID`, `DisciplineID`),
ADD CONSTRAINT `disciplines_students_ibfk_2` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
UNLOCK TABLES ;
\ No newline at end of file
LOCK TABLES logs_binds_students WRITE, submodules READ, modules READ,
disciplines READ, students_groups READ, record_books WRITE;
-- --------------------------------------------------------
# logs_bind_students
# 1. создать поле RecordBookID
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для поля RecordBookID
ALTER TABLE `logs_binds_students`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
UPDATE `logs_binds_students`
INNER JOIN disciplines on disciplines.ID = logs_binds_students.DisciplineID
INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
AND students_groups.StudentID = logs_binds_students.StudentID
SET logs_binds_students.RecordBookID = students_groups.RecordBookID;
ALTER TABLE `logs_binds_students`
DROP FOREIGN KEY `logs_binds_students_ibfk_3`,
DROP INDEX `StudentID`,
DROP COLUMN `StudentID`;
ALTER TABLE `logs_binds_students`
ADD CONSTRAINT `logs_binds_students_ibfk_3` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
#
# SELECT rating_table.StudentID,
# rating_table.RecordBookID,
# rating_table.TeacherID,
# rating_table.SubmoduleID,
# record_books.ID
# FROM rating_table
# LEFT JOIN record_books on rating_table.RecordBookID = record_books.ID
# Where record_books.ID IS NULL;
#
# SELECT rating_table.StudentID, record_books.ID FROM rating_table
# INNER JOIN submodules on submodules.ID = rating_table.SubmoduleID
# INNER JOIN modules on modules.ID = submodules.ModuleID
# INNER JOIN disciplines on disciplines.ID = modules.DisciplineID
# INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
# AND students_groups.StudentID = rating_table.StudentID
# INNER JOIN study_groups on study_groups.ID = students_groups.GroupID
# INNER JOIN grades on grades.ID = study_groups.GradeID
# INNER JOIN record_books on
# record_books.Degree = grades.Degree and
# record_books.StudentID = rating_table.StudentID
# WHERE record_books.ID IS NULL;
#
# SELECT * FROM record_books WHERE record_books.StudentID = 182;
#
# SELECT * FROM view_students WHERE view_students.StudentID = 182;
UNLOCK TABLES;
START TRANSACTION;
# logs_rating
# 1. создать поле RecordBookID и связи для него
ALTER TABLE `logs_rating`
ADD COLUMN `RecordBookID` int(11),
ADD KEY (`RecordBookID`);
COMMIT;
# LOCK TABLES logs_rating WRITE, submodules READ, modules READ, disciplines READ, students_groups READ, record_books WRITE;
START TRANSACTION;
-- --------------------------------------------------------
# logs_rating
# 1. создать поле RecordBookID - done
# 2. заполнить поле RecordBookID
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для поля RecordBookID
UPDATE `logs_rating`
INNER JOIN submodules on submodules.ID = logs_rating.SubmoduleID
INNER JOIN modules on modules.ID = submodules.ModuleID
INNER JOIN disciplines on disciplines.ID = modules.DisciplineID
INNER JOIN students_groups on students_groups.SemesterID = disciplines.SemesterID
AND students_groups.StudentID = logs_rating.StudentID
SET logs_rating.RecordBookID = students_groups.RecordBookID;
ALTER TABLE `logs_rating`
DROP FOREIGN KEY `logs_rating_ibfk_1`,
DROP INDEX `StudentID`,
DROP COLUMN `StudentID`;
ALTER TABLE `logs_rating`
ADD CONSTRAINT `logs_rating_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`);
# UNLOCK TABLES ;
COMMIT;
\ No newline at end of file
START TRANSACTION ;
# 3. удалить все связи поля StudentID и потом само поле
# 4. создать связи для поля RecordBookID
ALTER TABLE `students_groups`
DROP INDEX `StudentID`,
DROP INDEX `StudentID_2`,
DROP COLUMN `StudentID`;
ALTER TABLE `students_groups`
ADD CONSTRAINT `students_groups_ibfk_1` FOREIGN KEY (`RecordBookID`) REFERENCES `record_books` (`ID`),
ADD UNIQUE `SemesterID_RecordBookID` (`SemesterID`, `RecordBookID`);
# Удалить временную колонку Degree в зачетках
ALTER TABLE `record_books`
DROP INDEX `Degree`,
DROP COLUMN `Degree`;
COMMIT ;
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment