Использование ограничений внешнего ключа реляционной базы данных на практике - PullRequest
2 голосов
/ 26 октября 2010

Итак, у вас есть реляционная база данных, и вы определяете некоторые внешние ключи для целостности ссылок. Но теперь, как лучше их использовать? Предположим, мы собираемся удалить строку в таблице с внешними ключами для других таблиц.

  1. Использовать их как сборщик мусора - установить все ограничения на каскад. Итак, в вашем приложении вы сначала проверяете, есть ли в целевой строке какие-либо «потомки», и предоставляете пользователю возможность прервать операцию удаления, если нежелательно также удалять зависимые строки.

  2. Используйте их как фактические ограничения - В вашем приложении просто попытайтесь удалить строку назначения. Если операция не удалась, , затем проверьте, есть ли у нее дочерние элементы, и представьте параметры пользователю; Если пользователь хочет продолжить операцию, сначала удалите соответствующие строки вручную.

Второй вариант делает удаление циклических ссылок довольно трудоемким - вы должны установить внешние ключи в null, прежде чем вы сможете что-либо удалить.

1 Ответ

1 голос
/ 26 октября 2010

Существует 2 типичных сценария внешнего ключа:

  • Ассоциация: связать 2 сущности, которые могут существовать самостоятельно
  • Состав: связать дочернюю сущность с ее родительской сущностью (дочерней)сущность существует без родителя, например: заказ и позиция заказа)

Я бы каскадировал только в случае композиции и рассматривал каждый случай ассоциации индивидуально.

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