Лучший оператор для ограничения FK в MySQL? - PullRequest
0 голосов
/ 03 января 2011

Для ФК я должен всегда вставлять это утверждение ON UPDATE CASCADE ON DELETE CASCADE или оно должно быть ON UPDATE CASCADE ON DELETE SET NULL

У меня есть много поисков, давайте возьмем континент из страны в штат для потока из города в район, или из отрасли в компанию для бренда в локальный магазин, где дочерняя ценность зависит от родительской ценности. Кроме того, существуют таблицы FK, такие как системные коды, которые имеют кодовое значение, используемое другими таблицами, но не имеют прямого отношения к дочернему элементу.

Итак, я заблудился, какой оператор FK использовать. Моя цель:

  • Не потерять дочерние данные, если родитель умирает.
  • При переходе между столами меньше или меньше соединений.
  • Не удалять какие-либо данные.
  • Убедитесь, что если я обновлю одну таблицу, все дети, внуки, таблицы правнуков и т. Д. Будут автоматически обновлены.

1 Ответ

0 голосов
/ 03 января 2011

Я обычно избегаю каскадов и ограничиваю их тем, где они действительно необходимы.Вы не планируете удалять континент, не так ли?
Допустим, у нас есть классический пример:

  • Клиент -> Заказы -> OrderDetails
  • Семейства -> Продукты -> OrderDetails

Я бы не разрешил какой-либо каскад, кроме, возможно, каскадного удаления для Orders-> OrderDetails (и только если компания говорит, что можно удалить заказ, что неконечно).
Я хотел бы, однако, иметь поле даты PhasedOut в таблице «Продукты», чтобы позволить продукту исчезать из каталога, но оставаться в базе данных, то же самое для клиентов: клиент может исчезнуть, но все еще оставаться вдб.

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