В качестве сотрудника используется внешний ключ в таблице works_on
;причина, по которой вы не можете удалить идентификатор сотрудника 1, заключается в том, что идентификатор сотрудника 1 существует в works_on
(или, возможно, в других таблицах, в которых сотрудник является внешним ключом).Система пытается сохранить целостность базы данных, предотвращая удаление сотрудника, связанного с works_on
.
Скажем, система позволяет удалить запись сотрудника.Теперь, когда вы посмотрите на таблицу works_on
, к чему относится сотрудник 1?Вы больше не можете искать имена / фамилии среди другой информации.Таким образом, система говорит: если вы хотите удалить запись сотрудника, вы должны сначала удалить / изменить связи внешних ключей с другими системными записями;обеспечить их постоянную целостность.Если система позволит вам сделать это, она будет называться «Сиротами».родительская запись, с которой ассоциируется дочерний элемент, больше не существует.
Чтобы разрешить несколько вариантов:
- Создайте процедуру, которая удаляет сотрудников, но сначала проверяет все таблицы, в которых сотрудник являетсявнешний ключ и гарантирует, что их можно удалить;а затем удаляет эти записи перед удалением записи сотрудника.(это может вызвать массивную цепочку, если у этих таблиц есть PK, для которых другие таблицы являются FK. Но это характер СУБД.
- Создайте функцию, которая позволяет назначать такие записи для замены сотрудника 1 или удаляет такие записиесли больше не имеет значения.
- enable
ON DELETE CASCADE ON UPDATE CASCADE,
, который автоматически удалит дочерние записи, если родительская запись удалена. (БУДЬТЕ ОЧЕНЬ ОСТОРОЖНЫ И УЧИТЫВАЙТЕ, как это повлияет на вашу систему перед включением) Пример: Документы - Не удаляйте запись, вместо этого сохраняйте поле состояния, показывающее активный / неактивный, и используйте его в качестве механизма контроля, чтобы показать или не показать сотрудников и связанные с ними записи.
- Есть также несколько других вариантов: вы должны спросить себя или компанию, для которой это разрабатывается, что должно произойти со всеми теми записями, в которых сотрудник 1 является внешним ключом. Удалить некоторые / Все, переназначить некоторые удалитьНекоторые? Подскажите пользователю, как они хотят обрабатывать каждый экземпляр? Просто сообщитеПользователь должен сначала обратиться к найденным ограничениям (перечислить все места, где этот сотрудник имеет отношение к FK?) и убедиться, что у них есть способ обработать все эти места ... Множество вариантов.