|
|
|
Оцените правильность проектирования
|
|||
|---|---|---|---|
|
#18+
Просьба оценить правильность проектирования базы данных. База данных учебная, реализована будет на Oracle. Но, несмотря на то, что база учебная необходимо сделать ее как можно лучше и оптимальней. Задание следующее: Разработать информационную систему учета проведения занятий в институте в течение одного учебного семестра. Требования к данным 1.Система должна обеспечивать хранение информации о следующих объектах: -Преподаватель -Кафедра -Лекции -Семинары 2. Информация, описывающая отдельного преподавателя, включает фамилию, имя, отчество преподавателя; табельный номер; должность; ученую степень; кафедру на которой работает преподаватель; дату приема на работу. 3. Информация, описывающая кафедру института, включает название и номер кафедры; данные о заведующем кафедрой; количество преподавателей на кафедре. 4. Информация, описывающая занятия (лекции и семинары), включает наименование курса; количество часов занятий; номер аудитории, где походит занятие; дни недели и время когда проходит занятия. В случаи если занятия проводится не каждую неделю, необходимо хранить информацию о неделях, по которым проводятся занятия. 5. Каждый преподаватель должен проводить занятия (лекции или семинары). 6. Преподаватели могут проводить занятия по разным предметам. 7. Каждое занятие (семинар или лекция) должна иметь одного или нескольких преподавателей, при этом преподаватели могут быть с разных кафедр. 8.Необходимо исключить возможность проведения разных занятий в одно время в одной аудитории. 9.Необходимо исключить возможность того, что один преподаватель проводит занятия в одно время в разных аудиториях. 10.Кафедра обязательно должна иметь заведующего кафедрой, при этом необходимо хранить информацию обо всех заведовавших кафедрой. 11.*Необходимо хранить информацию о смене статуса преподавателей. Изменения в должности, смена кафедры. 12. *Необходимо хранить архивную информацию об учителях и кафедрах. Затруднения вызывают 11 и 12 пункты. Решил поступить следующим образом: разделить информацию об учителях на две таблицы. В Teacher постоянные данные (имя, фамилия, дата приема). В Teacher_data изменяющиеся данные (кафедра, ученая степень, должность). Для каждого учителя в teacher_data одна запись помечена, как активная. Данные по удаленным учителям хранятся в таблице teacher_arc. Ссылочная целостность между таблицами реализуется с помощью триггеров. Чтобы перенести все операции по обновлению таблицы teacher_data в базу данных, сделал view объединяющее teacher и только активные записи из teacher_data - vwteacher. То есть пользователь видит только активную информацию по учителю. А на этот view сделал instead of триггер, реализующий все операции над таблицами. На примере: при изменении должности учителя на view vwteacher делается update. Срабатывает триггер, который добавляет новую запись в teacher_data и помечает ее как активную. Насколько целесообразно такое решение? И насколько вообще грамотно сделана база? Высказывайте любые замечания, чем больше, тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 17:00 |
|
||
|
Оцените правильность проектирования
|
|||
|---|---|---|---|
|
#18+
Wasup! На первый взгляд работу Вы проделали не самую плохую, хотя сходу насторожило то, что если не ошибаюсь, преподаватель не имеет возможности читать несколько лекций одновременно [я не уверен, что правильно понял направление стрелок, но вроде выходит так]. Названное Вами решение версионности - одно из возможных, не факт что лучшее, но вполне нормальное. В целом - Вашу схему трудно читать. Если хотите получить детализированное мнение, пожалуйста просто сделайте файлик с ddl ваших объектов и выложите его сюда - будет удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 18:52 |
|
||
|
Оцените правильность проектирования
|
|||
|---|---|---|---|
|
#18+
softwarer преподаватель не имеет возможности читать несколько лекций одновременно По правилам преподаватель не может одновременно проводить два разных занятия в одно и тоже время. А несколько преподавателей могут одновременно проводить одно занятие. Например, Иванов не может проводить лекцию по Русскому языку в 12.00 в аудитории 105 и лекцию по Английскому языку в то же время в аудитории 205. Но, Иванов и Петров могут одновременно проводить семинар по Немецкому языку в 13.00 в аудитории 305. Для этого в таблице teached_subject создается "Проводимое занятие" связывающее предмет, помещение, время. Constraint`ы на нее исключают возможность проведения разных занятий в одно и то же время, в одной и той же аудитории. Для связи "Проводимого занятия" с конкретными преподавателями служит таблица lectures. Она позволяет назначить нескольким преподавателям одну лекцию. Но, действительно, не проверяет назначение одного и того же преподавателя на разные лекции в одно и тоже время. Спасибо! Буду думать, как это реализовать. DDL формирующий базу выложил. Особенно интересует мнение по коду триггеров. Насколько правильно сделано. И всякие другие замечания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 17:47 |
|
||
|
Оцените правильность проектирования
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли хотите получить детализированное мнение, пожалуйста просто сделайте файлик с ddl ваших объектов и выложите его сюда - будет удобнее. Если не сложно, оцените на правильность. Не обязательно все, но основные ляпы. Скрипт с DDL обновил. И еще вопрос: Какая последовательность выдачи прав и создания таблиц? Предполагается использование тремя категориями пользователей: сотрудник группы расписания, заведующий кафедрой, преподаватель. -В базе oracle создается некий пользователь, предположим var2. Ему даются роли connect и resource, и в его схеме создаются все таблицы, view и т.д. -Создаются три роли employee, director, teacher Этим ролям явно даются привелегии на таблицы пользователя var2 - grant select, insert, update, delete on var2.VWTEACHER to Employee; и т.д. -Создаются непосредственно пользователи системы Иванов, Петров, Сидоров им даются роли connect, employee, director, teacher. Все правильно, ничего не забыл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2006, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=132&tid=1545006]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 400ms |

| 0 / 0 |
