Рекомендации по добавлению внешних ключей в таблицу базы данных - Oracle - PullRequest
2 голосов
/ 23 марта 2012

Читая эту ссылку, я не понял смысла избегать блокировок таблиц путем добавления индексов в столбец внешнего ключа.Может ли кто-нибудь помочь мне разобраться в этом?

Кроме того, я никогда не знал о важности добавления индексов к внешнему ключу, прежде чем читать ту же ссылку (спасибо Томасу Кайту и форуму!).Может кто-нибудь, пожалуйста, укажите мне больше таких важных реализаций, которые я должен учитывать при реализации внешних ключей.

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Допустим две таблицы, PARENT и CHILD. Предположим, что существует ограничение внешнего ключа на CHILD.PARENT_ID, ссылающееся на PARENT.PARENT_ID, и что CHILD.PARENT_ID является обязательным (не нулевым) столбцом, и что для CHILD.PARENT_ID.

не существует индекса

При обновлении PARENT_ID или удалении записей из PARENT Oracle необходимо предотвратить одновременное добавление новыми транзакциями новых записей в CHILD при удалении значений PARENT_ID. Oracle может использовать индекс против CHILD.PARENT_ID, чтобы проверить, какие записи, если таковые имеются, могут быть затронуты - и заблокировать новые строки, использующие PARENT_ID, от принятия до тех пор, пока действие против PARENT не будет зафиксировано или отменено .

Однако для этой проблемы параллелизма такого индекса не существует. Таким образом, Oracle использует единственный инструмент, который у него есть - полная блокировка таблицы CHILD до тех пор, пока операция с PARENT не завершится или не откатится.

1 голос
/ 23 марта 2012

Я не уверен, что сам полностью понимаю это, но читали ли вы, что Руководство по понятиям говорит об этом?Это объясняет , что происходит , но я не уверен, что это объясняет , почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...