Каскадные события довольно просты на самом деле.Например, скажем, у вас есть таблица User
с атрибутом и первичным ключом username
и таблица Email
с атрибутами username
и email address
.Теперь вполне вероятно, что мы можем сделать username
в Email
ссылкой (внешним ключом) на username
в User
, потому что мы хотим, чтобы каждый пользователь, у которого есть электронная почта, также был в нашей таблице User
.Теперь подумайте, что произойдет, если вы удалите пользователя в User
.Вы должны удалить все соответствующие строки в Email
?Если нет, что ты делаешь?Некоторые СУБД просто выдают ошибку, говоря что-то вроде «Вы не должны этого делать! Ссылки существуют, и мы не знаем, что с ними делать!».Именно здесь происходят каскадные события. Если DMBS поддерживает каскадные события, вам может быть предоставлена возможность указать, действительно ли DMBS генерирует эту ошибку, или, возможно, удалить все соответствующие (на username
в Email
) строки, поэтомунет никаких "висящих" ссылок.Это называется каскадным удалением.
Есть и другие варианты каскадирования!Другое происходит, если мы пытаемся обновить username
в User
до чего-то другого.Без каскадных опций мы бы, вероятно, выдавали ошибку, если в Email
есть совпадающие строки.Но с помощью каскадных опций у нас есть возможность автоматически обновлять username
в Email
новым username
.Это называется каскадным обновлением.
Это два основных, но ни в коем случае не единственные существующие «каскадные» варианты, которые существуют в некоторых СУБД.
Если это помогает, думайте о «каскадных» модификациях как о «рекурсивных» модификациях, поскольку они синонимичны, и это то, что подразумевается под «каскадированием».Модификации «каскадом» сводятся к другим таблицам, использующим тот же атрибут.
Подумайте о преимуществах и недостатках этой функции.Теперь мы можем точно указать, что именно должно происходить, когда мы хотим иметь «каскадные» изменения атрибутов в разных таблицах.Возможный недостаток использования этих функций заключается в том, что теперь у нас есть возможность вносить изменения в большем масштабе, чем нам бы хотелось (в зависимости от дизайна).Изменение username
в User
может привести к изменениям в другой таблице Email
, даже если мы не собираемся!
Надеюсь, это поможет.