Да, вы всегда можете оставить ограничения внешнего ключа, но тогда вы будете нести ответственность за целостность ваших данных.Если вы используете ограничения внешнего ключа, вам не придется беспокоиться о ссылочной целостности таблиц.Вы можете прочитать больше о ссылочной целостности из Wikipedia .Я также попытаюсь объяснить это приведенным ниже примером.
Подумайте о сценарии корзины покупок.У вас есть три таблицы: item
, shopping_cart
и shopping_cart_item
.Вы можете не определять какие-либо отношения между этими таблицами, это хорошо для любого решения SQL.Когда пользователь начинает делать покупки, вы создаете корзину для покупок, добавляя запись shopping_cart
.Когда пользователь добавляет товары в свою корзину, вы сохраняете эту информацию, добавляя строки в таблицу shopping_cart_item
.
На этом шаге может возникнуть одна проблема: Если у вас есть код ошибки, который присваивает неправильные значения shopping_cart_id
до shopping_cart_item
с, то вы обязательно получите неверные данные!Да, вы можете иметь этот случай даже с ограничением внешнего ключа, если назначенный идентификатор действительно существует в таблице shopping_cart
.Но эта ошибка будет более обнаружимой, когда существует внешний ключ, поскольку она не будет вставлять запись shopping_cart_item
, когда ограничение внешнего ключа не будет выполнено.
Давайте продолжим с предположением, что ваш код не содержит ошибок, и вы не будетеимеют первый тип ссылочной целостности.Затем внезапно пользователь хочет прекратить покупки и удалить корзину, и вы решили реализовать этот случай, удалив записи shopping_cart
и shopping_cart_item
.Затем вам нужно будет удалить записи в обеих таблицах с двумя отдельными запросами.Если после удаления shopping_cart
записей что-то пойдет не так, у вас снова будет проблема ссылочной целостности: у вас будет shopping_cart_item
s, которые не связаны ни с одним shopping_cart
.Затем вам нужно будет ввести управление транзакциями, попытаться предоставить значимые данные вашей бизнес-логике об ошибке, произошедшей на уровне доступа к данным, и т. Д.
В этом типе сценариев внешние ключи могут спасти жизнь.Вы можете определить ограничение внешнего ключа, которое будет препятствовать вставке любых сортировок некорректных данных, и вы можете определить каскадные операции, которые будут автоматически удалять связанные данные.
Если что-то неясно,просто оставьте комментарий, и я могу улучшить ответ.