powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос теории
13 сообщений из 13, страница 1 из 1
Вопрос теории
    #33267730
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проектируем базу. Вопрос более теоретический, чем практический.
Есть таблица студентов. Они могут перемещаться между группами на оснавании приказов, а также могут отчисляться/заканчивать и восстанавливаться в любой группе. Соответственно для этого есть таблица групп. Приказ на перемещение формируется для множество студентов, а также требуется, чтобы приказ можно было "откатить", а при случае снова активировать("накатить"). Для этого формирую таблицу приказов и еще одну таблицу для списка студентов, входящих в приказ. При активации приказа(т.к. сказать формирование проводки) в зависимости от его типа формирую, либо обновляю строку перемещения в таблице перемещений. Таблица перемещений выглядит следующим образом:

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).
Мой коллега однако не согласен с такой структурой и считает, что на каждый приказ должна быть заведена отдельная строка в таблице перемещений, а таблица студентов учавствующих в приказе вовсе не нужна, так как это дубляж данных.

что можете посоветовать?
...
Рейтинг: 0 / 0
Вопрос теории
    #33267731
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один: каким нормальным формам соответствует первый вариант, а то у нас по этому вопросу тоже споры.
...
Рейтинг: 0 / 0
Вопрос теории
    #33267734
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то вопросы проектирования баз здесь обсуждаются в специальном форуме - Проектирование БД .
Может переедем?
...
Рейтинг: 0 / 0
Вопрос теории
    #33267737
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просмотрел. Переедем
...
Рейтинг: 0 / 0
Вопрос теории
    #33267738
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок!
...
Рейтинг: 0 / 0
Вопрос теории
    #33268138
vkn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть функциональная зависимость IDorder1 -> StartDate или IDOrder2 -> EndDate, то нарушена 2-я норм. форма
...
Рейтинг: 0 / 0
Вопрос теории
    #33268192
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что да, вторая форма нарушена, т.к. StartDate, EndDate это поля из таблицы приказов. Чтобы нормализовать таблицу, в ней надо оставить только номера приказов, а для отображения создать представление. С другой стороны в эту таблицу доступ обеспечен только хранимыми процедурами, с строгими параметрами, т.е. доступ пользователей(ручной) исключен. Есть ли смысл в нормализации или все-таки переходить к использованию представлений?
...
Рейтинг: 0 / 0
Вопрос теории
    #33268218
vkn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поля оставить - неизбежны аномалии обновления - придется синхронно изменять поле Date в основной таблице и табл. приказов. Дело ваше, но я бы нормализовал это дело
...
Рейтинг: 0 / 0
Вопрос теории
    #33268269
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если приказ активен, то удалить или изменить записи в таблице перемещений нельзя, а если не активен, то записей в таблице перемещений быть не должно. У кого есть какой подобный опыт?
...
Рейтинг: 0 / 0
Вопрос теории
    #33268423
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. RavenЕсли приказ активен, то удалить или изменить записи в таблице перемещений нельзя, а если не активен, то записей в таблице перемещений быть не должно. У кого есть какой подобный опыт?
Стандартный подход в любой учетной/бухгалтерской системе, а в чем вопрос?

P.S. Кстати есть такое понятие как сторнирование перемещений (проводок) это когда приказ был отменен, но студент числился в другой группе некоторое время. Т.е. при отмене приказа не удаляется перемещение а создается новая запись в таблице перемещений возвращающая студента обратно но другой датой.
...
Рейтинг: 0 / 0
Вопрос теории
    #33268440
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про сторно - спасибо, забыл.
Вопрос таки, нормализовать или нет таблицу перемещений?
...
Рейтинг: 0 / 0
Вопрос теории
    #33270699
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная таблица, как можно понять, является вычисляемой, и служит для ускорения запросов. Нормализация здесь ни причем - с точки зрения нормализации она целиком лишняя. Так что вопрос не теоретический а скорее практический - насколько издержки по ведению таблицы перекрываются выигрышем при запросах.
На взгляд, таблица еще может быть полезна для ускорения некоторых проверок - например, не откатывать приказ IDorder1 если не пуст IDOrder2.

Если допускает применяемая СУБД, то можно сделать ее материализованным представлением.
...
Рейтинг: 0 / 0
Вопрос теории
    #33272373
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос теории
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]