Недоцільно встановити обмеження для іноземного ключа на 0, тому що якщо ви це зробите, ваша база даних не гарантує, що вона не порушує референтну цілісність. Це може призвести до неточних, оманливих або неповних даних.
Ви робите зовнішній ключ з причини: тому що всі значення в дочірньому стовпці повинні бути однаковими зі значенням у батьківському стовпчику. Якщо немає зовнішніх ключових обмежень, дочірній рядок може мати значення, яке не знаходиться в батьківському рядку, що призведе до неточних даних.
Наприклад, скажімо, у вас є веб-сайт для входу студентів, і кожен студент повинен зареєструватися для облікового запису як користувач. У вас є одна таблиця для ідентифікаторів користувачів, ідентифікатор користувача як основний ключ; та інша таблиця для облікових записів студентів, із ідентифікатором студента як стовпцем. Оскільки кожен студент повинен мати ідентифікатор користувача, було б доцільно зробити ідентифікатор студента зі таблиці облікових записів студентів зовнішнім ключем, який посилається на ідентифікатор основного ключа в таблиці ідентифікаторів користувача. Якщо немає іноземних ключів, студент може мати ідентифікатор студента та ідентифікатор користувача, а це означає, що студент може отримати обліковий запис, не будучи користувачем, що неправильно.
Уявіть, якщо це трапляється з великою кількістю даних. Ось чому вам потрібна перевірка закордонного ключа.
Найкраще з’ясувати, що викликає помилку. Швидше за все, ви намагаєтесь видалити з батьківського рядка, не видаляючи дочірнього рядка. Спробуйте видалити з дочірнього рядка перед видаленням з батьківського рядка.