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