Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разрешить связь многие ко многим / 6 сообщений из 6, страница 1 из 1
24.04.2007, 10:02
    #34482419
Wasup!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
Пожалуйста, посмотрите вопрос:
http://www.sql.ru/forum/actualthread.aspx?tid=419905


Он на форуме Оракла. Думал решу, но пока что не получилось.
...
Рейтинг: 0 / 0
24.04.2007, 15:13
    #34483748
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
Я бы начал с сущностей (ключи подчеркнуты):

Специализация ( Преподаватель, Предмет ).
Занятие ( Время, Аудитория , Предмет)
Преподаватель_на_занятии ( Время, Преподаватель , Аудитория)

Теперь нужно обеспечить правила:
(1)Преподаватели могут проводить занятия по разным предметам -- видимо в пределах своей специализации?
(2)Необходимо исключить возможность проведения разных занятий в одно время в одной аудитории.
(3)Необходимо исключить возможность того, что один преподаватель проводит занятия в одно время в разных аудиториях.

У занятия пока не обнужено иных ключей кроме Время, Аудитория - (2) выполняется автоматичеки.

Далее зависит от того, какими средствами разрешается пользоваться для обеспечения правил.
Например в ORACLE можно создать materialized view на предопределенных таблицах с нужными ограничениями.


З.Ы. Похожий пример разбирает Дейт в своей самой известной книге.
...
Рейтинг: 0 / 0
24.04.2007, 15:31
    #34483815
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
Стандартная timetable задача. В лоб как-то так:

classroom ();
teacher ();
course ();


lecture (
rel_course); -- или использовать n:m, если необходимо (например, одна лекция читается для нескольких курсов);


lecture_teacher (
rel_lecture,
rel_teacher);


timetable (
rel_lecture,
rel_classroom,
time_start,
time_end);

Constraints пишите в зависимости от приоритетов расписания, рассматривая интервал [time_start, time_end]. Остальные сущности (факультеты, кафедры, специализации, продолжительность курсов, семестры, типы занятий, группы, студенты, посещаемость и пр.) - в зависимости от задачи.

> З.Ы. Похожий пример разбирает Дейт в своей самой известной книге.

Ссылкой не поделитесь?
...
Рейтинг: 0 / 0
24.04.2007, 15:33
    #34483824
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
На всякий случай: разумеется, у всех таблиц суррогатные ключи.
...
Рейтинг: 0 / 0
25.04.2007, 22:47
    #34488123
Wasup!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
ModelRЗанятие (Время, Аудитория, Предмет)
Преподаватель_на_занятии (Время, Преподаватель, Аудитория)

Спасибо, за помощь.
В принципе у меня так и сделано. Посмотрите мой первый пост по ссылке.
teached_subject – занятие
lecture – преподаватель на занятие

Время у меня состоит из 3-х частей: номер пары, день, признак недели (четная/нечетная).

Только эти таблицы у меня связаны, время в «преподаватель на занятие» внешний ключ на «занятие». Я так сделал, чтобы нельзя было назначить преподавателю время, в которое нет занятий.

Вопрос получился в том, что изменение «занятия» это изменение первичного ключа, что не очень приветствуется. Да и это требует каскадного обновления «преподавателя на занятия», что в Оракле стандартными средствами не делается. И ключи составные получаются, тоже не очень красиво.
Но, похоже, это единственный способ выполнить требования уникальности.
...
Рейтинг: 0 / 0
30.04.2007, 14:58
    #34497562
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить связь многие ко многим
Wasup!Только эти таблицы у меня связаны, время в «преподаватель на занятие» внешний ключ на «занятие». Я так сделал, чтобы нельзя было назначить преподавателю время, в которое нет занятий.В «занятие» первичный ключ (Время, Аудитория). Соответственно и ВК из «преподаватель на занятие» включает оба атрибута - нельзя вести не существующее занятие. Wasup!Вопрос получился в том, что изменение «занятия» это изменение первичного ключа, что не очень приветствуется. Да и это требует каскадного обновления «преподавателя на занятия», что в Оракле стандартными средствами не делается. И ключи составные получаются, тоже не очень красиво.
Но, похоже, это единственный способ выполнить требования уникальности.Дык "многия знания - многия печали". Детально описывая связи данных, естественные ключи обременяют приложение необходимостью отслеживать эти связи.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разрешить связь многие ко многим / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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