Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос теории / 13 сообщений из 13, страница 1 из 1
14.09.2005, 07:51
    #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
14.09.2005, 07:52
    #33267731
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
И еще один: каким нормальным формам соответствует первый вариант, а то у нас по этому вопросу тоже споры.
...
Рейтинг: 0 / 0
14.09.2005, 07:55
    #33267734
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Вообще то вопросы проектирования баз здесь обсуждаются в специальном форуме - Проектирование БД .
Может переедем?
...
Рейтинг: 0 / 0
14.09.2005, 07:56
    #33267737
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Просмотрел. Переедем
...
Рейтинг: 0 / 0
14.09.2005, 07:57
    #33267738
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Ок!
...
Рейтинг: 0 / 0
14.09.2005, 10:57
    #33268138
vkn
vkn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Если есть функциональная зависимость IDorder1 -> StartDate или IDOrder2 -> EndDate, то нарушена 2-я норм. форма
...
Рейтинг: 0 / 0
14.09.2005, 11:08
    #33268192
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Получается, что да, вторая форма нарушена, т.к. StartDate, EndDate это поля из таблицы приказов. Чтобы нормализовать таблицу, в ней надо оставить только номера приказов, а для отображения создать представление. С другой стороны в эту таблицу доступ обеспечен только хранимыми процедурами, с строгими параметрами, т.е. доступ пользователей(ручной) исключен. Есть ли смысл в нормализации или все-таки переходить к использованию представлений?
...
Рейтинг: 0 / 0
14.09.2005, 11:14
    #33268218
vkn
vkn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Если поля оставить - неизбежны аномалии обновления - придется синхронно изменять поле Date в основной таблице и табл. приказов. Дело ваше, но я бы нормализовал это дело
...
Рейтинг: 0 / 0
14.09.2005, 11:24
    #33268269
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Если приказ активен, то удалить или изменить записи в таблице перемещений нельзя, а если не активен, то записей в таблице перемещений быть не должно. У кого есть какой подобный опыт?
...
Рейтинг: 0 / 0
14.09.2005, 11:56
    #33268423
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос теории
Infernal V. RavenЕсли приказ активен, то удалить или изменить записи в таблице перемещений нельзя, а если не активен, то записей в таблице перемещений быть не должно. У кого есть какой подобный опыт?
Стандартный подход в любой учетной/бухгалтерской системе, а в чем вопрос?

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

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


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