Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Проектируем базу. Вопрос более теоретический, чем практический. Есть таблица студентов. Они могут перемещаться между группами на оснавании приказов, а также могут отчисляться/заканчивать и восстанавливаться в любой группе. Соответственно для этого есть таблица групп. Приказ на перемещение формируется для множество студентов, а также требуется, чтобы приказ можно было "откатить", а при случае снова активировать("накатить"). Для этого формирую таблицу приказов и еще одну таблицу для списка студентов, входящих в приказ. При активации приказа(т.к. сказать формирование проводки) в зависимости от его типа формирую, либо обновляю строку перемещения в таблице перемещений. Таблица перемещений выглядит следующим образом: ID | Grp | StartDate | EndDate | IDorder1 | IDOrder2 ID - первичный ключ Grp - группа в которую перемещен студент StartDate - дата с которой он находится в этой группе EndDate - дата до которой он находится в этой группе IDOrder1 - на основании какого приказа он зачислен IDOrder2 - на основании чего выбыл Соответственно есть 3 типа приказов: 1 - на зачисление( формируют новую строку в таблице перемещений и заполняют поле StartDate, IDOrder1) 2 - на перемещение( проставляют IDOrder2 и EndDate в строке предыдущего перемещения и формируют как и в 1 случае ) 3 - на отчисление( проставляют IDOrder2 и EndDate в строке предыдущего перемещения ) Такая схема обеспечивает то, что на любую дату можно однозначно, без дополнительных вычислений узнать в какой группе находился студент из соотношения( StartDate<= Date <= EndDAte). Мой коллега однако не согласен с такой структурой и считает, что на каждый приказ должна быть заведена отдельная строка в таблице перемещений, а таблица студентов учавствующих в приказе вовсе не нужна, так как это дубляж данных. что можете посоветовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 07:57 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Избыточность данных, достоверность (однозначность) данных и оперативность (скорость доступа) данных противоречивые понятия. Избыточность ведет к увеличению объемов данных базы и возможно неоднозначности. Однако, приходится зачастую идти на это, дабы не ждать выпорлнение запроса часами. --Вместо того чтоб решить ваш спор, предлагаю свое решение :-). Таблицы (в скобках существенные поля). 1. Таблица приказов (номер, дата, тип приказа: отчисление, перемещение, зачисление) 2. Таблица приказов отчислений (ссылка на первую таб., группа отчисления) 3. Таблица приказов зачислений (ссылка на первую таб., группа зачисления) 4. Таблица приказов перемещение (ссылка на первую таб., группа зачисления, группа отчисления) Для каждой из табл. 2,3,4 таблица множества студентов приказа (таб. 5,6,7) {хотя таб. 1-4 можно реализовать в одной а 5-7 в другой} 8. Таблица состояния студента(дата, студент, группа: если отчислен то пусто) При "проведение(накате)" - добавляется в таб. 8 соотв записи При "откате" - удаляется из таб. 8 соотв записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 09:33 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Но тогда таблица 8 не будет иметь структуру, удобную для формирования отчета. Т.е. отчеты в большинстве своем смотрят на принадлежность стунта группе на заданную дату. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 09:41 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Я таки и не понял что предлагает ваш коллега. Знакома одна системка, реализующая документооборот деанатов. Коряво. Примерно следующая реализация таких передвижений: 1. Таблица приказов 2. Таблица пунктов приказов (ведь приказ может иметь пункты, если вы их к-л видели). Движения "делаются" именно пунктами. Пункты разных категорий, все в одной табличке. 3. Есть таблица "студент в пункте приказа". Служит для подготовки приказа, в д.с. методисткой и для того стобы можно было "достать" в базе п. приказа и посмотреть че там понаделано чьими-то корявыми ручками 4. Есть куча табличек вида "студент - группа", "студент - состояние" (состояние - это учится , акад. отпуск, повторное обучение, переведен на др. факультет, отчислен, абитура, "зачислен, но не в группе"), "студент - курс", "студент - стипендия", "студент - надбавка к стипендии", "студент - направление/специальность" и т.п. руковолители, дипл. работы, старостенье... Эти таблички похожи на ту, которую вы привели. Поверьте, группу и состояние лучше разделить по разным табличкам. Т.к. академ отпуск, группа и курс вещи независимые. А еще есть бюджет-контракт! 5. когда приказ с пунктами "регистрируется", т.е. получает дату и номер, в таблички из п.4 делаются соотв. записи. С откатами жопа, т.к. откатить можно п. приказа, за которым не было движений, аналогично с пунктами "во изменение",суть которых найти пункт, откатить его и проинсёртать свои записи. А юзеры откатить норовят не последние, а те что подревнее пункты. Заметьте, что приказ об отмене тоже может быть отменен, поэтому в вашей табличке движений не хватает 2х столбиков, чисто для удобства Ж-) По поводу удобства отчетов - это они по началу говорят что на любую дату, потом оказывается - нужны только актульные (последние) данные, а ваши таблички движений нужны для разборок полетов. В связи с чем все признаки студента (курс, группа, состояние etc) при регистрации приказа + ко всему записываются непосредственно в поля таблички студент. Работать приложение существенно быстрее будет, чем если искать по движениям на sysdate. Сам не понял чё написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 10:29 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
авторЯ таки и не понял что предлагает ваш коллега. Примерно тоже, что и вы Примерно следующая реализация таких передвижений: автор1. Таблица приказов 2. Таблица пунктов приказов (ведь приказ может иметь пункты, если вы их к-л видели). Движения "делаются" именно пунктами. Пункты разных категорий, все в одной табличке.Пусть будет проще - приказы должны быть одного типа(зачисление, отчисление, перевод) автор3. Есть таблица "студент в пункте приказа". Служит для подготовки приказа, в д.с. методисткой и для того стобы можно было "достать" в базе п. приказа и посмотреть че там понаделано чьими-то корявыми ручками Это предлагаю я, а коллега отвергает. автор4. Есть куча табличек вида "студент - группа", "студент - состояние" (состояние - это учится , акад. отпуск, повторное обучение, переведен на др. факультет, отчислен, абитура, "зачислен, но не в группе"), "студент - курс", "студент - стипендия", "студент - надбавка к стипендии", "студент - направление/специальность" и т.п. руковолители, дипл. работы, старостенье... Эти таблички похожи на ту, которую вы привели. Поверьте, группу и состояние лучше разделить по разным табличкам. Т.к. академ отпуск, группа и курс вещи независимые. А еще есть бюджет-контракт! Не понятен смысл вышесказанного. Я думаю, что таблица состояния это и есть таблица в которой есть №группы, дата с которой он числится, когда уходит из этой группы, а также номера приказов - оснований для его зачисления в эту группу и его отчисления оттуда. Если студент еще не закончил и не отчислен то ДатаКонца = NULL. И тогда есть актуальность на любую дату! Есть специальные группы отчисленных и ушедших в академ.отпуск, т.е. это все-равно группы, только специальные. В таблице групп есть соответствующее поле. автор5. когда приказ с пунктами "регистрируется", т.е. получает дату и номер, в таблички из п.4 делаются соотв. записи. С откатами жопа, т.к. откатить можно п. приказа, за которым не было движений, аналогично с пунктами "во изменение",суть которых найти пункт, откатить его и проинсёртать свои записи. А юзеры откатить норовят не последние, а те что подревнее пункты. Заметьте, что приказ об отмене тоже может быть отменен, поэтому в вашей табличке движений не хватает 2х столбиков, чисто для удобства Ж-) Отменить можно только последний приказ. О логировании "откатов", "накатов" можно подумать отдельно(например создать журнал операций с приказами) авторПо поводу удобства отчетов - это они по началу говорят что на любую дату, потом оказывается - нужны только актульные (последние) данные, а ваши таблички движений нужны для разборок полетов. Опыт разработки подобных систем подсказывает, что этого все-таки лучше, при возможности, сохранить возможность формирования отчетов на дату. авторВ связи с чем все признаки студента (курс, группа, состояние etc) при регистрации приказа + ко всему записываются непосредственно в поля таблички студент. Работать приложение существенно быстрее будет, чем если искать по движениям на sysdate. Сам не понял чё написал.Пройденный этап, как раз от этого и уходим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 10:52 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Infernal V. Raven авторВ связи с чем все признаки студента (курс, группа, состояние etc) при регистрации приказа + ко всему записываются непосредственно в поля таблички студент. Работать приложение существенно быстрее будет, чем если искать по движениям на sysdate.Пройденный этап, как раз от этого и уходим. Я бы не был столь категоричным, одно не отменяет другое, каждый раз при просмотре списка студентов вычислять динамически в какой он группе и на каком курсе можно, но не эффективно. Лучше иметь историю+актуальную информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:38 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Не спорю. Можно(да и кстати, более удобно) использовать эти поля для получения информации на текущую дату, за предыдущие периоды все равно прийдется использовать таблицу перемещений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 11:45 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Infernal V. RavenНе спорю. Можно(да и кстати, более удобно) использовать эти поля для получения информации на текущую дату, за предыдущие периоды все равно прийдется использовать таблицу перемещений ИМХО, нормально Вы предлагаете. Противоречие может быть, если в приказе есть дата исполнения, так как она может не совпалать с датой в вашей таблице. Лучше оставить одну дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:08 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Предлагаю такой вариант: Таблица приказов (ИД, Дата, Тип приказа) Таблица перемещений(Дата, Приказ, Откуда, Куда, Кого) При зачислении перемещаем из объекта "Извне" в объект Группа При перемещении стандартно При отчислении перемещаем из объекта Группа в объект "Никуда" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 12:31 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Infernal V. Ravenчто можете посоветовать? достаточно схемы такого порядка кто - идентификатор студента когда - дата перевода куда - место куда переведен почему - приказ, которым переведен в принципе - совершенно элементарная задача tblRotations 1 RotationID - идентификатор записи в таблице перемещений 2 OrderID - идентификатор записи из таблицы приказов 3 StudentID - идентификатор студента из таблицы студентов 4 GroupID - учетная группа в которую переводится студент (НЕ УЧЕБНАЯ) 5 RotationDate - актуальная дата с которой перевод учитывается (НЕ ДАТА ПРИКАЗА) переводим на простой 1 каждое любое изменение статуса объекта учета учитывается в БД 2 на каждое любое изменение статуса нужен приказ и формальное рапоряжение 3 каждое любое перемещение учитывается индивидуально для каждого объекта 4 каждое перемещение имеет свою точку назначения - группу 5 каждое перемещение имеет свою дату и формирует историю перемещений объекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 13:10 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
пвапвапвапвапвапвап достаточно схемы такого порядка кто - идентификатор студента когда - дата перевода куда - место куда переведен почему - приказ, которым переведен Не имея записи о исходном месте достаточно сложно будет получить количество студентов перемещенных из группы А в группу Б, поэтому я бы не уходил от принципа двойной записи (схема Old Nick ): кто - идентификатор студента когда - дата перевода откуда - место откуда переведен куда - место куда переведен почему - приказ, которым переведен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 13:39 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Товарисч! Спроси у методистки как выглядит алфавитная гнига, если там такие записи: ФИО | Группа | Примечание ...|...|... Иванов Муд. Ив. | блабла-01 | отчислен ...|...|... Петров Ив. Муд. | блабла-11 | ак.отпуск то группы "Никуда" и "Ниоткуда" это не группы "блабла-01" или "блабла-11", можешь сразу прикинуть лишний джоин к своему запросу из-за отсутсвия разделения понятий группа и состояние студента. + есче отчеты по оплатам (если ваш дипломный проект подразумевает учет оплат), так точно для студентов из групп "ниоткуда" придется искать предыдущее движение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 13:49 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
ПтенчикТоварисч! Спроси у методистки как выглядит алфавитная гнига, если там такие записи: ФИО | Группа | Примечание ...|...|... Иванов Муд. Ив. | блабла-01 | отчислен ...|...|... Петров Ив. Муд. | блабла-11 | ак.отпуск то группы "Никуда" и "Ниоткуда" это не группы "блабла-01" или "блабла-11", можешь сразу прикинуть лишний джоин к своему запросу из-за отсутсвия разделения понятий группа и состояние студента. + есче отчеты по оплатам (если ваш дипломный проект подразумевает учет оплат), так точно для студентов из групп "ниоткуда" придется искать предыдущее движение. е-рун-да... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 19:43 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Estets почему - приказ, которым переведен е-рун-да... откуда - это то, куда был переведен событием ранее до этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 19:45 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
YBW ПтенчикТоварисч! Спроси у методистки как выглядит алфавитная гнига, если там такие записи: е-рун-да... поясню - ты, собственно, с методистом и споришь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 19:56 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Методисты проектируют БД. Куда катится этот мир??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 06:24 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
ПтенчикМетодисты проектируют БД. Куда катится этот мир??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 09:34 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
ПтенчикТоварисч! Спроси у методистки как выглядит алфавитная гнига, если там такие записи: ФИО | Группа | Примечание ...|...|... Иванов Муд. Ив. | блабла-01 | отчислен ...|...|... Петров Ив. Муд. | блабла-11 | ак.отпуск Не стоит путать список студентов с их текущим состоянием, с таблицей учитывающей историю перемещений студента между группами. Птенчикто группы "Никуда" и "Ниоткуда" это не группы "блабла-01" или "блабла-11", можешь сразу прикинуть лишний джоин к своему запросу из-за отсутсвия разделения понятий группа и состояние студента. Если рассматривать таблицу перемещений студентов как таблицу проводок то все дополнительные признаки (курс, группа, состояние) это аналитические признаки. Их может быть несколько. И учесть это можно двумя путями 1) Вести паралельный учет Отдельно учитываем записи по изменению состояния и группы. В таблицу перемещений вводим тип записи, тогда поля Откуда-Куда будут иметь разный смысл для разных типов записи. Таблица перемещений( Тип записи , Дата, Приказ, Откуда, Куда, Кого) Например: Задача Иванов и Петорв перешли на следующий курс, Петров написал заявление об отпуске. ГРУППА, 01.01.05, приказ 1 от 01.01.05, 101, 201, Иванов И.И. ГРУППА, 01.01.05, приказ 1 от 01.01.05, 101, 201, Петров П.П. СОСТОЯНИЕ, 01.01.05, приказ 2 от 01.01.05, Обучается, Академка, Петров П.П. 2) Вести учет с несколькими аналитиками Добавляем для каждого признака пару полей с начальным и конечным состоянием. Таблица перемещений([Дата, Приказ, Группа-Откуда, Состояние-Откуда, Группа-Куда, Состояние-Куда, Кого) Задача Иванов и Петорв перешли на следующий курс, Петров написал заявление об отпуске. 01.01.05, приказ 1 от 01.01.05, 101, Обучается, 201, Обучается, Иванов И.И. 01.01.05, приказ 1 от 01.01.05, 101, Обучается, 201, Обучается, Петров П.П. 01.01.05, приказ 2 от 01.01.05, 201, Обучается, 201, Академка, Петров П.П. P.S. Не всем быть методистами как YBW так что все примеры взяты из головы без знания предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 15:35 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Estetsтак что все примеры взяты из головы без знания предметной области. какую из предметных областей вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 11:44 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
YBWкакую из предметных областей вы имеете в виду? Эту... YBWпоясню - ты, собственно, с методистом и споришь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 13:05 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Infernal V. Ravenчто можете посоветовать? танцевать от печки и сначала описать модель процесса в свете предметной области имеем 1 есть некоторое количество претендентов, которые принимаются в учебное заведение или отчисляются из него на основании распоряжений оформленых в приказах Таблица описывающая претендентов КодПретендента Фамилия Имя Отчество Пол ДатаРождения ... Таблица описывающая студентов КодСтудента КодПретендента КодРаспоряжения ... >опционально - даты таблица описывающая распоряжения КодРаспоряжения КодПриказа ТипРаспоряжения ДатаНачала ДатаОкончания (или длительность) ... таблица описывающая приказы КодПриказа КодОтветственного ДатаПриказа ... REM> одним приказом могут проводиться многие распоряжения с разными датами имеем 2 принятые на обучение студенты распределяются в группы по специализациям и могут переводиться из группы в группу по распоряжению таблица описывающая группы КодГруппы КодКуратора КодСпециализации КоличествоСлушателей таблица описывающая группы студентов (многие-ко-многим - это и есть собственно перемещения в группах и их история) КодУчастникаГруппы КодСтудента КодГруппы КодРаспоряжения (поступление) >опционально - даты REM> конечно, тут возможны разные варианты решения - это просто один из вариантов, выбор решения определяется и количеством обучающихся и количеством групп и динамикой ротаций и средой разработки и конкретной СУБД :) имеем 3 в процессе обучения студенты могут временно выбывать (не отчисляться и не переводиться из группы в группу) на основании распоряжений таблица описывающая временные выбытия обучающихся из учебного процесса(Suspend) - КодОтпуска КодСтудента КодРаспоряжения Причина/Повод >опционально - даты ... ну вот так примерно... идея в том, чтобы верно выделить сущности и оставить достаточно-необходимое количество признаков их описывающих... имеем 1 - поступления отчисления имеем 2 - перемещения ротация имеем 3 - временные выбытия называл объекты по-Русски, чтобы не озадачивать лишний раз а вообще - БАЯН исключителной боянистости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 13:44 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Estets YBWкакую из предметных областей вы имеете в виду? Эту... YBWпоясню - ты, собственно, с методистом и споришь... тогда имело-бы смысл сначала уточнить мою предметную область ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 13:46 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
YBW есть некоторое количество претендентов, которые принимаются в учебное заведение или отчисляются из него на основании распоряжений оформленых в приказах... Разделение претендентов(анкеты) и студентов несколько спорное, но наверное имеет смысл в рамках того что человек может получать два высших образования в одном институте. Т.е. проходить два цикла образования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 17:11 |
|
||
|
проектирование перемещений
|
|||
|---|---|---|---|
|
#18+
Estets YBW есть некоторое количество претендентов, которые принимаются в учебное заведение или отчисляются из него на основании распоряжений оформленых в приказах... Разделение претендентов(анкеты) и студентов несколько спорное, но наверное имеет смысл в рамках того что человек может получать два высших образования в одном институте. Т.е. проходить два цикла образования. не только в этом дело... будет проще организовать пространства данных - значимых, но не относящихся непосредственно к учебному процессу - личные данные, адреса проживания, паспорт и иные документы, родственные связи, участие в общественных организациях и партиях, приводы в милицию и задержания... в общем своего рода "гальваническая развязка" между цепями... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 18:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33267869&tid=1545666]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 305ms |
| total: | 423ms |

| 0 / 0 |
