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


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

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

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

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

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


З.Ы. Похожий пример разбирает Дейт в своей самой известной книге.
...
Рейтинг: 0 / 0
Разрешить связь многие ко многим
    #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
Разрешить связь многие ко многим
    #34483824
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай: разумеется, у всех таблиц суррогатные ключи.
...
Рейтинг: 0 / 0
Разрешить связь многие ко многим
    #34488123
Wasup!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ModelRЗанятие (Время, Аудитория, Предмет)
Преподаватель_на_занятии (Время, Преподаватель, Аудитория)

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

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

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

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


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