Я припускаю, що ви говорите про закордонні ключові обмеження, що застосовуються базою даних . Напевно, ви вже використовуєте іноземні ключі, ви просто не повідомили про це базу даних.
Припустимо, програміст насправді робить це правильним чином, то чи насправді нам потрібна концепція іноземних ключів?
Теоретично ні. Однак ніколи не було жодного програмного забезпечення без помилок.
Помилки в коді програми, як правило, не так небезпечні - ви виявляєте помилку та виправляєте її, а після цього програма знову запускається безперебійно. Але якщо помилка дозволяє криптовалюті входити в базу даних, то ви застрягли в ній! Від корумпованих даних у базі даних дуже важко відновитись.
Подумайте, чи тонка помилка у FogBugz дозволила записати у базу даних пошкоджений зовнішній ключ. Виправити помилку може бути просто та швидко підштовхнути виправлення до клієнтів у випуску помилки. Однак як слід виправити корумповані дані в десятках баз даних? Зараз правильний код може раптом зламатися, оскільки припущення про цілісність сторонніх ключів більше не мають права.
У веб-додатках типово лише одна програма, яка звертається до бази даних, тому є лише одне місце, де помилки можуть пошкодити дані. У корпоративному додатку може бути кілька незалежних додатків, що говорять на одній базі даних (не кажучи вже про людей, що працюють безпосередньо з оболонкою бази даних). Немає можливості бути впевненим, що всі програми дотримуються однакових припущень без помилок, завжди і назавжди.
Якщо обмеження кодуються в базі даних, то найгірше, що може статися з помилками, - це те, що користувачеві відображається некрасиве повідомлення про помилку про те, що деякі обмеження SQL не задовольняються. Це набагато краще, ніж випуск даних із криптовалютою у вашу корпоративну базу даних, де це, в свою чергу, порушить усі ваші програми або просто призведе до різного роду помилкових чи оманливих результатів.
Так, і зовнішні ключові обмеження також покращують продуктивність, оскільки вони індексуються за замовчуванням. Я не можу придумати жодних причин, щоб не використовувати обмеження іноземних ключів.