Разрешение зависимостей внешнего ключа MySQL - PullRequest
1 голос
/ 11 ноября 2011

Я моделирую реляционную базу данных, где для описания 2 таблиц используется следующая схема: Модель ERD .

Указаны следующие правила:

  1. В офисе есть менеджер
  2. Каждый сотрудник назначен на должность

Чтобы смоделировать это, я создал ERD, используя MySQL, который предоставил следующее DDL .

Проблема, с которой я столкнулся, заключается в том, что для обеспечения того, чтобы в офисе должен был иметь менеджера, внешний ключ в таблице офиса не обнулялся. Аналогично, внешний ключ в таблице персонала, представляющей офис, в котором они работают, требуется для каждого сотрудника и поэтому не обнуляем. Это имеет смысл для меня в модели, однако для реализации невозможно вставить данные, так как каждый из них зависит от наличия кортежей в таблицах.

Единственный ответ, который я могу придумать, - сделать ключи обнуляемыми, чтобы один мог временно существовать без другого.

Это правильный способ решения проблемы? Со временем база данных будет нормализована до 3NF, возможно BCNF.

1 Ответ

1 голос
/ 11 ноября 2011

Проблема в том, что вы пытаетесь записать отношения между офисами и персоналом дважды. Один раз в служебной записи и снова в кадровой записи. Вы должны записывать отношения только в одном месте. Часто это делается в таблице перекрестных ссылок с двумя столбцами: Office_ID и Staff_ID. Но также часто пропускают третью таблицу и просто записывают отношения в одной из таблиц.

В этом случае вы можете устранить проблему, удалив поле Office и внешний ключ из таблицы Staff. Вы сможете создать столько записей персонала, сколько вам нужно. Затем, когда вы создаете запись Office, вы сможете назначить одного из сотрудников в Office.

...