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