Я, вероятно, ограничен, но если я создаю ограничение внешнего ключа и строка обновляется или удаляется, я теряю это соединение, если столбцу дочерней таблицы задано значение NULL.
Какова цель намеренного сохранения этих осиротевших строк?
Я, вероятно, ограничен, но если я создаю ограничение внешнего ключа и строка обновляется или удаляется, я теряю это соединение, если столбцу дочерней таблицы задано значение NULL.
Какова цель намеренного сохранения этих осиротевших строк?
Ответы:
Является ли set null
это полезным или нет, зависит от того, что вы выбрали null
для конкретного контекста - при всей путанице и мнении вокруг null
IMO разумный подход заключается в том, чтобы администратор базы данных
С этими правилами рассмотрим следующий вариант использования:
null
представлять самостоятельный магазин (то есть тот , который не является частью цепи)В этом случае on delete set null
имеет смысл. Существуют и другие способы моделирования этих бизнес-правил, но это самый простой способ, и если он точно соответствует фактам, которые вас интересуют в реальном мире, я полагаю, что это совершенно нормально.
Большинство сценариев использования, о которых я могу думать, обычно имеют форму «Ну, мы могли бы сделать что-то другое, но вместо этого нам хотелось сделать это».
Рассмотрим owner
поле для ошибки в системе отслеживания проблем в компании. Если Джон выходит, конечно, все его проблемы не должны быть просто удалены при удалении его учетной записи. Даже в этом случае некоторые базы данных допускают SET DEFAULT
как действие (или наличие триггера для выполнения той же задачи), и Nobody
может быть вариант , если сотрудник является владельцем проблем по умолчанию. Или мы могли бы иметь disabled
поле для Джона, а не удалять его запись.
RESTRICT
), если бы ни по какой другой причине он не указывал вину на старого сотрудника, когда с ним что-то не так!