В общем, вы можете избавить себя от головной боли, генерируя уникальный ключ для каждой строки каждой таблицы, где ключ представляет собой простое целое число, а не фактические данные.Ссылки на внешние ключи проще, и вам не нужно иметь дело с такими проблемами, как «упс, кто-то написал слово с ошибкой, но это слово теперь является частью внешнего ключа в другой таблице!»Базы данных, которые обеспечивают целостность внешнего ключа, могут действительно усложнить жизнь при изменении значений ключа.
И, как вы заметили, использование слов и другой информации в качестве внешних ключей является большим дублированием.Весь смысл нормализации (ну, в любом случае, один из них) заключается в устранении дублирования.
Большинство механизмов баз данных генерируют эти ключи для вас, обычно со свойством, называемым «личность».Эти базы данных, как правило, имеют простой способ получить эти ключи программно, когда вставляются новые данные.Однако, это больше касается кода и реализации.