Если вы используете ID INT или CHAR, ссылочная целостность сохраняется в обоих случаях.
INT имеет длину 4 байта, поэтому он равен по размеру CHAR (4); если вы используете CHAR (x), где x <4, ваш ключ CHAR будет короче, чем ключ INT; если вы используете CHAR (x), где x> 4, ваш ключ CHAR будет больше, чем ключ INT; для коротких ключей не обычно имеет смысл использовать VARCHAR, так как последний имеет 2-байтовые издержки. В любом случае, если говорить о таблицах с, скажем, 500 записями, общий объем служебных данных CHAR (5) по ключу INT будет составлять всего 500 байтов, что очень важно для базы данных, где некоторые таблицы могут иметь миллионы записей.
Учитывая, что страны и валюты (например) ограничены в количестве (не более нескольких сотен), вы не получите реального выигрыша в использовании ID INT вместо CHAR (4); кроме того, ключ CHAR (4) может быть легче запомнить конечному пользователю и может облегчить вашу жизнь, когда вам придется отлаживать / тестировать свой Sql и / или данные.
Поэтому, хотя я обычно использую ключ ID INT для большинства моих таблиц, в некоторых случаях я выбираю, чтобы PK / FK состоял из CHAR: страны, языки, валюты относятся к числу таких случаев.