Как работать с «необязательной» циклической ссылкой - PullRequest
0 голосов
/ 14 сентября 2018

У меня проблемы с циклическими ссылками. Мне не удается найти хорошее дизайнерское решение.

У нас есть устаревшая система планирования.

Пользователи

  • userId

TimeSlot (доступность)

  • timeSlotID
  • start_hour
  • finish_hour
  • FK_userID

Назначения

  • timeSlotID_FK
  • Подробности
  • start_hour
  • finish_hour

Таким образом, у нас есть Цепной пользователь - (1, n) -> Доступность - (1, n) -> Встречи

Теперь я хочу запланировать встречи в экстраординарный интервал времени.(Пользователь появляется, когда он не должен быть доступен, и хочет назначить встречу.

Таким образом, мне нужно сократить доступность.

Пользователь -> Назначение

Но еслиЯ добавляю новое поле UserFK. Я чувствую, что создам круговую ссылку.

1 Ответ

0 голосов
/ 14 сентября 2018

Ниже приведены мои наблюдения за дизайном базы данных, основанные на вашем вопросе.

  • Отключение FK_UserID от Таймслота.Сделайте их отдельной сущностью.У вас будет возможность связать пользователя с назначением.У вас может быть отдельная таблица User_Timeslot, если вы хотите поддерживать доступность пользователя в целом.Он может использоваться для проверки доступности и не должен влиять, если пользователь приходит на встречу.

  • Теперь appointment будет таблицей мостов, которая отображает пользователя, временной интервал исоответствующая встреча.Вы также можете иметь флаг IsUserAdhocAppointment, который сообщит, появился ли пользователь за пределами своего временного интервала (на основе таблицы User_Timeslot).Назначение для этого пользователя в этом start_hour до end_hour, подпадающих под этот временной интервал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...