Проблемы с целостностью данных с RDBMS - PullRequest
0 голосов
/ 06 июня 2011

Кто-нибудь знает о событиях Cascade в системе реляционных баз данных?Как это работает, как это помогает и есть ли недостатки.Спасибо.

1 Ответ

1 голос
/ 07 июня 2011

Каскадные события довольно просты на самом деле.Например, скажем, у вас есть таблица 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, даже если мы не собираемся!

Надеюсь, это поможет.

...